دليل تنفيذ ميزة "الاشتراك المتحقَّق منه" السريع

نظرة عامة

الويب iOS واجهة برمجة التطبيقات

تتوفّر "منصة خرائط Google" على الويب (باستخدام JavaScript وTypeScript) وAndroid وiOS، كما توفّر واجهات برمجة تطبيقات خدمات الويب للحصول على معلومات عن الأماكن والاتجاهات والمسافات. تمّت كتابة العيّنات الواردة في هذا الدليل لمنصّة واحدة، ولكن تمّ توفير روابط مستندات لتنفيذها على منصات أخرى.

إنشاء التطبيق الآن

يتيح لك أداة الإنشاء السريع في Google Cloud Console إنشاء ميزة الإكمال التلقائي لنموذج العنوان باستخدام واجهة مستخدم تفاعلية تنشئ رمز JavaScript نيابةً عنك.

لقد اعتاد المستخدمون العيش والعمل في عالم رقمي يكون فيه الراحة والسرعة والأمان من التوقعات الأساسية. عند تقديم طلب للحصول على بطاقة ائتمان أو حساب مصرفي أو قرض، يتوقعون أن تتم العملية بسرعة وسهولة.

وكلما زاد عدد المستخدمين الذين عليهم كتابة بيانات مكرّرة أو إدخالها، قلّت فرصة احتفاظك بهم كعملاء. سيؤدي توفير تجربة تسجيل سريعة وسهلة وموثَّقة إلى تحسين تجربة المستخدم، كما سيمنحك ميزة إضافية في إبقاء المستخدمين على موقعك الإلكتروني.

يمكن أن تؤدي العناوين التي يتم إدخالها يدويًا إلى انخفاض الإحالات الناجحة وإلى إدخال بيانات خاطئة في ملف قاعدة بيانات العملاء المحتملين (CRM) وإلى أخطاء تسليم باهظة التكلفة. تُسري ميزة "الاشتراك السريع والمُعتمَد" عملية الاشتراك، وتقترح على الفور عناوين قريبة من خلال نقرات قليلة فقط، كما تعرِض العنوان الذي تم إدخاله للتأكيد البصري، ما يساعد المستخدم في الشعور بالثقة من أنّه أدخل العنوان الصحيح. يساعد أيضًا إثبات هوية عنوان العميل باستخدام موقعه الجغرافي الحالي في منع الاحتيال ويعزّز ثقة العميل في منتجاتك وخدماتك. يمكن أن تزيد عملية إثبات الملكية أيضًا من ثقتك في تقديم بطاقات مصرفية وبطاقات ائتمان افتراضية على الفور.

يوفّر هذا الموضوع إرشادات تنفيذية لإنشاء تجربة الاشتراك السريع والمعتمَد باستخدام "منصة خرائط Google". وبما أنّ المستخدمين سيشتركون على الأرجح على الأجهزة الجوّالة، تركّز معظم أمثلة التنفيذ في هذا الموضوع على Android. (يمكنك الاطّلاع على مصدر النموذج الكامل هنا). يمكنك أيضًا استخدام حِزم SDK لنظام التشغيل iOS لتنفيذ الإجراءات نفسها.

يوضِّح الرسم البياني التالي واجهات برمجة التطبيقات الأساسية المُستخدَمة في إنشاء الحلّ (انقر للتكبير).

تفعيل واجهات برمجة التطبيقات

لتنفيذ هذه الاقتراحات، عليك تفعيل واجهات برمجة التطبيقات التالية في Google Cloud Console:

لمزيد من المعلومات عن الإعداد، يُرجى الاطّلاع على مقالة بدء استخدام "منصة خرائط Google".

أقسام أفضل الممارسات

في ما يلي الممارسات والتخصيصات التي سنتناولها في هذا الموضوع.

  • رمز علامة الاختيار هو أحد أفضل الممارسات الأساسية.
  • رمز النجمة هو تخصيص اختياري، ولكن يُنصح به لتحسين الحلّ.
إضافة ميزة الإكمال التلقائي إلى حقول الإدخال ملء نموذج عنوان تلقائيًا أضِف وظيفة الكتابة أثناء الانتقال لتحسين تجربة المستخدم على جميع المنصات وتحسين دقة العنوان باستخدام الحد الأدنى من ضغطات المفاتيح.
تقديم تأكيد مرئي للعنوان اسمح للمستخدمين برؤية عنوانهم على الخريطة كتأكيد مرئي على أنّهم أدخلوا العنوان الصحيح.
مقارنة العنوان الذي يدخله المستخدم بالموقع الجغرافي للجهاز قارِن عنوان المستخدم الذي اختاره أو أدخله مع الموقع الجغرافي الحالي لجهازه للمساعدة في تحديد ما إذا كان في العنوان المحدَّد. (لكي يعمل هذا الإجراء، يجب أن يكون المستخدمون في المنزل عند الاشتراك).
نصائح لتحسين ميزة "الاشتراك السريع والموثَّق" بشكل أكبر يمكنك تحسين إدخال العنوان بشكل أكبر من خلال إضافات، مثل تخصيص مظهر التطبيق المصغّر "الإكمال التلقائي" وأسلوبه أو السماح للمستخدمين باختيار اسم نشاط تجاري أو معلم كمصدر عنوان.

إضافة ميزة الإكمال التلقائي إلى حقول الإدخال

يستخدِم هذا المثال: حزمة تطوير برامج "الأماكن" لأجهزة Android متاحة أيضًا: iOS | JavaScript

يمكن أن تبسّط ميزة "الإكمال التلقائي للأماكن" عملية إدخال العنوان في تطبيقك، ما يؤدي بدوره إلى زيادة معدلات الإحالات الناجحة وتوفير تجربة سلسة لعملائك. توفّر ميزة "الإكمال التلقائي" حقل إدخال سريعًا واحدًا يتضمّن ميزة "التوقّع أثناء الكتابة" للعناوين، ويمكن استخدامها لتعبئة نموذج عنوان الاشتراك تلقائيًا. من خلال دمج ميزة "الإكمال التلقائي للأماكن" في عملية الاشتراك، يمكنك إجراء ما يلي:

  • تقليل أخطاء إدخال العنوان
  • قلِّل عدد الخطوات في عملية الاشتراك.
  • تبسيط تجربة إدخال العنوان على الأجهزة الجوّالة أو القابلة للارتداء
  • يمكنك تقليل عدد ضربات المفاتيح والوقت الإجمالي المطلوب من العميل للاشتراك بشكل كبير.

عندما يختار المستخدم مربّع إدخال الإكمال التلقائي ويبدأ الكتابة، تظهر قائمة بعناوين مقترَحة.

عندما يختار المستخدم عنوانًا من قائمة التوقّعات، يمكنك استخدام الردّ للتحقّق من العنوان والحصول على الموقع الجغرافي. يمكن بعد ذلك لتطبيقك preenchimento الحقول الصحيحة لنموذج إدخال العنوان، كما هو موضّح في الشكل التالي.

فيديوهات: تحسين نماذج العناوين باستخدام ميزة "الإكمال التلقائي للأماكن"

نماذج العناوين

Android

iOS

الويب

توفّر Google Maps Platform أداة "إكمال تلقائي للأماكن" لمنصّات الويب والأجهزة المتوافقة مع اللمس. يوفّر التطبيق المصغّر، المعروض في الصور السابقة، مربع حوار بحث يتضمّن وظيفة إكمال تلقائي مدمجة يمكنك تحسينها للبحث على مستوى الموقع الجغرافي.

يوضّح هذا القسم كيفية تنفيذ ميزة "الإكمال التلقائي للأماكن" لميزة "الاشتراك السريع والموثَّق".

إضافة التطبيق المصغّر "الإكمال التلقائي للأماكن"

في Android، يمكنك إضافة التطبيق المصغّر للإكمال التلقائي باستخدام Intent للإكمال التلقائي الذي يطلق ميزة "الإكمال التلقائي للأماكن" من حقل إدخال "سطر العنوان 1"، حيث سيبدأ المستخدم في إدخال عنوانه. عندما يبدأ المستخدمون الكتابة، سيصبح بإمكانهم اختيار عنوانهم من قائمة التوقّعات في ميزة "الإكمال التلقائي".

أولاً، حضِّر مشغّل أنشطة باستخدام 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.LAT_LNG, Place.Field.VIEWPORT);

        // Build the autocomplete intent with field, country, and type filters applied
        Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, fields)
                .setCountries(Arrays.asList("US"))
                .setTypesFilter(new ArrayList<String>() {{
                    add(TypeFilter.ADDRESS.toString().toLowerCase());
                }})
                .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() لتقييد الردود على مجموعة معيّنة من البلدان.

  • اترك الحقول قابلة للتعديل في حال عدم تطابق حقول معيّنة، واسمح للعملاء بتعديل العنوان إذا لزم الأمر. بما أنّ معظم العناوين التي تعرِضها ميزة "الإكمال التلقائي للأماكن" لا تحتوي على أرقام المواقع الفرعية، مثل أرقام الشقة أو الجناح أو الوحدة، يمكنك نقل التركيز إلى "سطر العنوان 2" لحثّ المستخدم على ملء هذه المعلومات إذا لزم الأمر.

تقديم تأكيد مرئي للعنوان

يستخدِم هذا المثال: حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لتطبيقات 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.getLatLng();

        // 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 لضبط callback على المقتطف.

على سبيل المثال، إذا أضفت المقتطف بشكل ثابت:

Kotlin



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

      

Java


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

احرص على ترميز عنوان URL للطلب المرسَل إلى Geocoding API.

مرجع سريع لترميز عنوان URL: %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());
                    // ...
                });
    }

احتساب المسافة بين العنوان الذي أدخلته وموقع الجهاز الجغرافي

استخدام العمليات الحسابية لحساب المسافة بين إحداثيتَي خط الطول/خط العرض (العنوان الذي تم إدخاله وموقع الجهاز الجغرافي) تتضمّن مكتبة أدوات حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لتطبيقات Android المفتوحة المصدر بعض الطرق المفيدة لحساب المسافة الكروية بين نقطتَين على سطح الأرض.

أولاً، ثبِّت مكتبة أدوات "حزمة تطوير البرامج بالاستناد إلى بيانات خرائط Google للتطبيقات المتوافقة مع 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("com.google.maps.android:android-maps-utils:3.8.2")
}

بعد ذلك، في ملف الأنشطة، بعد الحصول على آخر موقع جغرافي معروف للجهاز، حدِّد نطاقًا جغرافيًا بالأمتار لاعتبار الموقعَين الجغرافيَين "متطابقَين". يجب أن يكون نصف القطر كبيرًا بما يكفي لمراعاة التباين في دقة نظام تحديد المواقع العالمي (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" في تطبيقك بدلاً من استخدام التطبيق المصغّر من Google، يمكنك استخدام ميزة "تكميم الكلمات" في "أماكن Google" آليًا لتعزيز واجهة المستخدم التي تنشئها باستخدام خدمة "تكميم الكلمات في أماكن Google".