في إطار تحسين جودة التطبيقات وحماية خصوصية المستخدمين، ننصحك بتقليل استخدام الأذونات في تطبيقاتك. يساعد ذلك المستخدمين في العثور على التطبيقات العالية الجودة التي توفّر بيئة آمنة للمستخدمين واستخدامها.
يؤدي طلب الأذونات من المستخدمين إلى مقاطعة مسار المستخدم، ويمكن للمستخدمين رفض طلبك. بالإضافة إلى ذلك، في كل مرة تفصح فيها عن إذن جديد، عليك مراجعة كيفية طلب تطبيقك لبيانات المستخدمين ومشاركتها. تتطلّب بعض الأذونات وواجهات برمجة التطبيقات الحسّاسة بشكل خاص تقديم بيان إفصاح داخل التطبيق عن إمكانية وصول تطبيقك إلى البيانات وجمعه واستخدامه ومشاركته لها.
تتوفّر عدة طرق بديلة لتقليل استخدام الأذونات:
- استخدِم بدائل أقل دقة للوصول إلى أذونات بيانات المستخدمين حيثما ينطبق ذلك، مثل طلب بيانات الموقع الجغرافي التقريبي بدلاً من الدقيق عندما لا يكون ذلك ضروريًا.
- استخدِم أدوات اختيار الملفات وبدائل الأذونات التي تمنح إذن الوصول إلى الأذونات الحساسة في ظروف محدودة النطاق، مثل أداة اختيار الصور وأداة اختيار جهات الاتصال وزر الموقع الجغرافي.
- استدعاء واجهات برمجة التطبيقات التي تسمح لتطبيقك بتنفيذ الوظيفة المحدّدة بدون الإفصاح عن الأذونات
- استدعاء نوايا أو معالجات أحداث معيّنة لتنفيذ وظائف بدلاً من تعريف الأذونات
- يوفر النظام عقودًا مدمجة لعمليات الملفات المختلفة، ويتيح أيضًا استخدام عقود مخصّصة.
إذا كان عليك الإفصاح عن إذن، عليك دائمًا احترام قرار المستخدم وتوفير طريقة للتكيّف مع الإصدارات الأقدم لتطبيقك على نحو ملائم.
توضّح هذه الصفحة العديد من حالات الاستخدام التي يمكن أن يلبّيها تطبيقك بدون الحاجة إلى الإفصاح عن أي أذونات.
عرض الأماكن القريبة
قد يحتاج تطبيقك إلى معرفة الموقع الجغرافي التقريبي للمستخدم. ويفيد ذلك في عرض معلومات تستند إلى الموقع الجغرافي، مثل المطاعم القريبة. تتضمّن كل حالة استخدام للموقع الجغرافي مجموعة فريدة من المتطلبات المتعلّقة بالدقة ومدة الوصول، ولا تتطلّب معظم الحالات سوى تقدير تقريبي لمكان تواجد المستخدم. إذا كنت بصدد تنفيذ وظيفة في تطبيقك تعتمد على الموقع الجغرافي للمستخدم، ننصحك بمراعاة الخيارات التالية لمساعدتك في اختيار طريقة الوصول المناسبة.
- إذا كانت وظائف تطبيقك تتطلّب تحديد الموقع الجغرافي الدقيق، ولكن فقط في لحظة معيّنة أثناء استخدام التطبيق، مثل "البحث بالقرب مني" أو الملء التلقائي لعنوان في التجارة الإلكترونية، من المرجّح أنّ استخدام زر تحديد الموقع الجغرافي هو الخيار الأفضل لتقليل المشاكل التي يواجهها المستخدمون والحدّ من الاعتماد على إذن النطاق الأوسع.
- إذا كان تطبيقك يحتاج إلى تحديد الموقع الجغرافي بشكل متكرّر، عليك تضمين إذن
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 والإصدارات الأحدث، ولكن يمكنك اتّخاذ أحد الإجراءات التالية:
- يمكنك الحصول على معرّف فريد للجهاز خاص بمثيل تطبيقك باستخدام مكتبة Instance ID.
- أنشئ معرّفًا خاصًا بك يقتصر نطاقه على مساحة تخزين تطبيقك. استخدام وظائف النظام الأساسية، مثل
randomUUID()
الإقران بجهاز عبر البلوتوث
قد يوفّر تطبيقك تجربة محسّنة من خلال نقل البيانات إلى جهاز آخر عبر البلوتوث.
لإتاحة هذه الوظيفة، لا تُدرِج الأذونات ACCESS_FINE_LOCATION أو ACCESS_COARSE_LOCATIION أو BLUETOOTH_ADMIN. بدلاً من ذلك، استخدِم إقران الأجهزة المرافقة.
إدخال رقم بطاقة دفع تلقائيًا
توفّر "خدمات Google Play" مكتبة تتيح لك إدخال رقم بطاقة الدفع تلقائيًا. بدلاً من تعريف إذن CAMERA، يمكنك استخدام مكتبة التعرّف على بطاقات السحب الآلي وبطاقات الائتمان.
إدارة المكالمات الهاتفية والرسائل النصية
توفّر خدمات Android وGoogle Play مكتبات تتيح لك إدارة المكالمات الهاتفية والرسائل النصية بدون الحاجة إلى الإفصاح عن أي أذونات ذات صلة بالمكالمات الهاتفية أو الرسائل القصيرة.
إدخال رمز مرور صالح لمرة واحدة تلقائيًا
لتبسيط سير عمل المصادقة الثنائية، قد يقوم تطبيقك تلقائيًا بإدخال رمز مرور صالح لمرة واحدة الذي يتم إرساله إلى جهاز المستخدم لإثبات هويته.
لإتاحة هذه الوظيفة على الأجهزة التي تعمل بخدمات Google Play، لا تُدرِج الإذن READ_SMS. بدلاً من ذلك، استخدِم SMS Retriever API.
على الأجهزة الأخرى، إذا كان تطبيقك يستهدف الإصدار 8.0 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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 أي بيانات أو نتائج فحص.
إذا كان تطبيقك يحتاج إلى دعم حالات استخدام أو تنسيقات رموز شريطية معقّدة، أو إذا كان يتطلّب واجهة مستخدم مخصّصة، استخدِم واجهة برمجة التطبيقات لمسح الرموز الشريطية في حزمة تعلّم الآلة بدلاً من ذلك.
إعادة ضبط الأذونات غير المستخدَمة
يوفّر نظام التشغيل Android طرقًا متعدّدة لإعادة ضبط أذونات وقت التشغيل غير المستخدَمة إلى حالتها التلقائية، أي حالة الرفض.
اطّلِع على إرشادات التصميم.
طلب أذونات التشغيل
بعد التأكّد من أنّ تطبيقك يحتاج إلى الإفصاح عن أذونات وقت التشغيل وطلبها، اتّبِع سير عمل محدّدًا لإجراء ذلك.
اطّلِع على إرشادات التصميم.
توضيح سبب احتياج تطبيقك إلى الأذونات
يؤدي استخدام requestPermissions() إلى عرض مربّع حوار يشير إلى الأذونات التي يريد تطبيقك استخدامها بدون توضيح السبب، ما قد يثير استغراب المستخدم.
لمزيد من التفاصيل والاقتراحات حول كيفية عرض مربع الحوار هذا ومتى يجب عرضه، يُرجى الاطّلاع على إرشادات التصميم.
التعامل مع حالات رفض الأذونات
يجب أن يساعد تطبيقك المستخدمين في فهم الآثار المترتبة على رفض منح الإذن قبل وبعد اتّخاذهم هذا القرار.
اطّلِع على إرشادات التصميم.