سریع & راهنمای اجرای تایید شده ثبت نام

نمای کلی

وب iOS API

پلتفرم نقشه‌های گوگل برای وب (JS، TS)، اندروید و iOS در دسترس است و همچنین APIهای خدمات وب را برای دریافت اطلاعات در مورد مکان‌ها، مسیرها و مسافت‌ها ارائه می‌دهد. نمونه‌های موجود در این راهنما برای یک پلتفرم نوشته شده‌اند، اما لینک‌های مستندات برای پیاده‌سازی در پلتفرم‌های دیگر ارائه شده است.

همین حالا بسازش!

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

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

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

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

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

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

فعال کردن APIها

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

برای اطلاعات بیشتر در مورد تنظیمات، به شروع به کار با پلتفرم نقشه‌های گوگل مراجعه کنید.

بخش‌های بهترین شیوه‌ها

در ادامه به شیوه‌ها و سفارشی‌سازی‌هایی که در این مبحث پوشش خواهیم داد، اشاره می‌کنیم.

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

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

این مثال از موارد زیر استفاده می‌کند: Places SDK برای اندروید همچنین موجود است: iOS | جاوا اسکریپت

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

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

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

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

ویدیوها: فرم‌های آدرس را با قابلیت تکمیل خودکار مکان بهبود دهید

فرم‌های آدرس

اندروید

آی‌او‌اس

وب

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

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

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

در اندروید، می‌توانید ویجت تکمیل خودکار را با استفاده از یک Intent تکمیل خودکار اضافه کنید که Place Autocomplete را از فیلد ورودی Address Line 1 اجرا می‌کند، جایی که کاربر شروع به وارد کردن آدرس خود می‌کند. وقتی شروع به تایپ می‌کنند، می‌توانند آدرس خود را از لیست پیش‌بینی‌های تکمیل خودکار انتخاب کنند.

ابتدا، با استفاده از ActivityResultLauncher ، یک لانچر اکتیویتی آماده کنید که به نتیجه‌ی اکتیویتیِ اجرا شده گوش می‌دهد. فراخوانیِ نتیجه شامل یک شیء Place خواهد بود که مربوط به آدرسی است که کاربر از پیش‌بینی‌های تکمیل خودکار انتخاب می‌کند.

    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");
                }
            });

در مرحله بعد، فیلدها، مکان و ویژگی‌های نوعِ intent مربوط به Place Autocomplete را تعریف کرده و آن را با Autocomplete.IntentBuilder بسازید. در نهایت، intent را با استفاده از 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"))
                .setTypesFilter(List.of("establishment"))
                .build(this);
        startAutocomplete.launch(intent);
    }

مدیریت آدرس برگردانده شده توسط Place Autocomplete

تعریف ActivityResultLauncher در مراحل قبل، کاری را که باید هنگام برگرداندن نتیجه activity در callback انجام شود، نیز تعریف کرد. اگر کاربر یک پیش‌بینی را انتخاب کند، آن پیش‌بینی در intent موجود در شیء result ارائه خواهد شد. از آنجایی که intent توسط Autocomplete.IntentBuilder ساخته شده است، متد Autocomplete.getPlaceFromIntent() می‌تواند شیء Place را از آن استخراج کند.

    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() را فراخوانی کنید و هر جزء آدرس را با فیلد ورودی مربوطه در فرم آدرس مطابقت دهید و فیلد را با مقداری از Place انتخاب شده توسط کاربر پر کنید.

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

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

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

  • برای فرم ADDRESS، پارامتر types را روی address تنظیم کنید تا تطابق‌ها به آدرس‌های کامل خیابان محدود شود. درباره typeهای پشتیبانی‌شده در درخواست‌های Place Autocomplete بیشتر بدانید.

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

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

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

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

ارائه تاییدیه تصویری از آدرس

این مثال از: Maps SDK برای اندروید استفاده می‌کند همچنین موجود است: iOS | جاوا اسکریپت

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

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

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

افزودن 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 را فراخوانی کنید و شناسه منبع فرگمنت را در فایل layout خود به آن ارسال کنید. اگر فرگمنت را به صورت پویا اضافه کرده‌اید ، از این مرحله صرف نظر کنید زیرا قبلاً هندل را بازیابی کرده‌اید.

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

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

کاتلین

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

      

جاوا

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

      

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

وقتی نقشه آماده شد، سبک را تنظیم کنید، دوربین را در مرکز قرار دهید و یک نشانگر در مختصات آدرس وارد شده اضافه کنید. کد زیر از سبک‌بندی تعریف‌شده در یک شیء JSON استفاده می‌کند یا می‌توانید به‌طور جایگزین، شناسه نقشه‌ای را که با Cloud-based Maps Styling تعریف شده است، بارگذاری کنید.

    @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));
    }

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

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

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

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

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

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

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

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

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

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

این مثال از موارد زیر استفاده می‌کند: Places SDK برای اندروید همچنین در دسترس است: iOS | جاوا اسکریپت | API کدگذاری جغرافیایی

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

اگر کاربر آدرس خود را با Place Autocomplete انتخاب کرده است، حتماً همانطور که در قطعه کد ویجت Adding the Place Autocomplete نشان داده شده است، Place.Field.LAT_LNG در لیست فیلدهای Place Autocomplete درخواست کنید و متد Place.getLatLng() را برای بدست آوردن مختصات جغرافیایی آدرس انتخاب شده فراخوانی کنید.

coordinates = place.getLatLng();

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

مثال

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

مطمئن شوید که فراخوانی به Geocoding API را با استفاده از URL کدگذاری کرده‌اید .

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

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

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

  • درخواست مجوز مکان، به عنوان یک مجوز یکبار مصرف، در یک سطح دقیق ( 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 ، از ارائه‌دهنده موقعیت مکانی fused برای دریافت آخرین موقعیت مکانی شناخته‌شده دستگاه و ایجاد یک شیء 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 SDK for Android Utility روش‌های مفیدی برای محاسبه فاصله کروی بین دو نقطه روی زمین دارد.

ابتدا، با افزودن وابستگی زیر به فایل build.gradle.kts برنامه خود، Maps SDK for Android Utility Library را نصب کنید:

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("com.google.maps.android:android-maps-utils:3.19.0")
}

سپس، پس از دریافت آخرین مکان شناخته شده دستگاه، به فایل فعالیت برگردید و شعاعی را بر حسب متر تعریف کنید تا دو مکان به عنوان "مطابقت یافته" در نظر گرفته شوند. شعاع باید به اندازه کافی بزرگ باشد تا تنوع در دقت 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 را از تعریف Autocomplete حذف کنید.

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