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

في نظام التشغيل Android 6.0 والإصدارات الأحدث، تم تصميم نموذج أذونات تطبيقات Android لجعل أذونات أكثر وضوحًا وفائدة وأمانًا للمستخدمين. انتقل النموذج إلى نقل Android التطبيقات التي تتطلب أذونات خطيرة (يُرجى الاطّلاع على الأذونات المتأثرة) من نموذج أذونات وقت التثبيت إلى نموذج أذونات وقت التشغيل:

  • أذونات وقت التثبيت

    (الإصدار 5.1 من نظام التشغيل Android والإصدارات الأقدم) يمنح المستخدمون أذونات خطيرة لأحد التطبيقات عند تثبيت التطبيق أو تحديثه. الجهاز يمكن للشركات المصنّعة وشركات تشغيل شبكات الجوّال تثبيت التطبيقات مسبقًا بأذونات ممنوحة مسبقًا بدون إبلاغ المستخدم.

  • أذونات التشغيل

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

    (Android 10) يحصل المستخدمون على مزيد من الشفافية ولديهم التحكُّم في تحديد التطبيقات التي لديها أذونات وقت تشغيل ميزة التعرّف على النشاط (AR). يتم مطالبة المستخدمين من خلال مربّع حوار أذونات التشغيل إما للسماح بالأذونات دائمًا أو السماح بها أثناء استخدامها أو رفضها. عند ترقية نظام التشغيل إلى Android 10، يتم الاحتفاظ بالأذونات الممنوحة للتطبيقات ولكن يمكن للمستخدمين الانتقال إلى الإعدادات وتغييرها.

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

الأذونات المتأثرة

يتطلب الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث أذونات خطيرة لاستخدام نموذج أذونات وقت التشغيل. الأذونات الخطيرة هي أذونات عالية الخطورة (مثل READ_CALENDAR) تمنح مطالبة التطبيقات بالوصول إلى بيانات المستخدم الخاصة، أو التحكم في أحد الأجهزة، مما قد يؤدي إلى تؤثر في المستخدم. للاطّلاع على قائمة بالأذونات الخطيرة، شغِّل الأمر:

adb shell pm list permissions -g -d

لا يغيّر الإصدار Android 6.0 والإصدارات الأحدث منه السلوك العادي الأذونات. وهذه كلها أذونات غير خطيرة بما في ذلك الأذونات العادية والنظام وأذونات التوقيع. الأذونات العادية هي أذونات منخفضة الخطورة (مثل SET_WALLPAPER) التي تمنح التطبيقات إذن الوصول إلى مستوى معزول بأقل مخاطر ممكنة على التطبيقات الأخرى أو النظام أو المستخدم كما في Android 5.1 إصدارات أقل، يمنح النظام الأذونات العادية تلقائيًا للتطبيق صاحب الطلب على التثبيت ولا يطلب من المستخدم الموافقة. للحصول على تفاصيل عن الأذونات، راجِع <permission>. العناصر.

القيود الصارمة والسلسة في Android 10

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

  • (القيود الصارمة) لا يمكن منح التطبيقات أذونات غير مسموح بها. القائمة المسموح بها.
  • (القيود التجريبية) تعمل التطبيقات التي لم يتم إدراجها في القائمة المسموح بها وفقًا لما يلي: الإذن المحدد الذي يطلبونه. يتم وصف السلوك بشكل علني وثائق للإذن المطلوب.

عند تثبيت أحد التطبيقات، قد تحدد أداة التثبيت (مثل متجر Google Play) عدم السماح بالأذونات المقيّدة للتطبيق الأذونات هي لا يتم منحها إلّا إذا كان التطبيق يستوفي معايير خاصة وفقًا لسياسة المنصة. تشمل أنواع الأذونات الصارمة إذن الوصول إلى الرسائل القصيرة (SMS). وأذونات سجل المكالمات.

تتم الإضافة إلى القائمة المسموح بها أثناء التثبيت، وعند

  • تطبيق مُثبَّت مسبقًا أثناء ترقية الإصدار 9 إلى Android 10.
  • منح إذن مسبقًا أو تثبيت تطبيق مسبقًا.
  • يجب توفُّر إذن للدور الذي تم تحديده من قبل لإدراج إذن.
  • يضع أداة التثبيت (مثل متجر Google Play) علامة على الإذن على أنه القائمة المسموح بها.

ولا يمكن للمستخدمين إضافة الأذونات يدويًا إلى القائمة المسموح بها.

المتطلبات

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

  • يجب أن يكون نموذج إذن التشغيل متسقًا على جميع الأجهزة التي تعمل بنظام التشغيل Android 6.0 وأعلى. ويتم فرض ذلك من خلال اختبارات مجموعة أدوات اختبار التوافق مع Android (CTS).
  • يجب أن تطلب التطبيقات من المستخدمين منح أذونات التطبيق في وقت التشغيل. لمزيد من التفاصيل، يُرجى الاطّلاع على تحديث. التطبيقات. قد يتم منح استثناءات محدودة للتطبيقات والمعالجات التلقائية. توفّر وظائف الجهاز الأساسية الأساسية للتشغيل المتوقّع للجهاز. (على سبيل المثال، قد يتضمن تطبيق Dialer التلقائي على الجهاز للتعامل مع ACTION_CALL الوصول إلى إذن الهاتف). لمعرفة التفاصيل، يُرجى الاطِّلاع على إنشاء الاستثناءات.
  • التطبيقات المُحمَّلة مسبقًا والتي تمتلك أذونات خطيرة أن يستهدف المستوى 23 لواجهة برمجة التطبيقات وأن يحافظ على نموذج إذن التشغيل أي أن تدفق واجهة المستخدم أثناء تثبيت التطبيق، يجب ألا تحيد عن تنفيذ بروتوكول AOSP في PermissionController، يمكن للمستخدمين إبطال الأذونات الخطيرة للتطبيقات المثبّتة مسبقًا، ولذلك مفعَّلة.
  • يجب أن تستخدم التطبيقات بلا واجهة مستخدم رسومية نشاطًا لطلب الأذونات أو مشاركة معرِّف UID مع تطبيق آخر لديه الأذونات اللازمة. لمعرفة التفاصيل، يُرجى الاطّلاع على التطبيقات بلا واجهة مستخدم رسومية.

نقل الأذونات

تظل الأذونات الممنوحة للتطبيقات على Android 5.x ممنوحة بعد التحديث إلى Android 6.0 أو أعلى من ذلك، ولكن يمكن للمستخدمين إبطال هذه الأذونات في أي وقت.

في تحديثات الإصدار 9 إلى 10 من نظام التشغيل Android، يتم منح جميع الأذونات الصارمة القائمة المسموح بها. لمعرفة تفاصيل حول تنفيذ أذونات تقسيم المقدّمة/الخلفية، يُرجى الاطّلاع على تغيير الخصوصية في Android 10، بدءًا من طلب الخلفية. الموقع الجغرافي.

التكامل

عند دمج نموذج أذونات تشغيل التطبيق لنظام التشغيل Android 6.0 والإصدارات الأحدث، يجب: تحديث التطبيقات المثبّتة مسبقًا للتوافق مع النموذج الجديد يمكنك أيضًا تحديد استثناءات للتطبيقات التي تمثل المعالجات/المزودين التلقائيين للوظائف الأساسية، وتحديد الأذونات المخصصة، تخصيص المظهر المستخدَم في تطبيق PermissionController.

تحديث التطبيقات

لا يتم تلقائيًا منح التطبيقات المثبّتة على صورة النظام والتطبيقات المثبّتة مسبقًا. الأذونات. ننصحك بالعمل مع مطوِّري التطبيقات المُثبَّتين مسبقًا (المصنّع الأصلي للجهاز ومشغّل شبكة الجوّال والمطوّرين الطرف) لإجراء التعديلات المطلوبة على التطبيق باستخدام إرشاداتنا. عليك على وجه التحديد التأكُّد من تعديل التطبيقات المثبَّتة مسبقًا لتجنّب تعديل والأعطال والمشكلات الأخرى عند إبطال المستخدمين للأذونات.

التطبيقات المُحمَّلة مسبقًا

في الإصدار 9 من نظام Android والإصدارات الأقدم، يجب أن تستهدف التطبيقات المحمَّلة مُسبَقًا والتي تستخدم أذونات خطيرة استهداف المستوى 23 من واجهة برمجة التطبيقات. أو إصدار أحدث، مع الإبقاء على نموذج أذونات AOSP بالإصدار 6.0 من نظام التشغيل Android أو الإصدارات الأحدث. على سبيل المثال، يشير تدفق واجهة المستخدم أثناء تثبيت التطبيق، يجب ألا تنحرف عن تنفيذ بروتوكول AOSP PermissionController يمكن للمستخدمين أيضًا إبطال الأذونات الخطيرة التطبيقات المثبّتة مسبقًا.

في الإصدارات من Android 6.0 إلى 9، يتم منح بعض الأذونات أثناء عملية التثبيت. ومع ذلك، بدءًا من في الإصدار 10، تكون عملية التثبيت (التي يتم تنفيذها من خلال تطبيق Package Installer) وظيفة منفصلة عن الأذونات الممنوحة (في Permission Controller).

تطبيقات بلا واجهة مستخدم رسومية

يمكن طلب الأذونات للأنشطة فقط. لا يمكن للخدمات طلب الأذونات مباشرةً.

  • في نظام التشغيل Android 5.1 والإصدارات الأقدم، يمكن للتطبيقات بلا واجهة مستخدم رسومية طلب أذونات في حال أو إذا كانت مثبتة مسبقًا بدون استخدام أي نشاط.
  • ضِمن في الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث، يجب استخدام إحدى الطرق التالية لإجراء ما يلي: طلب الأذونات:
    • أضِف نشاطًا لطلب الأذونات. (هذه هي الطريقة المفضلة).
    • يمكنك مشاركة معرِّف فريد مع تطبيق آخر لديه الأذونات اللازمة. استخدام هذه المسودة فقط عندما تحتاج إلى النظام الأساسي للتعامل مع حزم APK متعددة كحزمة واحدة التطبيق.

والهدف من ذلك هو تجنب إرباك المستخدمين بطلبات الحصول على أذونات تظهر خارج السياق.

تخصيص واجهة مستخدم PackageInstaller

يمكنك تخصيص مظهر واجهة مستخدم الأذونات من خلال جارٍ تعديل مظاهر الجهاز التلقائية (Theme.DeviceDefault.Settings وTheme.DeviceDefault.Light.Dialog.NoActionBar) قيد الاستخدام من قِبل PackageInstaller. ومع ذلك، وبما أنّ الاتساق مهم جدًا لمطوّري التطبيقات لا يمكنك تخصيص موضع الإعلان وموضعه وقواعده التي تحدد وقت الأذونات تظهر واجهة المستخدم.

لتضمين سلاسل للغات إضافية، يُرجى المساهمة السلاسل إلى AOSP.

إنشاء استثناءات

يمكنك منح الأذونات مسبقًا للتطبيقات التي تعمل معالِجات تلقائية أو لوظائف نظام التشغيل الأساسية باستخدام فئة واحدة (DefaultPermissionGrantPolicy.java) في PackageManager. أمثلة:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

تحديد الأذونات المخصّصة

يمكنك تحديد الأذونات والمجموعات المخصّصة على أنّها عادية أو خطرة وإضافة أذونات خاصة بالمصنّع الأصلي للجهاز أو مشغّل شبكة الجوّال إلى الأذونات الحالية ومجموعات أذونات، تمامًا كما تفعل في الإصدار 5.x والإصدارات الأقدم من نظام التشغيل Android.

في الإصدار 6.0 من نظام Android والإصدارات الأحدث، إذا أضفت إذنًا جديدًا خطيرًا، يجب التعامل معه في بنفس طريقة الأذونات الخطرة الأخرى (يتم طلبها أثناء تشغيل التطبيق قابلة للإلغاء من قبل المستخدمين). وعلى وجه التحديد:

  • يمكنك إضافة أذونات جديدة إلى مجموعة حالية، ولكن لا يمكنك تعديل ربط بروتوكول AOSP بالأذونات الخطيرة ومجموعات الأذونات الخطيرة (بعبارة أخرى، لا يمكنه إزالة إذن من مجموعة وتعيينه إلى مجموعة أخرى).
  • يمكنك إضافة مجموعات أذونات جديدة في التطبيقات المثبّتة على الجهاز. ولكن لا يمكنك إضافة مجموعات أذونات جديدة في بيان النظام الأساسي.

اختبار الأذونات

يشتمل Android على اختبارات مجموعة أدوات اختبار التوافق (CTS) التي تتحقق من ربط الأذونات الفردية بالمجموعات الصحيحة. اجتياز هذه الاختبارات هو أحد متطلبات التوافق مع إصدار Android 6.0 والإصدارات الأحدث من CTS.

إبطال الأذونات

في نظام Android 13 والإصدارات الأحدث، يمكنك إبطال الأذونات الممنوحة لك. أذونات التشغيل باستخدام Context.revokeSelfPermissionsOnKill() يحدث الإبطال بشكل غير متزامن ويتم تشغيله عندما يكون ذلك آمنًا بدون مقاطعة المستخدم. عند تفعيل الإبطال، يتم إنهاء جميع العمليات قيد التشغيل في الاستدعاء الفريد (UID).

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

عندما يُبطل النظام الأذونات المطلوبة، يبطل أيضًا الخلفية المقابلة. الأذونات في حال استمرار عدم منح أي من الأذونات المقابلة لها التي تعمل في المقدّمة.

لا يتم تنفيذ الإبطال طالما أنّ العملية لا تزال في المقدّمة، ولكن يمكن على الفور من خلال الإيقاف اليدوي لجميع العمليات الجارية في المعرف الفريد الحالي، مثيل باستخدام System.exit(). ومع ذلك، ننصح بالسماح للنظام بتحديد وقت تشغيله.

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