تصغير طلبات الأذونات

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

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

هناك طرق بديلة متعددة لتقليل استخدام الأذونات:

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

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

تصف هذه الصفحة عدة حالات استخدام يمكن لتطبيقك تنفيذها بدون طلب أي أذونات.

إظهار الأماكن القريبة

قد يحتاج تطبيقك إلى معرفة الموقع الجغرافي التقريبي للمستخدم. ويفيد ذلك في عرض المعلومات المستندة إلى الموقع الجغرافي، مثل المطاعم القريبة.

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

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

تأكيد رقم هاتف المستخدم

للسماح لتطبيقك بتأكيد رقم هاتف المستخدم بشكل آمن، ننصحك باستخدام واجهة برمجة التطبيقات 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 بدلاً من ذلك.

إعادة ضبط الأذونات غير المستخدَمة

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

قراءة إرشادات التصميم.

طلب أذونات وقت التشغيل

بعد التأكّد من أنّ تطبيقك بحاجة إلى طلب أذونات وقت التشغيل، اتّبِع مسار عمل محدّدًا لإجراء ذلك.

قراءة إرشادات التصميم.

توضيح سبب حاجة تطبيقك إلى الأذونات

يؤدي استخدام requestPermissions() إلى عرض مربّع حوار يشير إلى الأذونات التي يريد تطبيقك استخدامها ولكن لا يوضّح السبب، ما قد يثير استغراب المستخدم.

لمزيد من التفاصيل والاقتراحات حول كيفية عرض مربّع الحوار هذا وتوقيت عرضه، يُرجى قراءة إرشادات التصميم.

التعامل مع عمليات رفض الأذونات

يجب أن يساعد تطبيقك المستخدمين في فهم الآثار المترتبة على رفض الإذن قبل وبعد اختيارهم إجراء ذلك.

قراءة إرشادات التصميم.