يتيح الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث إذنًا في وقت التشغيل لإرسال إشعارات غير معفاة (بما في ذلك الخدمات التي تعمل في المقدّمة (FGS)) من تطبيق:
POST_NOTIFICATIONS
.
يساعد هذا التغيير المستخدمين في التركيز على الإشعارات الأكثر أهمية بالنسبة إليهم.
ننصحك بشدة باستهداف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث في أقرب وقت ممكن للاستفادة من عناصر التحكّم والمرونة الإضافية التي توفّرها هذه الميزة. إذا واصلت استهداف الإصدار 12L (المستوى 32 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، ستفقد بعض المرونة في طلب الإذن في سياق وظائف تطبيقك.
تضمين الإذن في البيان
لطلب إذن الإشعارات الجديد من تطبيقك، عليك تعديل تطبيقك ليصبح متوافقًا مع الإصدار 13 من نظام التشغيل Android وإكمال عملية مشابهة لطلب أذونات أخرى أثناء التشغيل، كما هو موضّح في الأقسام التالية.
يظهر الإذن الذي عليك إدراجه في ملف بيان التطبيق في مقتطف الرمز التالي:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
تعتمد إمكانات التطبيق على خيار المستخدم في مربّع حوار الأذونات
في مربّع الحوار هذا، تتوفّر للمستخدمين الإجراءات التالية:
- انقر على السماح
- انقر على عدم السماح
- اسحب بعيدًا عن مربّع الحوار بدون الضغط على أي من الزرّين
توضِّح الأقسام التالية سلوك تطبيقك استنادًا إلى الإجراء الذي يتّخذه المستخدم.
ينقر المستخدم على "السماح"
إذا اختار المستخدم الخيار السماح، يمكن لتطبيقك إجراء ما يلي:
- إرسال إشعارات يتم السماح بجميع قنوات الإشعارات.
- نشر إشعارات ذات صلة بالخدمات التي تعمل في المقدّمة تظهر هذه الإشعارات في درج الإشعارات.
ينقر المستخدم على "عدم السماح"
إذا اختار المستخدم الخيار عدم السماح، لن يتمكّن تطبيقك من إرسال الإشعارات إلا إذا كان مؤهلاً للحصول على إعفاء. يتم حظر جميع قنوات الإشعارات، باستثناء بعض الأدوار المحدّدة. ويشبه ذلك السلوك الذي يحدث عندما يوقف المستخدم يدويًا جميع الإشعارات لتطبيقك في إعدادات النظام.
تنبيه: إذا كان تطبيقك يستهدف الإصدار 12L أو إصدارًا أقدم ونقر المستخدم على عدم السماح، ولو لمرة واحدة فقط، لن يُطلب منه ذلك مرة أخرى إلى أن يحدث أحد الإجراءات التالية:
- يلغي المستخدم تثبيت تطبيقك ثم يعيد تثبيته.
- تحديث تطبيقك لاستهداف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث
مرّر المستخدم سريعًا بعيدًا عن مربّع الحوار
إذا أوقف المستخدم مربع الحوار عن طريق التمرير سريعًا، أي أنّه لم يحدّد السماح أو عدم السماح، لن تتغيّر حالة إذن الإشعارات.
تأثيرات التطبيقات المثبَّتة حديثًا
إذا ثبَّت أحد المستخدمين تطبيقك على جهاز يعمل بنظام التشغيل Android 13 أو إصدار أحدث، سيتم إيقاف إشعارات تطبيقك تلقائيًا. يجب أن ينتظر تطبيقك إلى أن تطلب الإذن الجديد ويمنحه المستخدم لتطبيقك قبل أن يتمكّن من إرسال الإشعارات.
يستند وقت ظهور مربّع حوار الأذونات إلى إصدار حزمة SDK المستهدَف في تطبيقك، وذلك على النحو التالي:
- إذا كان تطبيقك يستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث، سيتمكّن تطبيقك من التحكّم بشكل كامل في وقت عرض مربّع حوار الأذونات. استغِل هذه الفرصة لتوضيح سبب احتياج التطبيق إلى هذا الإذن للمستخدمين، وتشجيعهم على منحه.
- إذا كان تطبيقك يستهدف الإصدار 12L (المستوى 32 لواجهة برمجة التطبيقات) أو إصدارًا أقدم، يعرض النظام مربّع حوار الأذونات في المرة الأولى التي يبدأ فيها تطبيقك نشاطًا بعد إنشاء قناة إشعارات، أو عندما يبدأ تطبيقك نشاطًا ثم ينشئ قناة الإشعارات الأولى. ويحدث ذلك عادةً عند بدء تشغيل التطبيق.
تأثيرات التعديلات على التطبيقات الحالية
للحدّ من المشاكل المرتبطة بإذن الإشعارات، يمنح النظام تلقائيًا الإذن مسبقًا لجميع التطبيقات المؤهَّلة عندما يرقّي المستخدم جهازه إلى الإصدار 13 من نظام التشغيل Android أو إصدار أحدث. بمعنى آخر، يمكن لهذه التطبيقات مواصلة إرسال الإشعارات إلى المستخدمين، ولن تظهر للمستخدمين مطالبة بمنح إذن أثناء التشغيل.
متطلبات الأهلية لمنح الأذونات مسبقًا
لكي يكون تطبيقك مؤهَّلاً للحصول على إذن تلقائي مسبق، يجب أن يتضمّن قناة إشعارات حالية وألا يكون المستخدم قد أوقف إشعاراته بشكل صريح على جهاز يعمل بالإصدار 12L أو إصدار أقدم.
إذا أوقف المستخدم الإشعارات لتطبيقك على جهاز يعمل بالإصدار 12L أو إصدار أقدم، سيظل هذا الإيقاف ساريًا عند ترقية الجهاز إلى الإصدار Android 13 أو إصدار أحدث.
الإعفاءات
يحتوي هذا القسم على مجموعة الإشعارات والتطبيقات المعفاة من التغيير في سلوك أذونات الإشعارات. على نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، إذا رفض المستخدم إذن تلقّي الإشعارات، سيظل بإمكانه الاطّلاع على الإشعارات ذات الصلة بالخدمات التي تعمل في المقدّمة في إدارة المهام، ولكن لن تظهر له في درج الإشعارات.
جلسات الوسائط
يُستثنى من هذا التغيير في السلوك الإشعارات ذات الصلة بجلسات الوسائط.
التطبيقات التي تم ضبط إعداداتها لإدارة المكالمات الهاتفية ذاتيًا
إذا كان تطبيقك يضبط نفسه لإدارة المكالمات الهاتفية ذاتيًا، لن تحتاج إلى إذن POST_NOTIFICATIONS
كي يتمكّن تطبيقك من إرسال إشعارات تستخدم نمط الإشعارات Notification.CallStyle
.
يعتبر النظام أنّ تطبيقك قد أعدّ نفسه لإدارة المكالمات الهاتفية ذاتيًا إذا كان يتبع ما يلي:
- توضّح هذه السمة إذن
MANAGE_OWN_CALLS
. - تنفّذ هذه السمة واجهة
ConnectionService
. - يتم التسجيل لدى مقدّم خدمة الاتصالات على الجهاز من خلال الاتصال بالرقم
registerPhoneAccount()
.
اختبار تطبيقك
يمكنك تقييم تأثير إذن الإشعارات في تطبيقك عند استخدامه لأول مرة على جهاز يعمل بنظام التشغيل Android 13 أو إصدار أحدث. تتيح لك مجموعات أوامر Android Debug Bridge (ADB) التالية محاكاة التسلسلات الأكثر شيوعًا لخيارات المستخدمين وعمليات ترقية الأجهزة بدون الحاجة إلى إعادة ضبط جهاز الاختبار:
تم تثبيت التطبيق حديثًا على جهاز يعمل بالإصدار 13 من نظام التشغيل Android أو إصدار أحدث:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
يظل المستخدم يتلقّى الإشعارات إذا ثبَّت التطبيق على جهاز يعمل بالإصدار 12L أو إصدار أقدم، ثم تم ترقية الجهاز إلى نظام التشغيل Android 13 أو إصدار أحدث:
adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
إذا أوقف المستخدم الإشعارات يدويًا عند تثبيت التطبيق على جهاز يعمل بالإصدار 12L أو إصدار أقدم، ثم تمت ترقية الجهاز إلى الإصدار Android 13 أو إصدار أحدث:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
أفضل الممارسات
يوضّح هذا القسم عدة طرق يمكنك من خلالها استخدام إذن الإشعارات الجديد بأكثر الطرق فعالية في تطبيقك.
تعديل إصدار حزمة تطوير البرامج (SDK) المستهدَف في تطبيقك
لمنح تطبيقك المزيد من المرونة بشأن وقت ظهور مربّع حوار الأذونات، حدِّث تطبيقك لكي يستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث.
الانتظار قبل عرض طلب الحصول على إذن إرسال الإشعارات
قبل أن تطلب من المستخدمين منح أي أذونات، يجب أن يتعرّفوا على تطبيقك.
قد يريد المستخدمون الجدد استكشاف التطبيق والتعرّف بشكل مباشر على مزايا كل طلب إذن فردي لتلقّي الإشعارات. يمكنك عرض طلب الحصول على الأذونات من خلال إجراء يتخذه المستخدم. تعرض القائمة التالية عدة أمثلة على الحالات التي يكون فيها الوقت مناسبًا لعرض طلب الحصول على إذن بإرسال الإشعارات:
- ينقر المستخدم على زر "جرس التنبيه".
- يختار المستخدم متابعة حساب شخص ما على وسائل التواصل الاجتماعي.
- يرسل المستخدم طلبًا لتوصيل الطعام.
يعرض الشكل 1 سير عمل مقترَحًا لطلب إذن عرض الإشعارات. ما لم تعرض الدالة
shouldShowRequestPermissionRationale()
القيمة true
، لن يحتاج تطبيقك إلى عرض الشاشة الوسطى التي تتضمّن النص "تلقّي إشعارات".
بدلاً من ذلك، يمكنك ضبط طلب الظهور بعد أن تمنح المستخدمين فرصة للتعرّف على تطبيقك، مثلاً، يمكنك الانتظار إلى أن يفتح المستخدم تطبيقك للمرة الثالثة أو الرابعة.
shouldShowRequestPermissionRationale()
تعرض القيمة true
.
طلب الإذن في السياق
عند طلب أذونات تلقّي الإشعارات داخل تطبيقك، يجب إجراء ذلك في السياق الصحيح، حتى يكون من الواضح تمامًا الغرض من استخدام الإشعارات وسبب موافقة المستخدم على تلقّيها. على سبيل المثال، قد يتضمّن تطبيق البريد الإلكتروني خيارات لإرسال إشعارات لكل رسالة إلكترونية جديدة، أو فقط للرسائل الإلكترونية التي يكون فيها المستخدم هو المستلِم الوحيد.
استغِل هذه الفرصة لتوضيح نواياك للمستخدمين، وسيكون من المرجّح أن يمنحوا تطبيقك إذن إرسال الإشعارات.
التحقّق مما إذا كان تطبيقك يمكنه إرسال الإشعارات
قبل أن يرسل تطبيقك إشعارًا، تأكَّد مما إذا كان المستخدم قد فعّل الإشعارات لتطبيقك. ولإجراء ذلك، استدعِ الدالة
areNotificationsEnabled()
.
استخدام الإذن بشكل مسؤول
بعد الحصول على الموافقة لإرسال الإشعارات، يُرجى تذكُّر استخدام الإذن بشكل مسؤول. يمكن للمستخدمين الاطّلاع على عدد الإشعارات اليومية التي يرسلها تطبيقك، كما يمكنهم إبطال الإذن في أي وقت.