لحماية خصوصية المستخدم، يجب أن تطلب التطبيقات التي تستخدم خدمات الموقع الجغرافي الحصول على إذن الوصول إلى الموقع الجغرافي. الأذونات.
عند طلب أذونات تحديد الموقع الجغرافي، اتّبِع أفضل الممارسات نفسها التي حدّدتها. لأي إذن تشغيل آخر. أحد الاختلافات المهمة عندما يتعلق الأمر بأذونات تحديد الموقع الجغرافي هو أنّ أذونات متعددة متعلقة بالموقع الجغرافي. الأذونات التي وكيفية طلبها له على متطلبات الموقع الجغرافي حالة استخدام التطبيق.
توضّح هذه الصفحة الأنواع المختلفة لمتطلبات الموقع الجغرافي وتقدّم إرشادات حول كيفية طلب أذونات تحديد الموقع الجغرافي في كل حالة
أنواع إذن الوصول إلى الموقع الجغرافي
لكل إذن مجموعة من السمات التالية:
- الفئة: إما الموقع الجغرافي في المقدمة أو الخلفية الموقع الجغرافي.
- الدقة: إما الموقع الجغرافي الدقيق أو التقريبي
الموقع الجغرافي للواجهة
إذا كان تطبيقك يحتوي على ميزة تشارك معلومات الموقع الجغرافي أو تتلقّاها فقط مرة واحدة أو لفترة زمنية محددة، فإن هذه الميزة تتطلب تقديم الوصول إلى الموقع الجغرافي. وتشمل بعض الأمثلة ما يلي:
- داخل أحد تطبيقات التنقل، تسمح إحدى الميزات للمستخدمين بالحصول على اتجاهات مفصّلة الاتجاهات.
- داخل تطبيق مراسلة، تسمح إحدى الميزات للمستخدمين بمشاركة موقعهم الحالي مع مستخدم آخر.
يعتبر النظام أنّ تطبيقك يستخدم الموقع الجغرافي في المقدّمة إذا كانت إحدى الميزات وصول تطبيقك إلى الموقع الجغرافي الحالي للجهاز في أي من الأجهزة التالية الحالات:
- النشاط الخاص بتطبيقك مرئي.
يشغّل تطبيقك خدمة تعمل في المقدّمة. عندما تكون الخدمة التي تعمل في المقدّمة قيد التشغيل، يزيد النظام وعي المستخدم من خلال عرض إشعار مستمر. يحتفظ تطبيقك بإمكانية الوصول إليه عند وضعه في الخلفية، مثلاً عند يضغط المستخدم على زر الشاشة الرئيسية في جهازه أو يحوّل شاشة جهازه
بالإضافة إلى ذلك، ننصحك بتعريف الخدمة التي تعمل في المقدّمة. النوع من
location
، كما هو موضح في مقتطف الرمز التالي. على نظام التشغيل Android 10 (واجهة برمجة التطبيقات) من المستوى 29 والمستويات الأعلى، يجب تعريف نوع الخدمة التي تعمل في المقدّمة.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
أنت تقرّ بالحاجة إلى الموقع الجغرافي في المقدّمة عندما يطلب تطبيقك إما
ACCESS_COARSE_LOCATION
الإذن أو
ACCESS_FINE_LOCATION
كما هو موضح في المقتطف التالي:
<manifest ... > <!-- Always include this permission --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- Include only if your app benefits from precise location access. --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> </manifest>
رصد الموقع الجغرافي في الخلفية
يتطلّب التطبيق الوصول إلى بيانات الموقع الجغرافي في الخلفية في حال توفُّر ميزة داخل التطبيق. يشارك الموقع الجغرافي باستمرار مع مستخدمين آخرين أو يستخدم ميزة وضع حدود جغرافية API. وفي ما يلي أمثلة عديدة على ذلك:
- تسمح إحدى الميزات للمستخدمين، داخل تطبيق مشاركة الموقع الجغرافي للعائلة، مشاركة الموقع الجغرافي مع أفراد العائلة.
- في تطبيق إنترنت الأشياء (IoT)، تسمح ميزة للمستخدمين بتهيئة أجهزتهم المنزلية مثل إيقافها عندما يغادر المستخدم منزله وإعادة تشغيلها مرة أخرى عند مستخدم يعود إلى المنزل.
يعتبر النظام أنّ تطبيقك يستخدم بيانات الموقع الجغرافي في الخلفية في حال وصوله إلى عن الموقع الحالي لجهازك في أي موقف غير المواقع الموضحة في الموقع في المقدمة. تبلغ دقة الموقع الجغرافي في الخلفية نفس دقة دقة الموقع التي تعمل في المقدمة، والتي تعتمد على أذونات تحديد الموقع الجغرافي التي يفصح عنها تطبيقك
في نظام التشغيل Android 10 (مستوى واجهة برمجة التطبيقات 29) والإصدارات الأحدث، عليك الإفصاح عن
ACCESS_BACKGROUND_LOCATION
إذن في ملف بيان التطبيق لطلب رصد الموقع الجغرافي في الخلفية
الوصول في وقت التشغيل. في الإصدارات السابقة من
عندما يتلقّى تطبيقك إذن الوصول إلى الموقع الجغرافي في المقدّمة، نظام التشغيل Android
الوصول إلى الموقع في الخلفية أيضًا.
<manifest ... > <!-- Required only when requesting background location access on Android 10 (API level 29) and higher. --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> </manifest>
الدقة
يتوافق Android مع المستويات التالية لدقة الموقع الجغرافي:
- تقريبي
- توفّر تقديرًا للموقع الجغرافي للجهاز. وإذا كان تقدير الموقع هذا من
LocationManagerService
أوFusedLocationProvider
, يكون هذا التقدير دقيقًا في نطاق 3 كيلومتر مربع تقريبًا (حوالي 1.2 مربع أميال). ويمكن أن يتلقّى تطبيقك مواقع جغرافية بهذا المستوى من الدقة عندما الإفصاح عن إذنACCESS_COARSE_LOCATION
وليس إذن "ACCESS_FINE_LOCATION
". - دقيق
- توفّر تقديرًا للموقع الجغرافي للجهاز بأكبر قدر ممكن من الدقة. إذا كانت
يختلف تقدير الموقع الجغرافي من
LocationManagerService
أوFusedLocationProvider
، يكون هذا التقدير عادةً ضمن نطاق 50 مترًا (160 قدمًا) وأحيانًا يكون دقيقة في نطاق بضعة أمتار (10 أقدام) أو أفضل. يمكن أن يتلقّى تطبيقك المواقع الجغرافية بهذا المستوى من الدقة عندما تعلن عنACCESS_FINE_LOCATION
إذن.
إذا منح المستخدم إذن تحديد الموقع الجغرافي التقريبي، يمكن لتطبيقك الوصول إلى الموقع الجغرافي التقريبي فقط، بغض النظر عن الموقع الجغرافي. الأذونات التي يفصح عنها تطبيقك
من المفترض أن يظل تطبيقك يعمل عندما يمنح المستخدم الموقع الجغرافي التقريبي فقط.
الوصول إليه. إذا كانت إحدى ميزات التطبيق تتطلب الوصول إلى الموقع الجغرافي الدقيق
باستخدام إذن ACCESS_FINE_LOCATION
، يمكنك أن تطلب من المستخدم السماح
الوصول إلى الموقع الجغرافي الدقيق.
طلب الوصول إلى الموقع الجغرافي في وقت التشغيل
عندما تحتاج ميزة في تطبيقك إلى الوصول إلى الموقع الجغرافي، انتظِر إلى أن يتفاعل المستخدم. مع الميزة قبل تقديم طلب الإذن. يتبع سير العمل هذا من أفضل الممارسات لطلب أذونات التشغيل في السياق، كما هو موضّح في دليل يشرح كيفية طلب تطبيق الأذونات.
يوضح الشكل 1 مثالاً على كيفية إجراء هذه العملية. يحتوي التطبيق على "مشاركة الموقع الجغرافي" التي تتطلب الوصول إلى الموقع الجغرافي في المقدّمة. التطبيق لا يطلب إذن تحديد الموقع الجغرافي إلى أن يختار المستخدم زر مشاركة الموقع الجغرافي
يمكن للمستخدم منح الموقع الجغرافي التقريبي فقط
في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يمكن للمستخدمين أن يطلبوا من تطبيقك استرداد
معلومات الموقع الجغرافي التقريبي فقط، حتى عندما يطلب تطبيقك
ACCESS_FINE_LOCATION
إذن التشغيل.
للتعامل مع هذا السلوك المحتمل للمستخدم، لا تطلب ACCESS_FINE_LOCATION
.
الإذن في حد ذاته. بدلاً من ذلك، يمكنك طلب ACCESS_FINE_LOCATION
.
الإذن و
ACCESS_COARSE_LOCATION
إذن في طلب بيئة تشغيل واحد. إذا حاولت طلب
ACCESS_FINE_LOCATION
، يتجاهل النظام الطلب بشأن بعض إصدارات
نظام التشغيل Android 12. إذا كان تطبيقك يستهدف نظام التشغيل Android 12 أو
أعلى، يسجل النظام رسالة الخطأ التالية في
Logcat:
ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.
عندما يطلب تطبيقك كلاً من ACCESS_FINE_LOCATION
وACCESS_COARSE_LOCATION
،
يتضمن مربّع حوار أذونات النظام الخيارات التالية للمستخدم:
- دقيق: يسمح للتطبيق بالحصول على معلومات عن الموقع الجغرافي الدقيق.
- تقريبي: يسمح للتطبيق بالحصول على معلومات الموقع التقريبي فقط.
يوضّح الشكل 3 أنّ مربّع الحوار يحتوي على عنصر مرئي لكلا الخيارين، لمساعدة المستخدم على الاختيار. بعد أن يقرر المستخدم عند تحديد الموقع الجغرافي بدقة، تنقر على أحد الأزرار الثلاثة لتحديد مدة منح إذن.
في نظام التشغيل Android 12 والإصدارات الأحدث، يمكن للمستخدمين الانتقال إلى إعدادات النظام. لضبط دقة الموقع الجغرافي المفضلة لأي تطبيق، بغض النظر عن إعدادات إصدار حزمة SDK المستهدف. ينطبق ذلك حتى في حال تثبيت تطبيقك على جهاز. يعمل بنظام التشغيل Android 11 أو إصدار أقدم، وبعد ذلك يتولى المستخدم ترقية إلى Android 12 أو الإصدارات الأحدث.
ACCESS_COARSE_LOCATION
فقط.ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
في طلب بيئة تشغيل واحد
يؤثر اختيار المستخدم في منح الأذونات
يعرض الجدول التالي الأذونات التي يمنحها النظام لتطبيقك، استنادًا إلى الخيارات التي يختارها المستخدم في مربّع حوار وقت تشغيل الأذونات:
دقيق | تقريبي | |
---|---|---|
أثناء استخدام التطبيق | ACCESS_FINE_LOCATION وACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
هذه المرّة فقط | ACCESS_FINE_LOCATION وACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
رفض | أذونات تحديد الموقع الجغرافي غير متوفّرة | أذونات تحديد الموقع الجغرافي غير متوفّرة |
لتحديد الأذونات التي منحها النظام لتطبيقك، راجِع القيمة التي يتم إرجاعها لطلب الأذونات. يمكنك استخدام مكتبات Jetpack في الرمز البرمجي. تشبه ما يلي، أو يمكنك استخدام مكتبات الأنظمة الأساسية، إدارة رمز طلب الإذن نفسك.
Kotlin
val locationPermissionRequest = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { permissions -> when { permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> { // Precise location access granted. } permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> { // Only approximate location access granted. } else -> { // No location access granted. } } } // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION))
Java
ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(new ActivityResultContracts .RequestMultiplePermissions(), result -> { Boolean fineLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_FINE_LOCATION, false); Boolean coarseLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_COARSE_LOCATION,false); if (fineLocationGranted != null && fineLocationGranted) { // Precise location access granted. } else if (coarseLocationGranted != null && coarseLocationGranted) { // Only approximate location access granted. } else { // No location access granted. } } ); // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION });
طلب ترقية الموقع الجغرافي الدقيق
يمكنك أن تطلب من المستخدم ترقية إذن وصول التطبيق من الموقع الجغرافي التقريبي إلى
موقعك الجغرافي الدقيق. قبل أن تطلب من المستخدم ترقية إذن وصول تطبيقك إلى
الموقع الدقيق، يُرجى مراعاة ما إذا كانت حالة استخدام التطبيق
يتطلب هذا المستوى من الدقة. إذا كان التطبيق بحاجة إلى إقران جهاز بجهاز مجاور
الأجهزة عبر البلوتوث أو Wi-Fi، فننصحك باستخدام جهاز مصاحب
الإقران أو البلوتوث
الأذونات، بدلاً من
يطلب إذن ACCESS_FINE_LOCATION
.
لتطلب من المستخدم ترقية إذن وصول تطبيقك إلى الموقع الجغرافي من تقريبي إلى دقيق، قم بما يلي:
- إذا لزم الأمر، يُرجى توضيح سبب احتياج تطبيقك إلى إذن.
- طلب الإذنَين
ACCESS_FINE_LOCATION
وACCESS_COARSE_LOCATION
معًا مرة أخرى. نظرًا لأن المستخدم قد سمح بالفعل للنظام بمنح الموقع التقريبي لتطبيقك، يختلف مربع حوار النظام هذه المرة، حيث كما هو موضح في الشكل 4 الشكل 5:
طلب الموقع الجغرافي في المقدّمة فقط في البداية
حتى إذا كانت هناك ميزات متعددة في تطبيقك تتطلب الوصول إلى الموقع الجغرافي، من المحتمل إلا أن بعضها فقط يتطلب الوصول إلى الموقع في الخلفية. لذلك، من المهم ننصح بأن يُجري تطبيقك طلبات متزايدة بشأن الموقع الجغرافي. الأذونات، لطلب الوصول إلى الموقع الجغرافي في المقدّمة، ثم تحديد الموقع الجغرافي في الخلفية الوصول إليه. من خلال تنفيذ طلبات متزايدة، فإنك تمنح المستخدمين مزيدًا من التحكم والشفافية لأنّها تتعرّف بشكل أفضل على الميزات التي تحتاج إليها في تطبيقك الوصول إلى بيانات الموقع الجغرافي في الخلفية.
يوضح الشكل 6 مثالاً لتطبيق مصمم للتعامل مع العدد المتزايد الطلبات. كل من "عرض الموقع الحالي" و"التوصية بالأماكن المجاورة" الميزات التي تتطلّب الوصول إلى الموقع الجغرافي في المقدّمة. فقط "التوصية بالأماكن المجاورة" الميزة تتطلب الوصول إلى الموقع الجغرافي في الخلفية.
في ما يلي عملية تنفيذ الطلبات المتزايدة:
-
في البداية، يجب أن يوجّه تطبيقك المستخدمين إلى الميزات التي تتطلب الوصول إلى الموقع الجغرافي في المقدّمة، مثل "مشاركة الموقع الجغرافي" الميزة في الشكل 1 أو زر "عرض الموقع الحالي" الخاصة بها في الشكل 2.
ننصحك بإيقاف وصول المستخدم إلى الميزات التي تتطلّب وصول التطبيق إلى بيانات الموقع الجغرافي في الخلفية إلى أن يتم تحديد الموقع الجغرافي في المقدِّمة الوصول إليه.
-
في وقت لاحق، عندما يستكشف المستخدم الوظائف التي تتطلب الوصول إلى الموقع في الخلفية، فيمكنك طلب معرفة الموقع الجغرافي في الخلفية الوصول إليه.
طلب رصد الموقع الجغرافي في الخلفية إذا لزم الأمر
يعتمد محتوى مربّع حوار الأذونات على إصدار حزمة تطوير البرامج (SDK) المستهدَف
عندما تطلب إحدى الميزات في تطبيقك الوصول إلى الموقع الجغرافي في الخلفية على جهاز يعمل Android 10 (المستوى 29 من واجهة برمجة التطبيقات)، يتضمن مربّع حوار أذونات النظام خيارًا باسم السماح طوال الوقت. إذا قام المستخدم بتحديد هذا الخيار، فإن الميزة في منح تطبيقك إذن الوصول إلى الموقع الجغرافي في الخلفية
في نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأحدث، لا يتوفر مربع حوار النظام تضمين الخيار السماح طوال الوقت بدلاً من ذلك، يجب على المستخدمين تفعيل الخلفية في صفحة الإعدادات، كما هو موضح في الشكل 7.
يمكنك مساعدة المستخدمين في الانتقال إلى صفحة الإعدادات هذه من خلال اتّباع أفضل الممارسات. عند طلب إذن رصد الموقع الجغرافي في الخلفية عملية منح يعتمد هذا الإذن على إصدار حزمة تطوير البرامج (SDK) المستهدَف لتطبيقك.
يستهدف التطبيق الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث.
إذا لم يتم منح تطبيقك إذن "ACCESS_BACKGROUND_LOCATION
"
shouldShowRequestPermissionRationale()
التي تعرض true
، تعرض واجهة مستخدم تعليمية للمستخدمين، وتتضمّن ما يلي:
- توضيح واضح لسبب احتياج ميزة تطبيقك إلى الوصول إلى الخلفية الموقع.
- التصنيف المرئي للمستخدم ضمن خيار الإعدادات الذي يمنح الموقع الجغرافي في الخلفية
(على سبيل المثال، السماح طوال الوقت في الشكل 7). يمكنك الاتصال
getBackgroundPermissionOptionLabel()
للحصول على هذا التصنيف. تتم ترجمة القيمة المعروضة لهذه الطريقة إلى قيمة المستخدم تفضيل لغة الجهاز. - خيار للمستخدمين لرفض الإذن إذا رفض المستخدمون الخلفية الوصول إلى الموقع الجغرافي، يجب أن يتمكّنوا من مواصلة استخدام تطبيقك.
يستهدف التطبيق الإصدار 10 من نظام التشغيل Android أو الإصدارات الأقدم.
عندما تطلب إحدى الميزات في تطبيقك الوصول إلى بيانات الموقع الجغرافي في الخلفية، تظهر للمستخدمين مربع حوار النظام. يتضمّن مربّع الحوار هذا خيارًا للانتقال إلى الموقع الجغرافي لتطبيقك. خيارات الأذونات في صفحة الإعدادات.
طالما أنّ تطبيقك يتّبع أفضل الممارسات لطلب الموقع الجغرافي هذه الأذونات، فليس عليك إجراء أي تغييرات لدعم هذا السلوك.
يمكن أن يؤثر المستخدم في دقة الموقع الجغرافي في الخلفية.
إذا طلب المستخدم الموقع الجغرافي التقريبي، يجب إدخال
وتنطبق الخيارات في مربع حوار أذونات تحديد الموقع الجغرافي أيضًا على الموقع الجغرافي في الخلفية. ضِمن
بمعنى آخر، إذا منح المستخدم تطبيقك ACCESS_BACKGROUND_LOCATION
إذن الوصول إلى الموقع الجغرافي التقريبي فقط في المقدّمة،
الإذن بالوصول إلى الموقع الجغرافي التقريبي فقط في الخلفية.
تذكير بمنح إذن رصد الموقع الجغرافي في الخلفية
في نظام التشغيل Android 10 والإصدارات الأحدث، عندما تصل إحدى الميزات في تطبيقك إلى الموقع الجغرافي للجهاز في الخلفية لأول مرة بعد أن يمنح المستخدم الإذن باستخدام الموقع الجغرافي في الخلفية يقوم النظام بجدولة إشعار لإرساله إلى المستخدم. هذا النمط يذكّر الإشعار المستخدم بأنّه سمح لتطبيقك بالوصول إلى الجهاز. موقعك طوال الوقت. يظهر مثال على الإشعار في الشكل 8.
التحقّق من متطلبات الموقع الجغرافي في العناصر الاعتمادية لحزمة تطوير البرامج (SDK) لتطبيقك
التحقّق مما إذا كان تطبيقك يستخدم أي حِزم تطوير برامج (SDK) تعتمد على أذونات تحديد الموقع الجغرافي
ولا سيما إذن ACCESS_FINE_LOCATION
. يمكنك الرجوع إلى هذه المقالة على Medium.
حول التعرّف على سلوكيات حزمة تطوير البرامج (SDK)
والتبعيات لديك.
مصادر إضافية
للحصول على مزيد من المعلومات حول أذونات تحديد الموقع الجغرافي في Android، يُرجى الاطّلاع على ما يلي: المواد:
الدروس التطبيقية حول الترميز
الفيديوهات
نماذج
- نموذج تطبيق لتوضيح استخدام أذونات تحديد الموقع الجغرافي