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

نظرة عامة

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

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

إنشاءه الآن

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

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

كلما اضطر المستخدمون إلى كتابة بيانات مكررة أو إدخالها، قلت فرصة الاحتفاظ بهم كعملاء. سيؤدي إنشاء تجربة اشتراك سريعة وسهلة وتم التحقق منها إلى تحسين تجربة المستخدم مع منحك تقدمًا في الحفاظ على المستخدمين على موقعك.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Android

iOS

الويب

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

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

إضافة أداة الإكمال التلقائي للأماكن

في Android، يمكنك إضافة أداة الإكمال التلقائي باستخدام هدف الإكمال التلقائي الذي يشغِّل الإكمال التلقائي لمكان من حقل إدخال سطر العنوان 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، اضبط معلمة الأنواع على 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 لضبط رد الاتصال على الجزء.

على سبيل المثال، إذا أضفت الجزء بشكل ثابت:

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 أو واجهة برمجة تطبيقات الترميز الجغرافي للبحث عن الإحداثيات المرتبطة بهذا العنوان.

مثال

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

احرص على ترميز عنوان URL للاستدعاء لواجهة برمجة تطبيقات الترميز الجغرافي.

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

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

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

أولاً، ثبِّت حزمة تطوير البرامج (SDK) لـ "خرائط Google" لمكتبة أدوات Android من خلال إضافة التبعية التالية إلى ملف build.gradle في تطبيقك:

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.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 من تعريف الإكمال التلقائي.

خصِّص شكل ومظهر مربّع الإكمال التلقائي للأماكن ليتناسب مع نمط موقعك الإلكتروني. إذا كنت تفضّل التحكم في شكل ومظهر الإكمال التلقائي لـ "المكان" في تطبيقك بدلاً من استخدام أداة Google، يمكنك استخدام وضع الإكمال التلقائي آليًا لتعزيز واجهة المستخدم التي تنشئها باستخدام خدمة الإكمال التلقائي للأماكن.