نظرة عامة
تتوفّر "منصة خرائط Google" للويب (JS وTS) وAndroid وiOS، كما توفّر واجهات برمجة تطبيقات لخدمات الويب للحصول على معلومات عن الأماكن والاتجاهات، والمسافات. تمت كتابة النماذج في هذا الدليل لنظام أساسي واحد، ولكن يتم توفير روابط المستندات لتنفيذها على أنظمة أساسية أخرى.
تتيح لك أداة Quick Builder في Google Cloud Console إنشاء ميزة الإكمال التلقائي لنموذج العناوين باستخدام واجهة مستخدِم تفاعلية تنشئ رمز JavaScript لك.
اعتاد المستخدمون على العيش والعمل في عالم رقمي تكون فيه الراحة والسرعة والأمان من التوقعات الأساسية. عندما يتقدّمون بطلب للحصول على بطاقة ائتمان أو حساب مصرفي أو قرض، يتوقّعون أن تكون العملية سريعة وسهلة.
كلما اضطر المستخدمون إلى كتابة البيانات أو إدخال بيانات مكرّرة، تقلّ فرصتك في الاحتفاظ بهم كعملاء. سيؤدي إنشاء تجربة تسجيل سريعة وسهلة ومعتمَدة إلى تحسين تجربة المستخدم مع منحك ميزة إبقاء المستخدمين على موقعك الإلكتروني.
يمكن أن تؤدي العناوين التي يتم إدخالها يدويًا إلى انخفاض معدّلات الإحالات الناجحة وبيانات غير صحيحة في نظام إدارة علاقات العملاء (CRM) وأخطاء مكلفة في التسليم. تؤدي ميزة "الاشتراك السريع والمعتمَد" إلى تسريع عملية الاشتراك، حيث تقترح على الفور العناوين القريبة ببضع نقرات فقط بالإبهام وتعرض العنوان الذي تم إدخاله للتأكيد المرئي، ما يساعد المستخدم على التأكّد من أنّه أدخل العنوان الصحيح. يساعد أيضًا تأكيد عنوان المستخدم باستخدام موقعه الجغرافي الحالي في منع الاحتيال ويعزز ثقة المستخدم في منتجاتك وخدماتك. يمكن أن يزيد التأكيد أيضًا من ثقتك في تقديم البطاقات المصرفية وبطاقات الائتمان الافتراضية على الفور.
يقدّم هذا المستند إرشادات التنفيذ لإنشاء تجربة "الاشتراك السريع والمعتمَد" باستخدام "منصة خرائط Google". بما أنّ المستخدمين سيشتركون على الأرجح على الأجهزة الجوّالة، تركز معظم أمثلة التنفيذ في هذا المستند على Android. للاطّلاع على المثال الكامل، يُرجى مراجعة نموذج رمز المصدر. يمكنك أيضًا استخدام حِزم تطوير البرامج (SDK) لنظام التشغيل iOS لتحقيق الأهداف نفسها.
يوضّح المخطّط التالي واجهات برمجة التطبيقات الأساسية المتضمّنة في إنشاء الحلّ (انقر للتكبير).
تفعيل واجهات برمجة التطبيقات
لتنفيذ هذه الاقتراحات، يجب تفعيل واجهات برمجة التطبيقات التالية في Google Cloud Console:
- حزمة تطوير البرامج بالاستناد إلى بيانات خرائط Google للتطبيقات المتوافقة مع Android (أو واجهة برمجة التطبيقات للنظام الأساسي الذي تختاره)
- Places API
- Geocoding API
لمزيد من المعلومات عن الإعداد، يُرجى مراجعة مقالة بدء استخدام "منصة خرائط Google".
أقسام أفضل الممارسات
يتناول هذا المستند الممارسات والتخصيصات التالية.
- رمز علامة صح هو من أفضل الممارسات الأساسية.
- رمز النجمة هو تخصيص اختياري ولكن يُنصح به لتحسين الحلّ.
| إضافة ميزة "الإكمال التلقائي" إلى حقول الإدخال | الملء التلقائي لنموذج عنوان. أضِف وظيفة "الكتابة أثناء التنقل" لتحسين تجربة المستخدم على جميع الأنظمة الأساسية وتحسين دقة العنوان بأقل عدد من ضغطات المفاتيح. | |
| توفير تأكيد مرئي للعنوان | اسمَح للمستخدمين برؤية عنوانهم على الخريطة كتأكيد مرئي على أنّهم أدخلوا العنوان الصحيح. | |
| مقارنة العنوان الذي أدخله المستخدم بموقع الجهاز | قارِن العنوان الذي اختاره المستخدم أو أدخله بموقع جهازه الحالي للمساعدة في تحديد ما إذا كان موجودًا في العنوان المحدّد. (لكي ينجح ذلك، يجب أن يكون المستخدمون في المنزل عند الاشتراك.) | |
| نصائح لزيادة تحسين ميزة "الاشتراك السريع والمعتمَد" | يمكنك تحسين إدخال العنوان بشكل أكبر من خلال إضافات مثل تخصيص شكل وأسلوب أداة "الإكمال التلقائي" أو السماح للمستخدمين باختيار اسم مؤسسة أو معلم كعنوان. |
إضافة ميزة "الإكمال التلقائي" إلى حقول الإدخال
| يستخدم هذا المثال: حزمة تطوير برامج الأماكن لأجهزة Android | تتوفّر أيضًا على: iOS | JavaScript |
يمكن أن تُبسّط ميزة "الإكمال التلقائي للأماكن" عملية إدخال العنوان في تطبيقك، ما يؤدي إلى ارتفاع معدّلات الإحالات الناجحة وتوفير تجربة سلسة لعملائك. توفّر ميزة "الإكمال التلقائي" حقلاً واحدًا للإدخال السريع مع ميزة "التنبؤ بالعنوان أثناء الكتابة" التي يمكن استخدامها لملء نموذج عنوان الاشتراك تلقائيًا. من خلال دمج ميزة "الإكمال التلقائي للأماكن" في مسار الاشتراك، يمكنك إجراء ما يلي:
- الحدّ من أخطاء إدخال العنوان
- تقليل عدد الخطوات في عملية الاشتراك
- تبسيط تجربة إدخال العنوان على الأجهزة الجوّالة أو الأجهزة القابلة للارتداء
- تقليل عدد ضغطات المفاتيح والوقت الإجمالي المطلوب من العميل للاشتراك بشكل كبير
عندما يختار المستخدم مربّع إدخال "الإكمال التلقائي" ويبدأ في الكتابة، تظهر قائمة بتوقعات العناوين.
عندما يختار المستخدم عنوانًا من قائمة التوقعات، يمكنك استخدام الردّ لتأكيد العنوان والحصول على الموقع الجغرافي. يمكن لتطبيقك بعد ذلك ملء الحقول الصحيحة في نموذج إدخال العنوان، كما هو موضّح في الشكل التالي.

فيديوهات: تحسين نماذج العناوين باستخدام ميزة "الإكمال التلقائي للأماكن"
نماذج العناوين
Android
iOS
الويب
توفّر "منصة خرائط Google" أداة "الإكمال التلقائي للأماكن" للأنظمة الأساسية الجوّالة والويب. توفّر الأداة، الموضّحة في الأشكال السابقة، مربّع حوار للبحث يتضمّن وظيفة "الإكمال التلقائي" يمكنك حتى تحسينها للبحث ضمن نطاق الموقع الجغرافي.
يوضّح هذا القسم كيفية تنفيذ ميزة "الإكمال التلقائي للأماكن" لميزة "الاشتراك السريع والمعتمَد".
إضافة أداة "الإكمال التلقائي للأماكن"
في Android، يمكنك إضافة أداة "الإكمال التلقائي" باستخدام غرض "الإكمال التلقائي" الذي يبدأ ميزة "الإكمال التلقائي للأماكن" من حقل الإدخال "سطر العنوان 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"); } });
بعد ذلك، حدِّد حقول غرض "الإكمال التلقائي للأماكن" وخصائص الموقع الجغرافي والنوع، وأنشئ الغرض باستخدام
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() استخراج عنصر 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لحصر التطابقات على عناوين الشوارع الكاملة. مزيد من المعلومات عن الأنواع المتوافقة في طلبات "الإكمال التلقائي للأماكن".اضبط القيود والتحيزات المناسبة إذا لم تكن بحاجة إلى البحث في جميع أنحاء العالم. هناك عدد من المَعلمات التي يمكن استخدامها لتحيز أي تطابق أو حصره في مناطق معيّنة فقط.
استخدِم
RectangularBoundsلضبط الحدود المستطيلة لحصر منطقة، واستخدِمsetLocationRestriction()للتأكّد من عدم عرض سوى العناوين في تلك المناطق.استخدِم
setCountries()لحصر الردود على مجموعة معيّنة من البلدان.
اترك الحقول قابلة للتعديل في حال عدم تطابق بعض الحقول، واسمح للعملاء بتعديل العنوان إذا لزم الأمر. بما أنّ معظم العناوين التي تعرضها ميزة "الإكمال التلقائي للأماكن" لا تحتوي على أرقام المباني الفرعية، مثل أرقام الشقق أو الأجنحة أو الوحدات، يمكنك نقل التركيز إلى "سطر العنوان 2" لتشجيع المستخدم على ملء هذه المعلومات إذا لزم الأمر.
توفير تأكيد مرئي للعنوان
| يستخدم هذا المثال: حزمة تطوير البرامج بالاستناد إلى بيانات خرائط Google للتطبيقات المتوافقة مع Android | تتوفّر أيضًا على: iOS | JavaScript |
كجزء من إدخال العنوان، زوِّد المستخدمين بتأكيد مرئي للعنوان على الخريطة. يمنح ذلك المستخدمين تأكيدًا إضافيًا على أنّ العنوان صحيح.
يوضّح الشكل التالي خريطة أسفل العنوان مع دبوس في العنوان الذي تم إدخاله.

يتّبع المثال التالي الخطوات الأساسية لإضافة خريطة في Android. يُرجى الرجوع إلى المستندات لمزيد من التفاصيل.
- إضافة
SupportMapFragment(في هذه الحالة، إضافة جزء بشكل ديناميكي) - الحصول على مؤشر إلى الجزء وتسجيل ردّ الاتصال
- اختيار نمط الخريطة وإضافة علامة إليها
- إيقاف عناصر التحكّم في الخريطة
إضافة 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);
}
}الحصول على مؤشر إلى الجزء وتسجيل ردّ الاتصال
للحصول على مؤشر إلى الجزء، استدعِ الطريقة
FragmentManager.findFragmentByIdومرِّر لها رقم تعريف المورد للجزء في ملف التنسيق. إذا أضفت الجزء بشكل ديناميكي، يمكنك تخطّي هذه الخطوة لأنّك سبق أن استرددت المؤشر.استدعِ الطريقة
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، هناك خيار آخر وهو تفعيل الوضع البسيط لتوفير تفاعل محدود.
مقارنة العنوان الذي أدخله المستخدم بموقع الجهاز
يمكن أن يكون الحصول على مستند لإثبات العنوان، والتأكّد من أنّ المستخدم موجود في العنوان الذي أدخله، أمرًا معقدًا بسبب عوامل مثل موقع المستخدم البعيد أو انتقال المستخدمين إلى عنوان جديد أو المؤسسات الرقمية (مثل المصارف الرقمية) التي ليس لديها موقع جغرافي فعلي يمكن للمستخدمين زيارته لتقديم مستند لإثبات العنوان باستخدام فواتير الخدمات أو مستندات أخرى. تتيح لك الطرق الرقمية لتأكيد عناوين المستخدمين توفير تجربة تسجيل أسرع وسلسة.
الأمان هو عامل بالغ الأهمية عند الحصول على مستند لإثبات العنوان، خاصةً مع عملية التسجيل الرقمية. يقدّم هذا القسم إرشادات ونماذج للتحقّق مما إذا كان موقع المستخدم أثناء التسجيل يطابق العنوان الذي يدخله كعنوانه.
تتضمّن عملية مقارنة عنوان تم إدخاله بموقع الجهاز الخطوات التالية:
- تحويل العنوان الذي أدخله المستخدم إلى إحداثيات جغرافية.
- مطالبة المستخدم بمنح الإذن للحصول على موقع جهازه.
- حساب المسافة بين العنوان الذي تم إدخاله وموقع الجهاز. يمكنك تحديد الحد الأقصى للمسافة التي يتم احتسابها لمطابقة العنوان والموقع الجغرافي.
يوضّح الشكل التالي مثالاً على كيفية مطالبة المستخدمين بمقارنة العنوان الذي أدخلوه بموقعهم الجغرافي الحالي.

تحويل العنوان الذي أدخله المستخدم إلى إحداثيات جغرافية
| يستخدم هذا المثال: حزمة تطوير برامج الأماكن لأجهزة Android | تتوفّر أيضًا على: iOS | JavaScript | Geocoding API |
بعد أن يوافق المستخدمون على تأكيد العنوان (من خلال النقر على "تأكيد أنّني موجود هناك الآن" في الشكل السابق)، تتمثل الخطوة الأولى في مقارنة العنوان بالموقع الجغرافي الحالي في تحويل العنوان الذي تم إدخاله إلى إحداثيات جغرافية.
إذا اختار المستخدم عنوانه باستخدام ميزة "الإكمال التلقائي للأماكن"، احرِص على طلب
Place.Field.LAT_LNG في قائمة حقول "الإكمال التلقائي للأماكن" كما هو موضّح في
مقتطف الرمز إضافة أداة "الإكمال التلقائي للأماكن"، واستدعِ الطريقة
Place.getLatLng()
للحصول على الإحداثيات الجغرافية للعنوان الذي تم اختياره.
coordinates = place.getLatLng();
إذا أدخل المستخدم عنوانه يدويًا أو أجرى تعديلات بعد أن ملأت ميزة "الإكمال التلقائي للأماكن" الحقول، استخدِم خدمة Android Geocoder أو 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(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، يمكنك استخدام ميزة "الإكمال التلقائي للأماكن" برمجيًا لتشغيل واجهة المستخدِم التي تنشئها باستخدام خدمة "الإكمال التلقائي للأماكن".