اندروید ۱۳ (سطح API ۳۳) و بالاتر از یک مجوز زمان اجرا برای ارسال اعلانهای غیرمعاف (از جمله سرویسهای پیشزمینه (FGS)) از یک برنامه پشتیبانی میکند: POST_NOTIFICATIONS . این تغییر به کاربران کمک میکند تا روی اعلانهایی که برایشان مهمتر است تمرکز کنند.
اکیداً توصیه میکنیم که در اسرع وقت اندروید ۱۳ یا بالاتر را هدف قرار دهید تا از کنترل و انعطافپذیری بیشتر این ویژگی بهرهمند شوید. اگر همچنان از نسخه ۱۲L (سطح API 32) یا پایینتر استفاده کنید، در زمینه درخواست مجوز در زمینه عملکرد برنامه خود، انعطافپذیری خود را از دست میدهید.
اعلام مجوز
برای درخواست مجوز اعلان جدید از برنامه خود، برنامه خود را برای اندروید ۱۳ بهروزرسانی کنید و فرآیندی مشابه با درخواست سایر مجوزهای زمان اجرا را ، همانطور که در بخشهای بعدی نشان داده شده است، انجام دهید.
مجوزی که باید در فایل مانیفست برنامه خود اعلام کنید، در قطعه کد زیر آمده است:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
قابلیتهای برنامه به انتخاب کاربر در کادر محاورهای مجوزها بستگی دارد
در این پنجره گفتگو، کاربران میتوانند اقدامات زیر را انجام دهند:
- انتخاب اجازه
- انتخاب کنید اجازه ندهید
- بدون فشار دادن هیچ یک از دکمهها، با کشیدن انگشت از پنجره به بیرون بروید
بخشهای بعدی نحوه رفتار برنامه شما را بر اساس عملی که کاربر انجام میدهد، شرح میدهند.
کاربر "مجاز" را انتخاب میکند
اگر کاربر گزینه اجازه دادن را انتخاب کند، برنامه شما میتواند موارد زیر را انجام دهد:
- ارسال اعلانها. همه کانالهای اعلان مجاز هستند.
- اعلانهای مربوط به سرویسهای پیشزمینه را ارسال کنید. این اعلانها در کشوی اعلانها ظاهر میشوند.
کاربر گزینه «اجازه ندهید» را انتخاب میکند
اگر کاربر گزینه «اجازه ندهید» را انتخاب کند، برنامه شما نمیتواند اعلان ارسال کند، مگر اینکه واجد شرایط معافیت باشد. همه کانالهای اعلان مسدود میشوند، به جز چند نقش خاص. این مشابه رفتاری است که وقتی کاربر به صورت دستی همه اعلانهای برنامه شما را در تنظیمات سیستم خاموش میکند، رخ میدهد.
احتیاط: اگر برنامه شما مصرف ۱۲ لیتر یا کمتر را هدف قرار داده و کاربر حتی یک بار روی گزینه «اجازه ندهید» ضربه بزند، دیگر از او خواسته نمیشود تا زمانی که یکی از موارد زیر رخ دهد:
- کاربر برنامه شما را حذف و دوباره نصب میکند.
- شما برنامه خود را برای هدف قرار دادن اندروید ۱۳ یا بالاتر بهروزرسانی میکنید.
کاربر با کشیدن انگشت خود از پنجره محاورهای خارج میشود
اگر کاربر با کشیدن انگشت خود از پنجره خارج شود - یعنی هیچ یک از گزینههای اجازه دادن یا ندادن را انتخاب نکند - وضعیت مجوز اعلان تغییر نمیکند.
تأثیرات روی برنامههای تازه نصبشده
اگر کاربری برنامه شما را روی دستگاهی که اندروید ۱۳ یا بالاتر دارد نصب کند، اعلانهای برنامه شما به طور پیشفرض خاموش هستند . برنامه شما باید منتظر بماند تا زمانی که شما درخواست مجوز جدید را بدهید و کاربر آن مجوز را به برنامه شما اعطا کند، اعلانها را ارسال کند.
زمانی که کادر محاورهای مجوزها ظاهر میشود، به نسخه SDK هدف برنامه شما بستگی دارد:
- اگر برنامه شما برای اندروید ۱۳ یا بالاتر طراحی شده است، برنامه شما کنترل کاملی بر زمان نمایش کادر محاورهای مجوزها دارد. از این فرصت استفاده کنید تا به کاربران توضیح دهید که چرا برنامه به این مجوز نیاز دارد و آنها را به اعطای آن تشویق کنید.
- اگر برنامه شما سطح دسترسی ۱۲L (سطح API 32) یا پایینتر را هدف قرار دهد، سیستم اولین باری که برنامه شما پس از ایجاد کانال اعلان، یک فعالیت را شروع میکند، یا زمانی که برنامه شما یک فعالیت را شروع میکند و سپس اولین کانال اعلان خود را ایجاد میکند، پنجره مجوز را نشان میدهد. این معمولاً در هنگام راهاندازی برنامه است.
تأثیرات بر بهروزرسانیهای برنامههای موجود
برای به حداقل رساندن اختلالات مرتبط با مجوز اعلان، سیستم به طور خودکار وقتی کاربر دستگاه خود را به اندروید ۱۳ یا بالاتر ارتقا میدهد، به همه برنامههای واجد شرایط از قبل مجوز میدهد. به عبارت دیگر، این برنامهها میتوانند به ارسال اعلان به کاربران ادامه دهند و کاربران هیچ درخواست مجوزی در زمان اجرا نمیبینند.
واجد شرایط بودن برای دریافت مجوز پیش از اعطای مجوز
برای اینکه برنامه شما واجد شرایط دریافت پیشپرداخت خودکار باشد، باید یک کانال اعلان موجود داشته باشد و اعلانهای آن به صراحت توسط کاربر در دستگاهی که ۱۲ لیتر یا کمتر اجرا میکند غیرفعال نشده باشد.
اگر کاربر اعلانهای برنامه شما را در دستگاهی که اندروید ۱۲L یا پایینتر دارد غیرفعال کرده باشد، این عدم دریافت اعلانها حتی پس از ارتقاء دستگاه به اندروید ۱۳ یا بالاتر نیز ادامه خواهد داشت.
معافیتها
این بخش شامل مجموعهای از اعلانها و برنامههایی است که از تغییر رفتار مجوز اعلان معاف هستند. در اندروید ۱۳ (سطح API ۳۳) یا بالاتر، اگر کاربر مجوز اعلان را رد کند، همچنان اعلانهای مربوط به سرویسهای پیشزمینه را در Task Manager مشاهده میکند اما آنها را در کشوی اعلانها نمیبیند.
جلسات رسانهای
اعلانهای مربوط به جلسات رسانهای از این تغییر رفتار مستثنی هستند.
برنامههایی که برای مدیریت خودکار تماسهای تلفنی پیکربندی شدهاند
اگر برنامه شما طوری پیکربندی شده است که تماسهای تلفنی را به صورت خودکار مدیریت کند، برای ارسال اعلانهایی که از سبک اعلان Notification.CallStyle استفاده میکنند، نیازی به مجوز POST_NOTIFICATIONS ندارید.
اگر برنامه شما هر یک از موارد زیر را انجام دهد، سیستم آن را طوری در نظر میگیرد که برای مدیریت خودکار تماسهای تلفنی پیکربندی شده باشد:
- مجوز
MANAGE_OWN_CALLSرا اعلام میکند. - رابط
ConnectionServiceرا پیادهسازی میکند. - با فراخوانی تابع
registerPhoneAccount()در اپراتور مخابراتی دستگاه ثبت میشود.
برنامه خود را آزمایش کنید
شما میتوانید ارزیابی کنید که چگونه مجوز اعلانها، برنامه شما را هنگام اولین استفاده در دستگاهی که اندروید ۱۳ یا بالاتر را اجرا میکند، تحت تأثیر قرار میدهد. مجموعه دستورات Android Debug Bridge (ADB) که در زیر آمده است، به شما امکان میدهد رایجترین توالیهای انتخابهای کاربر و ارتقاء دستگاه را بدون نیاز به تنظیم مجدد دستگاه آزمایشی خود شبیهسازی کنید:
برنامه به تازگی روی دستگاهی با اندروید ۱۳ یا بالاتر نصب شده است:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONSadb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-setadb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixedکاربر وقتی برنامه را روی دستگاهی با سیستم عامل ۱۲L یا پایینتر نصب میکند، اعلانها را فعال نگه میدارد، سپس دستگاه به اندروید ۱۳ یا بالاتر ارتقا مییابد:
adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONSadb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-setadb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixedکاربر وقتی برنامه روی دستگاهی با سیستم عامل ۱۲L یا پایینتر نصب میشود، اعلانها را به صورت دستی غیرفعال میکند، سپس دستگاه به اندروید ۱۳ یا بالاتر ارتقا مییابد:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONSadb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-setadb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
بهترین شیوهها
این بخش چندین روش را شرح میدهد که میتوانید از مجوز اعلان جدید به طور مؤثر در برنامه خود استفاده کنید.
نسخه SDK هدف برنامه خود را بهروزرسانی کنید
برای اینکه برنامهتان در مورد زمان نمایش کادر مجوزها انعطافپذیری بیشتری داشته باشد، برنامهتان را بهروزرسانی کنید تا با اندروید ۱۳ یا بالاتر سازگار باشد.
منتظر بمانید تا اعلان اجازه نمایش داده شود
قبل از اینکه از کاربران بخواهید هرگونه مجوزی را اعطا کنند، اجازه دهید با برنامه شما آشنا شوند.
کاربران جدید ممکن است بخواهند برنامه را بررسی کنند و از مزایای هر درخواست اعلان جداگانه مطلع شوند. میتوانید از طریق یک اقدام کاربر ، درخواست مجوز را فعال کنید . لیست زیر چندین مثال از زمان مناسب برای نمایش درخواست مجوز اعلان را نشان میدهد:
- کاربر دکمهی «زنگ هشدار» را لمس میکند.
- کاربر تصمیم میگیرد حساب کاربری یک فرد در شبکههای اجتماعی را دنبال کند.
- کاربر سفارش تحویل غذا را ارسال میکند.
شکل ۱ گردش کار پیشنهادی برای درخواست مجوز اعلان را نشان میدهد. مگر اینکه shouldShowRequestPermissionRationale() true را برگرداند، برنامه شما نیازی به نمایش صفحه میانی ندارد - صفحهای که عنوان آن "Get notification!" است.
از طرف دیگر، میتوانید درخواستی را تنظیم کنید که پس از اینکه به کاربران فرصتی برای آشنایی با برنامه خود دادید، نمایش داده شود. برای مثال، میتوانید تا سومین یا چهارمین باری که کاربر برنامه شما را اجرا میکند، صبر کنید.
shouldShowRequestPermissionRationale() true برگرداند.درخواست مجوز در متن
وقتی در برنامه خود درخواست مجوز اعلان میکنید، این کار را در متن صحیح انجام دهید، به طوری که به صراحت مشخص شود که اعلانها برای چه چیزی استفاده میشوند و چرا کاربر باید آنها را انتخاب کند. برای مثال، یک برنامه ایمیل ممکن است گزینههایی برای ارسال اعلان برای هر ایمیل جدید یا فقط ایمیلهایی که کاربر تنها گیرنده آنهاست، داشته باشد.
از این فرصت برای شفافسازی اهداف خود استفاده کنید، در این صورت احتمال بیشتری وجود دارد که کاربران مجوز اعلان را به برنامه شما اعطا کنند.
بررسی کنید که آیا برنامه شما میتواند اعلان ارسال کند یا خیر
قبل از اینکه برنامه شما اعلانی ارسال کند، تأیید کنید که آیا کاربر اعلانها را برای برنامه شما فعال کرده است یا خیر. برای انجام این کار، تابع areNotificationsEnabled() را فراخوانی کنید.
از مجوز با مسئولیتپذیری استفاده کنید
پس از دریافت تأیید ارسال اعلانها، به یاد داشته باشید که از این مجوز با مسئولیتپذیری استفاده کنید. کاربران میتوانند تعداد اعلانهای روزانهای را که برنامه شما ارسال میکند، ببینند و میتوانند در هر زمان این مجوز را لغو کنند .