كجزء من تحسين جودة التطبيقات وحماية خصوصية المستخدمين، ننصحك بتقليل استخدام الأذونات في تطبيقاتك إلى الحد الأدنى. يساعد ذلك المستخدمين في العثور على التطبيقات العالية الجودة التي توفّر بيئة آمنة لهم واستخدامها.
يؤدي طلب الأذونات من المستخدمين إلى مقاطعة سير عملهم، ويمكنهم رفض طلبك. بالإضافة إلى ذلك، في كل مرة تطلب فيها إذنًا جديدًا، عليك مراجعة كيفية طلب تطبيقك لبيانات المستخدمين ومشاركتها. تتطلب بعض الأذونات وواجهات برمجة التطبيقات الحساسة بشكل خاص أن توفّر بيان إفصاح داخل التطبيق عن إمكانية وصول تطبيقك إلى البيانات وجمعه واستخدامه ومشاركته لها.
هناك طرق بديلة متعددة لتقليل استخدام الأذونات إلى الحد الأدنى:
- استخدِم بدائل أقل دقة للوصول إلى أذونات بيانات المستخدمين حيثما ينطبق ذلك، مثل طلب بيانات الموقع الجغرافي التقريبية بدلاً من الدقيقة عندما لا تكون ضرورية.
- استخدِم أدوات الاختيار والبدائل للأذونات التي تمنح إذن الوصول إلى الأذونات الحساسة في ظروف محدّدة، مثل أداة اختيار الصور وأداة اختيار جهات الاتصال وزر الموقع الجغرافي
- استخدِم واجهات برمجة التطبيقات التي تسمح لتطبيقك بتنفيذ الوظيفة التي تم اختيارها بدون طلب أذونات.
- استخدِم أغراضًا أو معالِجات أحداث معيّنة لتنفيذ الوظائف بدلاً من طلب الأذونات.
- يوفّر النظام عقودًا مضمّنة لعمليات الملفات المختلفة ويتيح أيضًا استخدام العقود المخصّصة.
إذا كان عليك طلب إذن، عليك دائمًا احترام قرار المستخدم و توفير طريقة للتكيّف مع الإصدارات الأقدم لتجربة تطبيقك.
توضّح هذه الصفحة عدة حالات استخدام يمكن لتطبيقك تنفيذها بدون طلب أي أذونات.
إظهار الأماكن القريبة
قد يحتاج تطبيقك إلى معرفة الموقع الجغرافي التقريبي للمستخدم. ويفيد ذلك في إظهار المعلومات المستندة إلى الموقع الجغرافي، مثل المطاعم القريبة. لكل حالة استخدام للموقع الجغرافي مجموعة فريدة من المتطلبات المتعلقة بالدقة ومدة الوصول، ولا يحتاج معظمها إلا إلى تقدير تقريبي لمكان وجود المستخدم. إذا كنت بصدد تنفيذ وظيفة في تطبيقك تعتمد على الموقع الجغرافي للمستخدم، ننصحك بمراعاة الخيارات التالية لمساعدتك في اختيار طريقة الوصول المناسبة.
- إذا كانت وظيفة تطبيقك تتطلب موقعًا جغرافيًا دقيقًا، ولكن في لحظة معيّنة فقط أثناء استخدام التطبيق، مثل "البحث بالقرب مني" أو الملء التلقائي لعنوان في التجارة الإلكترونية، فمن المرجّح أنّ استخدام زر الموقع الجغرافي هو الخيار الأفضل لك لتقليل كل من المشاكل التي يواجهها المستخدمون والاعتماد على إذن النطاق الأوسع.
- إذا كان تطبيقك يحتاج إلى الموقع الجغرافي بشكل متكرر، اطلب الإذن
ACCESS_COARSE_LOCATION. يوفّر الإذن تقديرًا لموقع الجهاز من خدمات الموقع الجغرافي، كما هو موضّح في المستندات حول دقة الموقع الجغرافي التقريبي. - إذا كان تطبيقك يحتاج إلى الموقع الجغرافي بشكل أقل تكرارًا أو مرة واحدة فقط، ننصحك بأن تطلب من المستخدم إدخال عنوان أو رمز بريدي بدلاً من ذلك.
قد تتطلب حالات استخدام أخرى تقديرًا أكثر دقة لموقع الجهاز.
هذه الحالات هي المرات الوحيدة التي يكون فيها طلب الإذن
ACCESS_FINE_LOCATION مقبولاً.
إنشاء الملفات والوصول إليها
يتيح لك Android إنشاء الملفات والوصول إليها بدون الحاجة إلى طلب أي أذونات متعلقة بالتخزين أو أجهزة الاستشعار.
فتح ملفات الوسائط
قد يسمح تطبيقك للمستخدمين بالاختيار من بين صورهم وفيديوهاتهم، مثل مرفقات الرسائل أو صور الملف الشخصي.
لاستخدام هذه الوظيفة، استخدِم أداة اختيار الصور. لا تتطلب أداة اختيار الصور أي أذونات وقت التشغيل لاستخدامها. عندما يتفاعل المستخدم مع أداة اختيار الصور لاختيار صور أو فيديوهات لمشاركتها مع تطبيقك، يمنح النظام إذن قراءة مؤقتًا لمعرّف URI المرتبط بملفات الوسائط المحدّدة.
إذا كان تطبيقك بحاجة إلى الوصول إلى ملفات الوسائط بدون استخدام أداة اختيار الصور، فلن تحتاج إلى طلب أي أذونات تخزين:
- إذا كنت تصل إلى ملفات الوسائط التي أنشأها تطبيقك، فإنّ تطبيقك لديه إذن الوصول إلى هذه الملفات في مستودع الوسائط.
- إذا كنت تصل إلى ملفات الوسائط التي أنشأتها تطبيقات أخرى، استخدِم إطار عمل الوصول إلى مساحة التخزين.
فتح المستندات
قد يعرض تطبيقك المستندات التي أنشأها المستخدم، إما في تطبيقك أو في تطبيق آخر. ومن الأمثلة الشائعة على ذلك ملف نصي.
في هذه الحالة، اطلب الإذن READ_EXTERNAL_STORAGE فقط للتوافق مع الأجهزة القديمة. اضبط android:maxSdkVersion على 28.
استنادًا إلى التطبيق الذي أنشأ المستند، نفِّذ أحد الإجراءَين التاليَين:
- إذا أنشأ المستخدم المستند في تطبيقك، يمكنك الوصول إليه مباشرةً.
- إذا أنشأ المستخدم المستند في تطبيق آخر، استخدِم إطار عمل الوصول إلى مساحة التخزين.
التقاط صورة
قد يلتقط المستخدمون صورًا في تطبيقك باستخدام تطبيق الكاميرا المثبَّت مسبقًا على النظام.
في هذه الحالة، لا تطلب الإذن CAMERA. بدلاً من ذلك، استخدِم إجراء الغرض
ACTION_IMAGE_CAPTURE.
تسجيل فيديو
قد يسجّل المستخدمون فيديوهات في تطبيقك باستخدام تطبيق الكاميرا المثبَّت مسبقًا على النظام.
في هذه الحالة، لا تطلب الإذن CAMERA. بدلاً من ذلك، استخدِم إجراء الغرض
ACTION_VIDEO_CAPTURE.
تحديد الجهاز الذي يشغّل نسخة من تطبيقك
قد تحتاج نسخة معيّنة من تطبيقك إلى معرفة الجهاز الذي يتم تشغيلها عليه. ويفيد ذلك في التطبيقات التي تتضمّن إعدادات أو رسائل خاصة بالجهاز، مثل قوائم تشغيل مختلفة لأجهزة التلفزيون والأجهزة القابلة للارتداء.
في هذه الحالة، لا تصل إلى رقم IMEI الخاص بالجهاز مباشرةً. في الواقع، اعتبارًا من Android 10، لا يمكنك إجراء ذلك. بدلاً من ذلك، نفِّذ أحد الإجراءَين التاليَين:
- احصل على معرّف فريد للجهاز لنسخة تطبيقك باستخدام مكتبة معرّف المثيل.
- أنشئ معرّفًا خاصًا بك ضمن نطاق مساحة تخزين تطبيقك. استخدِم وظائف النظام الأساسية
، مثل
randomUUID().
الإقران بجهاز عبر البلوتوث
قد يقدّم تطبيقك تجربة محسّنة من خلال نقل البيانات إلى جهاز آخر عبر البلوتوث.
لاستخدام هذه الوظيفة، لا تطلب الأذونات ACCESS_FINE_LOCATION أو ACCESS_COARSE_LOCATIION أو BLUETOOTH_ADMIN. بدلاً من ذلك، استخدِم
ميزة إقران الأجهزة المرافقة.
إدخال رقم بطاقة الدفع تلقائيًا
توفّر "خدمات Google Play" مكتبة تتيح لك إدخال رقم بطاقة الدفع تلقائيًا. بدلاً من طلب الإذن CAMERA، يمكنك استخدام
مكتبة التعرّف على بطاقات الخصم والائتمان.
إدارة المكالمات الهاتفية والرسائل النصية
يوفّر Android و"خدمات Google Play" مكتبات تتيح لك إدارة المكالمات الهاتفية والرسائل النصية بدون الحاجة إلى طلب أي أذونات متعلقة بالمكالمات الهاتفية أو الرسائل القصيرة.
إدخال رمز مرور صالح لمرة واحدة تلقائيًا
لتبسيط سير عمل المصادقة الثنائية، قد يُدخل تطبيقك تلقائيًا رمز المرور الصالح لمرة واحدة الذي يتم إرساله إلى جهاز المستخدم للتحقّق من هويته.
لاستخدام هذه الوظيفة على الأجهزة التي تستخدم "خدمات Google Play"، لا تطلب الإذن READ_SMS. بدلاً من ذلك، استخدِم واجهة برمجة التطبيقات SMS Retriever API.
على الأجهزة الأخرى، إذا كان تطبيقك يستهدف Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) أو إصدارًا أحدث،
أنشئ رمزًا مميزًا خاصًا بالتطبيق باستخدام createAppSpecificSmsToken(). مرِّر هذا الرمز المميز إلى تطبيق أو خدمة أخرى يمكنها إرسال رسالة SMS للتحقّق.
إثبات رقم هاتف المستخدم
للسماح لتطبيقك بإثبات رقم هاتف المستخدم بشكل آمن، ننصحك باستخدام Digital Credentials API. يتيح لك استخدام واجهة برمجة التطبيقات هذه مباشرةً أو من خلال مجموعة كبيرة من أدوات التجميع المتوافقة إثبات معلومات حساب المستخدم بشكل موثوق بدون طلب أذونات حساسة للجهاز. للحصول على حلّ في Firebase، اطّلِع على مقالة إثبات رقم الهاتف في Firebase.
بدلاً من ذلك، يمكنك إثبات رقم هاتف المستخدم باستخدام رمز مرور صالح لمرة واحدة، باستخدام واجهة برمجة التطبيقات SMS Retriever API.
إدخال رقم هاتف المستخدم تلقائيًا
لتقديم مبيعات أو دعم أكثر فعالية، قد يسمح تطبيقك للمستخدم بإدخال رقم هاتف جهازه تلقائيًا.
لاستخدام هذه الوظيفة على الأجهزة التي تستخدم "خدمات Google Play"، لا تطلب الإذن READ_PHONE_STATE. بدلاً من ذلك، استخدِم مكتبة Phone Number
Hint.
فلترة المكالمات الهاتفية
لتقليل الانقطاعات غير الضرورية للمستخدم، قد يفلتر تطبيقك المكالمات الهاتفية غير المرغوب فيها.
لاستخدام هذه الوظيفة، لا تطلب الإذن READ_PHONE_STATE.
بدلاً من ذلك، استخدِم واجهة برمجة التطبيقات CallScreeningService.
إجراء مكالمات هاتفية
قد يتيح تطبيقك إمكانية إجراء مكالمة هاتفية من خلال النقر على معلومات جهة اتصال.
لاستخدام هذه الوظيفة، استخدِم إجراء الغرض ACTION_DIAL بدلاً
من إجراء ACTION_CALL يتطلب ACTION_CALL إذن CALL_PHONE وقت التثبيت، ما يمنع الأجهزة التي لا يمكنها إجراء المكالمات، مثل بعض الأجهزة اللوحية، من تثبيت تطبيقك.
إيقاف الوسائط مؤقتًا عند مقاطعة تطبيقك
إذا تلقّى المستخدم مكالمة هاتفية أو إذا تم تفعيل منبّه ضبطه المستخدم، يجب أن يوقف تطبيقك أي تشغيل للوسائط مؤقتًا إلى أن يستعيد التركيز الصوتي.
لاستخدام هذه الوظيفة، لا تطلب الإذن READ_PHONE_STATE.
بدلاً من ذلك، استخدِم معالِج الأحداث onAudioFocusChange() الذي يتم تشغيله تلقائيًا عندما يغيّر النظام أولويّة الصوت. مزيد من المعلومات حول كيفية
تطبيق أولويّة الصوت.
مسح الرموز الشريطية ضوئيًا
يتيح Android استخدام Google Code Scanner API، الذي تستند إليه خدمات Google Play، ما يسمح لك بفك ترميز الرموز الشريطية بدون طلب أي أذونات للكاميرا. تساعد واجهة برمجة التطبيقات هذه في الحفاظ على خصوصية المستخدم، ويقل احتمال حاجتك إلى إنشاء واجهة مستخدم مخصّصة لحالة استخدام المسح الضوئي للرموز الشريطية.
تجري واجهة برمجة التطبيقات مسحًا ضوئيًا للرمز الشريطي ولا تعرض إلا نتائج المسح الضوئي لتطبيقك. تتم معالجة الصور على الجهاز فقط، ولا تخزّن Google أي بيانات أو نتائج مسح ضوئي.
إذا كان تطبيقك بحاجة إلى دعم حالات استخدام أو تنسيقات رموز شريطية معقدة، أو إذا كان يتطلب واجهة مستخدم مخصّصة، استخدِم واجهة برمجة التطبيقات ML Kit barcode scanning API بدلاً من ذلك.
إعادة ضبط الأذونات غير المستخدَمة
يوفّر Android طرقًا متعددة لإعادة ضبط أذونات وقت التشغيل غير المستخدَمة إلى حالتها التلقائية، وهي "مرفوضة".
الاطّلاع على إرشادات التصميم.
طلب أذونات وقت التشغيل
بعد التأكّد من أنّ تطبيقك بحاجة إلى طلب أذونات وقت التشغيل، اتّبِع سير عمل محدّدًا لإجراء ذلك.
الاطّلاع على إرشادات التصميم.
توضيح سبب حاجة تطبيقك إلى الأذونات
يؤدي استخدام requestPermissions() إلى عرض مربّع حوار يشير إلى الأذونات التي يريد تطبيقك استخدامها ولكنه لا يوضّح السبب، ما قد يكون محيّرًا للمستخدم.
لمزيد من التفاصيل والاقتراحات حول كيفية عرض مربّع الحوار هذا ومتى يجب عرضه، اطّلِع على إرشادات التصميم.
التعامل مع عمليات رفض الأذونات
يجب أن يساعد تطبيقك المستخدمين في فهم الآثار المترتبة على رفض الإذن قبل وبعد اختيارهم إجراء ذلك.
الاطّلاع على إرشادات التصميم.