إذن تشغيل الإشعارات

يتيح الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث استخدام إذن التشغيل لإرسال إشعارات غير معفاة (بما في ذلك الخدمات التي تعمل في المقدّمة) من تطبيق: 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 لواجهة برمجة التطبيقات) أو إصدارًا أقدم، يعرض النظام مربع حوار الإذن في المرة الأولى التي يبدأ فيها تطبيقك نشاطًا بعد أن تنشئ قناة إشعارات، أو عندما يبدأ تطبيقك نشاطًا ثم ينشئ أول قناة إشعارات له. وعادةً ما يحدث ذلك عند بدء تشغيل التطبيق.

تأثيرات التحديثات على التطبيقات الحالية

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

الأهلية للحصول على الإذن مسبقًا

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

إذا أوقف المستخدم إشعارات تطبيقك على جهاز يعمل بالإصدار 12L أو إصدار أقدم، سيستمر هذا الرفض عند ترقية الجهاز إلى الإصدار 13 من Android أو إصدار أحدث.

الإعفاءات

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

جلسات الوسائط

إنّ الإشعارات ذات الصلة بجلسات الوسائط معفوة من هذا التغيير في السلوك.

التطبيقات التي تم ضبطها لإدارة المكالمات الهاتفية ذاتيًا

إذا كان تطبيقك يضبط نفسه لإدارة المكالمات الهاتفية بنفسه، لن تحتاج إلى إذن POST_NOTIFICATIONS لكي يرسل تطبيقك إعلامات تستخدم أسلوب إعلام Notification.CallStyle.

يعتبر النظام أنّ تطبيقك قد أعدّ نفسه لإدارة المكالمات الهاتفية بنفسه إذا كان ينفّذ كلّ ما يلي:

  1. يُستخدَم لتعريف الإذن MANAGE_OWN_CALLS.
  2. تنفيذ واجهة ConnectionService
  3. التسجيل لدى مقدّم خدمات الاتصالات للجهاز من خلال الاتصال بالرقم registerPhoneAccount()

اختبار تطبيقك

يمكنك تقييم مدى تأثير إذن الإشعارات في تطبيقك عند استخدامه لأول مرة على جهاز يعمل بنظام التشغيل Android 13 أو إصدار أحدث. تتيح لك المجموعات التالية من أوامر Android Debug Bridge (ADB) simulating تسلسلات الخيارات الأكثر شيوعًا للمستخدمين وعمليات ترقية الجهاز بدون الحاجة إلى إعادة ضبط جهاز الاختبار:

  • تم تثبيت التطبيق مؤخرًا على جهاز يعمل بالإصدار 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، لا يحتاج تطبيقك إلى عرض الشاشة الوسطى التي يضمّن عنوانها النص "تلقّي إشعارات".

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

بعد تسجيل دخول المستخدم، تظهر له دعوة
   لتلقّي إشعارات بشأن آخر المعلومات المتعلّقة بالرحلة. بعد أن يضغط المستخدم على زر
   &quot;حسنًا&quot;، يطلب التطبيق الإذن الجديد، ما يؤدي إلى ظهور مربّع حوار
   النظام.
الشكل 1. سير عمل مقترَح يستند إلى المستخدم لطلب إذن إرسال الإشعارات لا تكون الشاشة الوسطى ضرورية إلا إذا كانت shouldShowRequestPermissionRationale() تعرِض true.

طلب الإذن في السياق

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

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

التحقّق مما إذا كان بإمكان تطبيقك إرسال إشعارات

قبل أن يرسل تطبيقك إشعارًا، تأكَّد مما إذا كان المستخدم قد فعَّل الإشعارات لتطبيقك. لإجراء ذلك، اتصل بالرقم areNotificationsEnabled().

استخدام الإذن بمسؤولية

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