Android 13 (سطح API 33) و بالاتر از مجوز زمان اجرا برای ارسال اعلانهای غیرمستقیم (از جمله خدمات پیشزمینه (FGS)) از یک برنامه پشتیبانی میکند: POST_NOTIFICATIONS
. این تغییر به کاربران کمک میکند تا روی اعلانهایی تمرکز کنند که برایشان مهمتر است.
ما به شدت توصیه می کنیم که در اسرع وقت اندروید 13 یا بالاتر را هدف قرار دهید تا از کنترل اضافی و انعطاف پذیری این ویژگی بهره مند شوید. اگر به هدف قرار دادن 12L (سطح API 32) یا کمتر ادامه دهید، با درخواست مجوز در زمینه عملکرد برنامه خود، انعطاف پذیری خود را از دست خواهید داد.
اجازه را اعلام کنید
برای درخواست مجوز اعلان جدید از برنامه خود، برنامه خود را بهروزرسانی کنید تا Android 13 را هدف قرار دهد و فرآیند مشابهی را در مقایسه با درخواست سایر مجوزهای زمان اجرا تکمیل کنید، همانطور که در بخشهای زیر نشان داده شده است.
مجوزی که باید در فایل مانیفست برنامه خود اعلام کنید در قطعه کد زیر ظاهر می شود:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
قابلیتهای برنامه به انتخاب کاربر در گفتگوی مجوزها بستگی دارد
در این گفتگو، کاربران اقدامات زیر را در دسترس خود دارند:
- اجازه را انتخاب کنید
- مجاز نیست را انتخاب کنید
- بدون فشار دادن هیچ یک از دکمهها، انگشت خود را از کادر گفتگو دور کنید
بخشهای زیر نحوه عملکرد برنامه شما را شرح میدهند که کاربر بر اساس آن عمل میکند.
کاربر "Allow" را انتخاب می کند
اگر کاربر گزینه مجاز را انتخاب کند، برنامه شما می تواند کارهای زیر را انجام دهد:
- ارسال نوتیفیکیشن همه کانال های اطلاع رسانی مجاز است.
- اعلان های مربوط به خدمات پیش زمینه را ارسال کنید. این اعلان ها در کشوی اعلان ظاهر می شوند.
کاربر "اجازه نمی دهد" را انتخاب می کند
اگر کاربر گزینه اجازه نمی دهد را انتخاب کند، برنامه شما نمی تواند اعلان ارسال کند مگر اینکه واجد شرایط معافیت باشد. همه کانال های اطلاع رسانی مسدود هستند، به جز چند نقش خاص. این شبیه رفتاری است که وقتی کاربر به صورت دستی همه اعلانهای برنامه شما را در تنظیمات سیستم خاموش میکند، رخ میدهد.
احتیاط: اگر برنامه شما 12 لیتر یا کمتر را هدف قرار دهد و کاربر روی Don't allow ضربه بزند، حتی فقط یک بار، تا زمانی که یکی از موارد زیر رخ ندهد، دوباره از آنها خواسته نمی شود:
- کاربر برنامه شما را حذف نصب و دوباره نصب می کند.
- شما برنامه خود را برای هدف قرار دادن Android 13 یا بالاتر به روز می کنید.
کاربر از دیالوگ دور میشود
اگر کاربر از کادر گفتگو دور شود - یعنی اجازه یا don't allow را انتخاب کند - وضعیت مجوز اعلان تغییر نمی کند.
تأثیرات روی برنامه های تازه نصب شده
اگر کاربری برنامه شما را روی دستگاهی نصب کند که دارای Android 13 یا بالاتر است، اعلانهای برنامه شما به طور پیشفرض خاموش هستند . برنامه شما باید برای ارسال اعلانها صبر کند تا زمانی که مجوز جدید را درخواست کنید و کاربر آن مجوز را به برنامه شما اعطا کند.
زمانی که کادر گفتگوی مجوزها ظاهر می شود بر اساس نسخه SDK هدف برنامه شما است:
- اگر برنامه شما اندروید 13 یا بالاتر را هدف قرار می دهد، برنامه شما کنترل کاملی بر روی زمانی که کادر گفتگوی مجوز نمایش داده می شود، دارد. از این فرصت استفاده کنید تا به کاربران توضیح دهید که چرا برنامه به این مجوز نیاز دارد و آنها را تشویق به اعطای آن کنید.
- اگر برنامه شما 12 لیتر (سطح API 32) یا کمتر را هدف قرار می دهد، سیستم اولین باری که برنامه شما فعالیتی را شروع می کند پس از ایجاد یک کانال اعلان یا زمانی که برنامه شما فعالیتی را شروع می کند و سپس اولین کانال اعلان خود را ایجاد می کند، کادر گفتگوی مجوز را نشان می دهد. این معمولاً هنگام راه اندازی برنامه است.
تأثیرات بر به روز رسانی برنامه های موجود
برای به حداقل رساندن اختلالات مرتبط با مجوز اعلان، زمانی که کاربر دستگاه خود را به Android 13 یا بالاتر ارتقا میدهد، سیستم بهطور خودکار مجوز را به همه برنامههای واجد شرایط میدهد. به عبارت دیگر، این برنامهها میتوانند به ارسال اعلانها برای کاربران ادامه دهند و کاربران اعلان مجوز زمان اجرا را نمیبینند.
واجد شرایط بودن برای پیش از اعطای مجوز
برای اینکه برنامه شما واجد شرایط دریافت پیشهزینه خودکار باشد، باید یک کانال اعلان موجود داشته باشد و کاربر صراحتاً اعلانهای آن را در دستگاهی با ظرفیت 12 لیتر یا کمتر غیرفعال نکرده باشد.
اگر کاربر اعلانهای برنامه شما را در دستگاهی با حجم 12 لیتر یا پایینتر غیرفعال کرده باشد، وقتی دستگاه به Android 13 یا بالاتر ارتقا یابد، این انکار همچنان ادامه دارد.
معافیت ها
این بخش شامل مجموعه ای از اعلان ها و برنامه هایی است که از تغییر رفتار مجوز اعلان معاف هستند. در Android 13 (سطح API 33) یا بالاتر، اگر کاربر مجوز اعلان را رد کند، همچنان اعلانهای مربوط به خدمات پیشزمینه را در Task Manager میبیند اما آنها را در کشوی اعلان نمیبیند.
جلسات رسانه ای
اعلانهای مربوط به جلسات رسانه از این تغییر رفتار مستثنی هستند.
برنامههایی پیکربندی شدهاند تا تماسهای تلفنی را خود مدیریت کنند
اگر برنامه شما خود را طوری پیکربندی کرده است که تماسهای تلفنی را مدیریت کند، به مجوز POST_NOTIFICATIONS
نیاز ندارید تا برنامه شما اعلانهایی را ارسال کند که از سبک اعلان Notification.CallStyle
استفاده میکنند.
اگر برنامه شما هر یک از موارد زیر را انجام دهد، سیستم در نظر میگیرد که خود را برای تماسهای تلفنی خود مدیریتی پیکربندی کرده است:
- مجوز
MANAGE_OWN_CALLS
را اعلام می کند. - رابط
ConnectionService
را پیاده سازی می کند. - با تماس با
registerPhoneAccount()
در ارائه دهنده مخابرات دستگاه ثبت نام می کند.
اپلیکیشن خود را تست کنید
میتوانید ارزیابی کنید که مجوز اعلان چگونه برنامه شما را در اولین استفاده از آن در دستگاهی با Android 13 یا بالاتر استفاده میکند. مجموعههای زیر از دستورات Android Debug Bridge (ADB) به شما امکان میدهند متداولترین توالی انتخابهای کاربر و ارتقاء دستگاه را بدون نیاز به بازنشانی دستگاه آزمایشی خود شبیهسازی کنید:
برنامه به تازگی بر روی دستگاهی نصب شده است که دارای Android 13 یا بالاتر است:
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
هنگامی که برنامه روی دستگاهی با حجم ۱۲ لیتر یا کمتر نصب میشود، کاربر اعلانها را فعال نگه میدارد، سپس دستگاه را به اندروید ۱۳ یا بالاتر ارتقا میدهد:
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
وقتی برنامه روی دستگاهی با حجم ۱۲ لیتر یا کمتر نصب میشود، کاربر بهصورت دستی اعلانها را غیرفعال میکند، سپس دستگاه به اندروید ۱۳ یا بالاتر ارتقا مییابد:
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 هدف برنامه خود را به روز کنید
برای اینکه به برنامه خود انعطاف بیشتری نسبت به زمانی که کادر گفتگوی مجوز ظاهر میشود، برنامه خود را بهروزرسانی کنید تا Android 13 یا بالاتر را هدف قرار دهد.
منتظر بمانید تا درخواست مجوز اعلان نشان داده شود
قبل از اینکه از کاربران بخواهید هر گونه مجوزی را اعطا کنند، به آنها اجازه دهید با برنامه شما آشنا شوند.
کاربران جدید ممکن است بخواهند برنامه را کاوش کنند و فوراً از مزایای هر درخواست اعلان فردی مطلع شوند. می توانید یک درخواست مجوز از یک اقدام کاربر را راه اندازی کنید . لیست زیر چندین نمونه از زمان مناسب برای نمایش درخواست مجوز اعلان را نشان می دهد:
- کاربر روی دکمه "زنگ هشدار" ضربه می زند.
- کاربر انتخاب می کند که حساب رسانه های اجتماعی شخصی را دنبال کند.
- کاربر سفارشی را برای تحویل غذا ارسال می کند.
شکل 1 یک گردش کار توصیه شده برای درخواست مجوز اعلان را نشان می دهد. مگر اینکه shouldShowRequestPermissionRationale()
true
را برگرداند، برنامه شما نیازی به نمایش صفحه میانی ندارد - صفحه ای که متن عنوان "دریافت اطلاعیه" را دارد.
از طرف دیگر، میتوانید درخواستی را تنظیم کنید تا بعد از اینکه به کاربران فرصت آشنایی با برنامه شما را دادید ظاهر شود. برای مثال، ممکن است تا بار سوم یا چهارم که کاربر برنامه شما را راه اندازی می کند، صبر کنید.
shouldShowRequestPermissionRationale()
true
برگرداند.درخواست مجوز در زمینه
هنگامی که مجوزهای اعلان را در برنامه خود درخواست می کنید، این کار را در زمینه درست انجام دهید، به طوری که به صراحت مشخص شود که اعلان ها برای چه مواردی استفاده می شوند و چرا کاربر باید آن را انتخاب کند. به عنوان مثال، یک برنامه ایمیل ممکن است گزینه هایی برای ارسال اعلان برای هر جدید داشته باشد. ایمیل یا فقط ایمیل هایی که کاربر تنها گیرنده آن است.
از این فرصت برای شفاف سازی اهداف خود استفاده کنید و کاربران به احتمال زیاد مجوز اعلان را به برنامه شما اعطا می کنند.
بررسی کنید که آیا برنامه شما می تواند اعلان ارسال کند یا خیر
قبل از اینکه برنامه شما اعلان ارسال کند، تأیید کنید که آیا کاربر اعلانها را برای برنامه شما فعال کرده است یا خیر. برای انجام این کار، areNotificationsEnabled()
را فراخوانی کنید.
از مجوز به طور مسئولانه استفاده کنید
پس از دریافت تأییدیه برای ارسال اعلان ها، به یاد داشته باشید که از مجوز به طور مسئولانه استفاده کنید. کاربران میتوانند تعداد اعلانهای روزانهای را که برنامه شما ارسال میکند، ببینند و در هر زمان میتوانند مجوز را لغو کنند .