ثبت‌نام سریع و تأییدشده

نمای کلی

وب iOS میانای برنامه‌سازی کاربردی

‫Google Maps Platform برای وب (JS،‏ TS)،‏ Android، و iOS دردسترس است و همچنین میاناهای برنامه‌سازی کاربردی سرویس‌های وب را برای دریافت اطلاعات درباره مکان‌ها، مسیرها، و فاصله‌ها ارائه می‌دهد. نمونه‌های این راهنما برای یک پلاتفرم نوشته شده‌اند، اما پیوندهای اسناد برای پیاده‌سازی در پلاتفرم‌های دیگر ارائه شده‌اند.

اکنون آن را بسازید!

Quick Builder در کنسول Google Cloud به شما امکان می‌دهد بااستفاده از میانای کاربر تعاملی که کد جاوا اسکریپت برای شما تولید می‌کند، تکمیل خودکار فرم نشانی بسازید.

کاربران به زندگی و فعالیت در دنیای دیجیتال عادت کرده‌اند که در آن راحتی، سرعت، و امنیت انتظارات اولیه هستند. وقتی برای چیزی مثل کارت اعتباری، حساب بانکی، یا وام درخواست می‌دهند، انتظار دارند این فرایند سریع و آسان باشد.

هرچه کاربران بیشتر مجبور به تایپ کردن یا وارد کردن داده‌های تکراری باشند، شانس شما برای حفظ آن‌ها به‌عنوان مشتری کمتر می‌شود. ایجاد تجربه ثبت‌نام سریع، آسان، و تأییدشده تجربه کاربری را بهبود می‌بخشد و درعین‌حال به شما کمک می‌کند کاربران را در سایتتان نگه دارید.

نشانی‌هایی که به‌صورت دستی وارد می‌شوند می‌توانند منجر به کاهش تبدیل‌ها، داده‌های اشتباه CRM، و اشتباهات پرهزینه در ارسال شوند. «ثبت‌نام سریع و درستی‌سنجی‌شده» ثبت‌نام را سریع‌تر می‌کند، با چند ضربه شست، نشانی‌های اطراف را فوراً پیشنهاد می‌دهد و نشانی واردشده را برای تأیید دیداری نمایش می‌دهد و به کاربر کمک می‌کند مطمئن شود نشانی درست را وارد کرده است. درستی‌سنجی نشانی کاربر بااستفاده از مکان فعلی او به جلوگیری از کلاهبرداری نیز کمک می‌کند و اعتماد کاربر به محصولات و سرویس‌های شما را تقویت می‌کند. درستی‌سنجی همچنین می‌تواند اطمینان شما را در ارائه فوری کارت‌های اعتباری و بانکی مجازی افزایش دهد.

این سند راهنمای پیاده‌سازی برای ساختن تجربه «ثبت‌نام سریع و تأییدشده» با «پلاتفرم Google Maps» را ارائه می‌دهد. ازآنجایی‌که کاربران به‌احتمال زیاد در دستگاه‌های همراه ثبت‌نام می‌کنند، اکثر نمونه‌های پیاده‌سازی در این سند بر Android تمرکز دارند. برای مشاهده مثال کامل، کد منبع نمونه را ببینید. همچنین می‌توانید از کیت‌های توسعه نرم‌افزار iOS برای دستیابی به اهداف مشابه استفاده کنید.

نمودار زیر میاناهای برنامه‌سازی کاربردی اصلی درگیر در ساختن راه‌حل را نشان می‌دهد (برای بزرگ کردن کلیک کنید).

درحال فعال کردن میاناهای برنامه‌سازی کاربردی

برای پیاده‌سازی این توصیه‌ها، باید میاناهای برنامه‌سازی کاربردی زیر را در کنسول Google Cloud فعال کنید:

برای کسب اطلاعات بیشتر درباره راه‌اندازی، شروع کار با پلاتفرم Google Maps را ببینید.

بخش‌های روال‌های مطلوب

این سند شامل رویه‌ها و سفارشی‌سازی‌های زیر است.

  • نماد علامت تأیید یک روال مطلوب اصلی است.
  • نماد ستاره اختیاری است اما برای بهبود راهکار، سفارشی‌سازی توصیه می‌شود.
افزودن تکمیل خودکار به فیلدهای ورودی تکمیل خودکار فرم نشانی. عملکرد «تایپ درحین حرکت» را اضافه کنید تا تجربه کاربری را در همه پلاتفرم‌ها بهبود دهید و دقت نشانی را با حداقل ضربه کلید بهبود دهید.
ارائه تأیید تصویری نشانی به کاربران اجازه دهید نشانی‌شان را روی نقشه ببینند تا به‌صورت دیداری تأیید کنند که نشانی را درست وارد کرده‌اند.
مقایسه نشانی واردشده توسط کاربر با مکان دستگاه نشانی انتخابی یا واردشده کاربر را با مکان فعلی دستگاه او مقایسه کنید تا به تعیین اینکه کاربر در نشانی نشان‌داده‌شده حضور دارد کمک کنید. (برای اینکه این کار انجام شود، کاربران باید هنگام ثبت‌نام در خانه باشند.)
نکته‌هایی برای بهبود بیشتر «ثبت‌نام سریع و تأییدشده» می‌توانید با افزودن مواردی مثل سفارشی‌سازی ظاهر و احساس ابزارک «تکمیل خودکار» یا اجازه دادن به کاربران برای انتخاب نام کسب‌وکار یا مکان دیدنی به‌عنوان نشانی، ورود نشانی را حتی بیشتر بهبود دهید.

افزودن تکمیل خودکار به فیلدهای ورودی

این نمونه از موارد زیر استفاده می‌کند: کیت توسعه نرم‌افزار مکان‌ها، ویژه Android همچنین دردسترس است: iOS | JavaScript

«تکمیل خودکار جا» می‌تواند وارد کردن نشانی را در برنامه‌تان ساده کند و به نرخ تبدیل بالاتر و تجربه یکپارچه برای مشتریانتان منجر شود. «تکمیل خودکار» یک فیلد ورودی سریع و تکی با پیش‌بینی نشانی «پیش‌نویس» ارائه می‌دهد که می‌تواند برای تکمیل خودکار فرم نشانی ثبت‌نام استفاده شود. با گنجاندن «تکمیل خودکار مکان» در جریان ثبت‌نام، می‌توانید:

  • خطاهای ورود نشانی را کاهش دهید.
  • تعداد مراحل فرایند ثبت‌نام را کاهش دهید.
  • تجربه وارد کردن نشانی در دستگاه‌های همراه یا پوشیدنی را ساده کنید.
  • تعداد ضربه‌های کلید و زمان کلی موردنیاز مشتری برای ثبت‌نام را به‌طور قابل‌توجهی کاهش دهید.

وقتی کاربر چارگوش ورودی «تکمیل خودکار» را انتخاب می‌کند و شروع به تایپ می‌کند، فهرستی از پیش‌بینی‌های نشانی ظاهر می‌شود.

وقتی کاربر نشانی‌ای را از فهرست پیش‌بینی‌ها انتخاب می‌کند، می‌توانید از پاسخ برای تأیید نشانی و دریافت مکان استفاده کنید. سپس برنامه شما می‌تواند فیلدهای صحیح فرم ورودی نشانی را پر کند، همان‌طور که در شکل زیر نشان داده شده است.

ویدیوها: بهبود دادن فرم‌های نشانی با «تکمیل خودکار جا»

فرم‌های نشانی

Android

iOS

وب

«پلاتفرم Google Maps» ابزاره «تکمیل خودکار جا» را برای پلاتفرم‌های تلفن همراه و وب ارائه می‌دهد. ابزاره‌ای که در شکل‌های قبلی نشان داده شده است، کادر گفتگوی جستجویی با عملکرد تکمیل خودکار داخلی ارائه می‌دهد که حتی می‌توانید آن را برای جستجوی محدود به مکان بهینه‌سازی کنید.

این بخش نحوه پیاده‌سازی «تکمیل خودکار جا» را برای «ثبت‌نام سریع و تأییدشده» شرح می‌دهد.

افزودن ابزارک «تکمیل خودکار جا»

در Android، می‌توانید بااستفاده از هدف تکمیل خودکار، ابزاره تکمیل خودکار را اضافه کنید که «تکمیل خودکار جا» را از فیلد ورودی «خط نشانی ۱» راه‌اندازی می‌کند، جایی که کاربر شروع به وارد کردن نشانی خود می‌کند. وقتی شروع به تایپ کردن می‌کنند، می‌توانند نشانی‌شان را از فهرست پیش‌بینی‌های «تکمیل خودکار» انتخاب کنند.

ابتدا، راه‌انداز فعالیتی را بااستفاده از ActivityResultLauncher آماده کنید که به نتیجه فعالیت راه‌اندازی‌شده گوش دهد. فراخوانی برگشتی نتیجه حاوی شیء «مکان» مربوط به نشانی‌ای خواهد بود که کاربر از پیش‌بینی‌های «تکمیل خودکار» انتخاب می‌کند.

    private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent intent = result.getData();
                    if (intent != null) {
                        Place place = Autocomplete.getPlaceFromIntent(intent);

                        // Write a method to read the address components from the Place
                        // and populate the form with the address components
                        Log.d(TAG, "Place: " + place.getAddressComponents());
                        fillInAddress(place);
                    }
                } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                    // The user canceled the operation.
                    Log.i(TAG, "User canceled autocomplete");
                }
            });

سپس، فیلدها، مکان، و نوع دارایی‌های قصد «تکمیل خودکار مکان» را تعریف کنید و آن را با Autocomplete.IntentBuilder بسازید. درنهایت، قصد را بااستفاده از ActivityResultLauncher تعریف‌شده در نمونه کد قبلی راه‌اندازی کنید.

    private void startAutocompleteIntent() {

        // Set the fields to specify which types of place data to
        // return after the user has made a selection.
        List<Place.Field> fields = Arrays.asList(Place.Field.ADDRESS_COMPONENTS,
                Place.Field.LOCATION, Place.Field.VIEWPORT);

        // Build the autocomplete intent with field, country, and type filters applied
        Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, fields)
                .setCountries(List.of("US"))
                // IMPORTANT: the widget uses the legacy api
                .setTypesFilter(List.of(PlaceTypes.ADDRESS))
                .build(this);
        startAutocomplete.launch(intent);
    }

مدیریت نشانی برگشتی از «تکمیل خودکار جا»

تعریف ActivityResultLauncher در ابتدا همچنین تعریف می‌کند که وقتی نتیجه فعالیت در تماس برگشتی برگردانده می‌شود چه کاری باید انجام شود. اگر کاربر پیش‌بینی‌ای را انتخاب کرده باشد، این پیش‌بینی در هدف موجود در شیء نتیجه ارائه خواهد شد. ازآنجایی‌که هدف توسط Autocomplete.IntentBuilder ساخته شده است، روش Autocomplete.getPlaceFromIntent() می‌تواند شیء «مکان» را از آن استخراج کند.

    private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent intent = result.getData();
                    if (intent != null) {
                        Place place = Autocomplete.getPlaceFromIntent(intent);

                        // Write a method to read the address components from the Place
                        // and populate the form with the address components
                        Log.d(TAG, "Place: " + place.getAddressComponents());
                        fillInAddress(place);
                    }
                } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                    // The user canceled the operation.
                    Log.i(TAG, "User canceled autocomplete");
                }
            });

از آنجا، Place.getAddressComponents() را فراخوانی کنید و هر مؤلفه نشانی را با فیلد ورودی مربوطه در فرم نشانی مطابقت دهید و فیلد را با مقدار «مکان» انتخابی کاربر پر کنید.

گرفتن داده‌های نشانی از پیش‌بینی به‌جای نشانی واردشده به‌صورت دستی به اطمینان از دقت نشانی کمک می‌کند، اطمینان می‌دهد که نشانی شناخته‌شده است و می‌توان به آن تحویل داد، و تعداد کلیدهای فشرده‌شده توسط کاربر را کاهش می‌دهد.

ملاحظات هنگام پیاده‌سازی «تکمیل خودکار جا»

«تکمیل خودکار جا» گزینه‌هایی دارد که به آن اجازه می‌دهد در پیاده‌سازی‌اش انعطاف‌پذیر باشد، اگر بخواهید از چیزی بیشتر از ابزاره استفاده کنید. می‌توانید از ترکیبی از خدمات استفاده کنید تا دقیقاً آنچه را که برای مطابقت دادن مکان به‌روش صحیح نیاز دارید دریافت کنید.

  • برای فرم ADDRESS، پارامتر types را روی address تنظیم کنید تا مطابقت‌ها به نشانی‌های کامل خیابان محدود شود. درباره انواع پشتیبانی‌شده در درخواست‌های «تکمیل خودکار جا» بیشتر بدانید.

  • اگر نیازی به جستجوی سراسری ندارید، محدودیت‌ها و سوگیری‌های مناسب را تنظیم کنید. پارامترهای متعددی وجود دارد که می‌توان از آن‌ها برای سوگیری یا محدود کردن هرگونه مطابقت فقط به مناطق خاص استفاده کرد.

    • از RectangularBounds برای تنظیم مرزهای مستطیلی برای محدود کردن منطقه استفاده کنید، از setLocationRestriction() استفاده کنید تا مطمئن شوید فقط نشانی‌های موجود در آن مناطق برگردانده می‌شود.

    • از setCountries() برای محدود کردن پاسخ‌ها به مجموعه خاصی از کشورها استفاده کنید.

  • فیلدها را قابل‌ویرایش بگذارید تا اگر فیلدهای خاصی در تطابق ازقلم افتاده بود، مشتریان بتوانند درصورت نیاز نشانی را به‌روز کنند. چون اکثر نشانی‌های برگردانده‌شده توسط «تکمیل خودکار جا» حاوی شماره‌های فرعی مانند شماره آپارتمان، سوئیت، یا واحد نیستند، می‌توانید تمرکز را به «خط نشانی ۲» منتقل کنید تا کاربر را تشویق کنید درصورت لزوم آن اطلاعات را تکمیل کند.

ارائه تأیید تصویری نشانی

این مثال از موارد زیر استفاده می‌کند: کیت توسعه نرم‌افزار Maps برای Android همچنین دردسترس است: iOS | JavaScript

به‌عنوان بخشی از ورودی نشانی، تأیید دیداری نشانی روی نقشه را به کاربران ارائه دهید. این کار به کاربران اطمینان بیشتری می‌دهد که نشانی درست است.

شکل زیر نقشه‌ای را نشان می‌دهد که در زیر نشانی با سنجاقی در نشانی واردشده قرار دارد.

مثال زیر از مراحل اصلی برای افزودن نقشه در Android پیروی می‌کند. برای جزئیات بیشتر به اسناد مراجعه کنید.

درحال افزودن SupportMapFragment…

ابتدا، یک قطعه SupportMapFragment به فایل XML چیدمان اضافه کنید.

    <fragment
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:id="@+id/confirmation_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

سپس، اگر قطعه هنوز وجود ندارد، آن را به‌صورت برنامه‌نویسی‌شده اضافه کنید.

    private void showMap(Place place) {
        coordinates = place.getLocation();

        // It isn't possible to set a fragment's id programmatically so we set a tag instead and
        // search for it using that.
        mapFragment = (SupportMapFragment)
                getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);

        // We only create a fragment if it doesn't already exist.
        if (mapFragment == null) {
            mapPanel = ((ViewStub) findViewById(R.id.stub_map)).inflate();
            GoogleMapOptions mapOptions = new GoogleMapOptions();
            mapOptions.mapToolbarEnabled(false);

            // To programmatically add the map, we first create a SupportMapFragment.
            mapFragment = SupportMapFragment.newInstance(mapOptions);

            // Then we add it using a FragmentTransaction.
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.confirmation_map, mapFragment, MAP_FRAGMENT_TAG)
                    .commit();
            mapFragment.getMapAsync(this);
        } else {
            updateMap(coordinates);
        }
    }

دریافت دستگیره برای قطعه و ثبت کردن برگشتی

  1. برای دریافت دستگیره قطعه، روش FragmentManager.findFragmentById را فراخوانی کنید و شناسه منبع قطعه را در فایل چیدمان به آن ارسال کنید. اگر قطعه را به‌صورت پویا اضافه کرده‌اید، این مرحله را رد کنید زیرا قبلاً دستگیره را بازیابی کرده‌اید.

  2. برای تنظیم کردن فراخوانی برگشتی در قطعه، روش getMapAsync را فراخوانی کنید.

برای مثال، اگر قطعه را به‌صورت ایستا اضافه کرده‌اید:

Kotlin

val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

      

جاوا

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

      

سبک‌بندی و افزودن نشانگر به نقشه

وقتی نقشه آماده شد، سبک را تنظیم کنید، دوربین را در مرکز قرار دهید، و نشانگری در مختصات نشانی واردشده اضافه کنید. کد زیر از سبک‌پردازی تعریف‌شده در شیء JSON استفاده می‌کند یا می‌توانید شناسه نقشه‌ای را بار کنید که با سبک‌پردازی نقشه بااستفاده از فضای ابری تعریف شده است.

    @Override
    public void onMapReady(@NonNull GoogleMap googleMap) {
        map = googleMap;
        try {
            // Customise the styling of the base map using a JSON object defined
            // in a string resource.
            boolean success = map.setMapStyle(
                    MapStyleOptions.loadRawResourceStyle(this, R.raw.style_json));

            if (!success) {
                Log.e(TAG, "Style parsing failed.");
            }
        } catch (Resources.NotFoundException e) {
            Log.e(TAG, "Can't find style. Error: ", e);
        }
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15f));
        marker = map.addMarker(new MarkerOptions().position(coordinates));
    }

(مشاهده نمونه کد کامل)

غیرفعال کردن کنترل‌های نقشه

برای تمیز نگه داشتن نقشه با نشان دادن مکان بدون کنترل‌های اضافی نقشه مانند قطب‌نما یا نوار ابزار، غیرفعال کردن کنترل‌هایی را که نیاز ندارید درنظر بگیرید. در Android، گزینه دیگر فعال کردن حالت ساده برای ارائه تعامل محدود است.

مقایسه نشانی واردشده توسط کاربر با مکان دستگاه

دریافت مدرک اثبات نشانی (اطمینان از اینکه کاربر در نشانی‌ای که وارد کرده است حضور دارد) می‌تواند به‌دلیل عواملی مثل دور بودن مکان کاربر، نقل مکان کاربر به نشانی جدید، یا کسب‌وکارهای دیجیتال (مثل بانک‌های دیجیتال) که مکان فیزیکی ندارند تا کاربر بتواند برای ارائه مدرک اثبات نشانی با قبض خدمات یا اسناد دیگر به آنجا مراجعه کند، پیچیده باشد. ارائه روش‌های دیجیتال برای درستی‌سنجی نشانی کاربران به شما امکان می‌دهد تجربه ثبت‌نام سریع‌تر و بدون مشکلی ارائه دهید.

امنیت در دریافت تأییدیه نشانی، به‌ویژه با فرایند ثبت‌نام دیجیتال، از اهمیت بالایی برخوردار است. این بخش راهنمایی و نمونه‌هایی برای بررسی اینکه آیا مکان کاربر درطول ثبت‌نام با نشانی‌ای که به‌عنوان نشانی خودش وارد می‌کند مطابقت دارد یا نه ارائه می‌دهد.

فرایند مقایسه نشانی واردشده با مکان دستگاه شامل مراحل زیر است:

  1. تبدیل نشانی واردشده توسط کاربر به مختصات جغرافیایی.
  2. درخواست اجازه از کاربر برای دریافت مکان دستگاه.
  3. محاسبه فاصله بین نشانی واردشده و مکان دستگاه. شما می‌توانید حداکثر فاصله‌ای را که برای مطابقت نشانی با مکان درنظر گرفته می‌شود تعیین کنید.

شکل زیر نمونه‌ای از نحوه درخواست از کاربران برای مقایسه نشانی واردشده با مکان فعلی‌شان است.

تبدیل نشانی واردشده توسط کاربر به مختصات جغرافیایی

این نمونه از موارد زیر استفاده می‌کند: کیت توسعه نرم‌افزار مکان‌ها، ویژه Android همچنین دردسترس است: iOS | JavaScript | Geocoding API

پس‌از اینکه کاربران با درستی‌سنجی نشانی موافقت کردند (با لمس کردن «تأیید کنید که اکنون آنجا هستم» در شکل قبلی)، اولین مرحله در مقایسه نشانی با مکان فعلی تبدیل نشانی واردشده به مختصات جغرافیایی است.

اگر کاربر نشانی‌اش را با «تکمیل خودکار جا» انتخاب کرد، حتماً Place.Field.LAT_LNG را در فهرست فیلد «تکمیل خودکار جا» درخواست کنید، همان‌طور که در تکه کد افزودن ابزارک «تکمیل خودکار جا» نشان داده شده است، و متد Place.getLatLng() را برای دریافت مختصات جغرافیایی نشانی انتخاب‌شده فراخوانی کنید.

coordinates = place.getLatLng();

اگر کاربر نشانی‌اش را به‌صورت دستی وارد کرده است یا پس‌از اینکه «تکمیل خودکار جا» فیلدها را پر کرد، ویرایش‌هایی انجام داده است، از سرویس زمین‌کدیاب Android یا Geocoding API برای جستجوی مختصات مربوط به آن نشانی استفاده کنید.

مثال

https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%2BParkway%2C%20Mountain%20View%2C%20CA%2094043&key=YOUR_API_KEY

حتماً فراخوانی Geocoding API را کدگذاری نشانی وب کنید.

مرجع سریع کدبندی نشانی وب: %20 = فاصله، %2B = + (به‌علاوه)، %2C = , (کاما)

درخواست اجازه از کاربر برای دریافت مکان دستگاه او

برای دریافت مکان دستگاه کاربر، باید از کاربر اجازه درخواست کنید تا خدمات مکان را فعال کند. بااستفاده از راهنمایی‌های موجود در سند Android درباره ساخت برنامه‌های آگاه از مکان، جریان زیر را پیاده‌سازی کنید:

  • درخواست اجازه مکان، به‌صورت اعطای یک‌باره، در سطح دقیق (ACCESS_FINE_LOCATION).

  • اگر کاربر دسترسی به مکان را اعطا کرد، مکان کاربر را دریافت کنید.

  • اگر کاربر دسترسی به مکان را رد کرد، این رد را به‌نحوی مناسب مدیریت کنید. برای مثال، می‌توانید نوع پیام زیر را ارائه دهید (با فرض اینکه مکان فعلی کاربر را ذخیره نمی‌کنید):

    «اگر به برنامه اجازه ندهید مکان دقیق شما را بداند، باید برای فعال کردن حسابتان ازطریق ایمیل درستی‌سنجی کنید. [تأیید]»

شکل زیر نمونه‌ای از پیام‌واره‌ای را نشان می‌دهد که از کاربران می‌خواهد اجازه دسترسی به مکان دستگاه را بدهند.

برای بررسی اجازه مکان، راه‌انداز فعالیتی آماده کنید که منتظر نتیجه از فعالیت راه‌اندازی‌شده با ActivityResultLauncher باشد. فراخوانی برگشتی نتیجه حاوی «رشته‌ای» خواهد بود که نشان می‌دهد کاربر اجازه درخواست‌شده را اعطا یا رد کرده است.

    // Register the permissions callback, which handles the user's response to the
    // system permissions dialog. Save the return value, an instance of
    // ActivityResultLauncher, as an instance variable.
    private final ActivityResultLauncher<String> requestPermissionLauncher =
            registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
                if (isGranted) {
                    // Since ACCESS_FINE_LOCATION is the only permission in this sample,
                    // run the location comparison task once permission is granted.
                    // Otherwise, check which permission is granted.
                    getAndCompareLocations();
                } else {
                    // Fallback behavior if user denies permission
                    Log.d(TAG, "User denied permission");
                }
            });

سپس، بررسی کنید آیا برنامه ازقبل اجازه ACCESS_FINE_LOCATION را دارد یا نه. اگر این کار انجام نشد، با راه‌اندازی فعالیت درخواست اجازه بااستفاده از راه‌انداز تعریف‌شده در مرحله قبلی، از کاربر بخواهید آن را ارائه دهد.

    private void checkLocationPermissions() {
        if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            getAndCompareLocations();
        } else {
            requestPermissionLauncher.launch(
                    ACCESS_FINE_LOCATION);
        }
    }

پس‌از اعطای اجازه ACCESS_FINE_LOCATION، از ارائه‌دهنده مکان تلفیقی برای دریافت آخرین مکان شناخته‌شده دستگاه استفاده کنید و یک شیء LatLng از آن ایجاد کنید.

        FusedLocationProviderClient fusedLocationClient =
                LocationServices.getFusedLocationProviderClient(this);

        fusedLocationClient.getLastLocation()
                .addOnSuccessListener(this, location -> {
                    // Got last known location. In some rare situations this can be null.
                    if (location == null) {
                        return;
                    }

                    deviceLocation = new LatLng(location.getLatitude(), location.getLongitude());
                    // ...
                });
    }

محاسبه فاصله بین نشانی واردشده و مکان دستگاه

استفاده از ریاضی برای محاسبه فاصله بین دو مختصات طول و عرض جغرافیایی (نشانی واردشده و مکان دستگاه). کتابخانه کاروری‌های کیت توسعه نرم‌افزار Maps ویژه Android متن‌باز چند روش مفید برای محاسبه فاصله کروی بین دو نقطه روی زمین دارد.

ابتدا، «کتابخانه کاروری‌های کیت توسعه نرم‌افزار Maps ویژه Android» را با افزودن وابستگی زیر به فایل build.gradle.kts برنامه‌تان نصب کنید:

dependencies {
    // Utility Library for Maps SDK for Android
    // You do not need to add a separate dependency for the Maps SDK for Android
    // since this library builds in the compatible version of the Maps SDK.
    implementation(libs.android.maps.utils)
}

سپس، پس‌از دریافت آخرین مکان مشخص دستگاه، در فایل فعالیت شعاعی برحسب متر تعریف کنید تا دو مکان به‌عنوان «مطابقت‌داده‌شده» درنظر گرفته شوند. شعاع باید به‌اندازه کافی بزرگ باشد تا تغییرپذیری در دقت GPS و اندازه مکان در نشانی واردشده کاربر را دربرگیرد. برای مثال:

private static final double acceptableProximity = 150;

سپس، از روش کتابخانه ابزار computeDistanceBetween() برای محاسبه فاصله بین مکان دستگاه و مکان نشانی واردشده توسط کاربر استفاده کنید. اگر فاصله در شعاع تعریف‌شده در بالا قرار می‌گیرد، مکان‌ها را منطبق درنظر بگیرید.

// Use the computeDistanceBetween function in the Maps SDK for Android Utility Library
// to use spherical geometry to compute the distance between two Lat/Lng points.
double distanceInMeters = computeDistanceBetween(deviceLocation, enteredLocation);
if (distanceInMeters <= acceptedProximity) {
    Log.d(TAG, "location matched");
    // TODO: Display UI based on the locations matching
} else {
    Log.d(TAG, "location not matched");
    // TODO: Display UI based on the locations not matching
}

(دیدن نمونه کد کامل)

اگر نشانی و مکان مطابقت داشته باشند، تأییدیه‌ای در برنامه نمایش داده می‌شود، همان‌طور که در شکل زیر نشان داده شده است.

نکاتی برای بهبود بیشتر «ثبت‌نام سریع و تأییدشده»

به کاربران اجازه دهید نشانی را براساس نام کسب‌وکار یا مکان جالب وارد کنند. سرویس پیش‌بینی «تایپ پیش‌نگر» نه‌تنها برای نشانی‌ها کار می‌کند، بلکه می‌توانید به کاربران اجازه دهید نام کسب‌وکارها یا مکان‌های دیدنی را نیز وارد کنند. برای اینکه هم نشانی‌ها و هم نام‌های مؤسسه بتوانند وارد شوند، ویژگی types را از تعریف «تکمیل خودکار» بردارید.

ظاهر و حس‌وحال چارگوش «تکمیل خودکار جا» را سفارشی‌سازی کنید تا با سبک وب‌سایتتان مطابقت داشته باشد. اگر ترجیح می‌دهید ظاهر و حس «تکمیل خودکار جا» را در برنامه‌تان کنترل کنید و از ابزاره Google استفاده نکنید، می‌توانید از تکمیل خودکار جا به‌صورت برنامه‌نویسی‌شده استفاده کنید تا واسط کاربری‌ای را که با سرویس «تکمیل خودکار جا» ساخته‌اید تقویت کنید.