Android نسخه ۱۳ (سطح میانای برنامهسازی کاربردی ۳۳) و بالاتر از اجازه زمان اجرا برای
ارسال اعلانهای غیرمعاف (ازجمله «سرویسهای پیشزمینهای» (FGS)) از
برنامه پشتیبانی میکند: POST_NOTIFICATIONS. این تغییر به کاربران کمک میکند روی اعلانهایی که برایشان مهمتر است تمرکز کنند.
اکیداً توصیه میکنیم که در اسرع وقت Android 13 یا بالاتر را هدف قرار دهید تا از کنترل و انعطافپذیری بیشتر این ویژگی بهرهمند شوید. اگر همچنان 12L (سطح API ۳۲) یا پایینتر را هدف قرار دهید، بخشی از انعطافپذیری خود را در درخواست اجازه در بافت عملکرد برنامهتان ازدست میدهید.
اعلام کردن اجازه
برای درخواست اجازه اعلان جدید از برنامهتان، برنامهتان را بهروز کنید تا Android 13 را هدف قرار دهد و فرایندی مشابه با درخواست سایر اجازههای زمان اجرا را تکمیل کنید، همانطور که در بخشهای زیر نشان داده شده است.
اجازهای که باید در فایل مانیفست برنامهتان اعلام کنید در قطعه کد زیر نشان داده شده است:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
قابلیتهای برنامه به انتخاب کاربر در کادر گفتگوی اجازهها بستگی دارد
در این کادر گفتگو، کاربران میتوانند کنشهای زیر را انجام دهند:
- اجازه دادن را روشن کنید
- اجازه ندادن را انتخاب کنید
- تند کشیدن از کادر گفتگو، بدون فشار دادن هیچکدام از دکمهها
بخشهای زیر توضیح میدهند که برنامه شما براساس کنشی که کاربر انجام میدهد چگونه رفتار میکند.
کاربر «مجاز کردن» را انتخاب میکند
اگر کاربر گزینه اجازه دادن را انتخاب کند، برنامهتان میتواند کارهای زیر را انجام دهد:
- ارسال اعلان. همه کانالهای اعلان مجاز هستند.
- اعلانهای مربوط به سرویسهای پیشزمینهای را پست کند. این اعلانها در کشوی اعلان نشان داده میشود.
کاربر «اجازه داده نشود» را انتخاب میکند
اگر کاربر گزینه مجاز نیست را انتخاب کند، برنامهتان نمیتواند اعلان ارسال کند، مگراینکه واجدشرایط معافیت باشد. همه کانالهای اعلان مسدود شدهاند، بهجز چند نقش خاص. این شبیه به رفتاری است که وقتی کاربر بهطور دستی همه اعلانهای برنامه شما را در تنظیمات سیستم خاموش میکند رخ میدهد.
کاربر تند بهسمت دیگری میکشد تا از کادر گفتگو خارج شود
اگر کاربر تند بهسمت دیگری بکشد و از کادر گفتگو خارج شود—یعنی هیچکدام از گزینههای مجاز است یا مجاز نیست را انتخاب نکند—وضعیت اجازه اعلان تغییر نمیکند.
تأثیر بر برنامههای جدیداً نصبشده
اگر کاربری برنامهتان را در دستگاهی نصب کند که Android نسخه ۱۳ یا بالاتر دارد، اعلانهای برنامهتان بهطور پیشفرض خاموش است. برنامه شما باید برای ارسال اعلانها منتظر بماند تا زمانی که اجازه جدید را درخواست کنید و کاربر آن اجازه را به برنامه شما اعطا کند.
زمانی که کادر گفتگوی اجازهها ظاهر میشود براساس نسخه کیت توسعه نرمافزار هدف برنامهتان است:
- اگر برنامه شما Android نسخه ۱۳ یا بالاتر را هدف قرار میدهد، برنامه شما کنترل کاملی بر زمان نمایش کادر گفتگوی اجازه دارد. از این فرصت استفاده کنید تا به کاربران توضیح دهید چرا برنامه به این اجازه نیاز دارد و آنها را تشویق کنید که این اجازه را اعطا کنند.
- اگر برنامه شما 12L (سطح API ۳۲) یا پایینتر را هدف قرار دهد، سیستم
اولین باری که برنامه شما فعالیتی را پساز ایجاد کانال اعلان شروع میکند، یا زمانی که برنامه شما فعالیتی را شروع میکند و
سپس اولین کانال اعلان خود را ایجاد میکند، کادر گفتگوی اجازه را نشان میدهد. این معمولاً هنگام راهاندازی برنامه است.
در برنامههای تکفعالیتی، مثل اکثر برنامههای Compose، سیستم وقتی
MainActivityشروع میشود، کادر گفتگو را نشان میدهد.
تأثیرات بر بهروزرسانیهای برنامههای موجود
برای بهحداقل رساندن اختلالات مربوط به اجازه اعلان، وقتی کاربر دستگاهش را به Android 13 یا بالاتر ارتقا میدهد، سیستم بهطور خودکار این اجازه را ازقبل به همه برنامههای واجدشرایط اعطا میکند. بهعبارت دیگر، این برنامهها میتوانند همچنان به کاربران اعلان ارسال کنند و کاربران پیامواره اجازه زمان اجرا را نمیبینند.
واجدشرایط بودن برای اعطای پیشاز موعد اجازه
برای اینکه برنامهتان واجدشرایط اعطای خودکار پیشاز موعد باشد، باید کانال اعلان موجود داشته باشد و اعلانهای آن بهطور صریح توسط کاربر در دستگاهی که Android نسخه 12L یا پایینتر را اجرا میکند غیرفعال نشده باشد.
اگر کاربر اعلانهای برنامهتان را در دستگاهی که نسخه 12L یا پایینتر را اجرا میکند غیرفعال کرده باشد، این رد کردن زمانی که دستگاه به Android 13 یا بالاتر ارتقا مییابد همچنان پابرجا میماند.
معافیتها
این بخش حاوی مجموعه اعلانها و برنامههایی است که از تغییر رفتار اجازه اعلان معاف هستند. در Android نسخه ۱۳ (سطح میانای برنامهسازی کاربردی ۳۳) یا بالاتر، اگر کاربر اجازه اعلان را رد کند، همچنان اعلانهای مربوط به سرویسهای پیشزمینهای را در مدیر وظیفه میبیند اما آنها را در کشوی اعلان نمیبیند.
جلسههای رسانه
اعلانهای مربوط به جلسههای رسانه از این تغییر رفتار مستثنی هستند.
برنامههای پیکربندیشده برای مدیریت خودکار تماسهای تلفنی
اگر برنامهتان خودش را برای مدیریت خودکار تماسهای تلفنی پیکربندی کند، برای اینکه برنامهتان اعلانهایی ارسال کند که از سبک اعلان Notification.CallStyle استفاده میکنند، به اجازه POST_NOTIFICATIONS نیاز ندارید.
اگر برنامه شما هریک از کارهای زیر را انجام دهد، سیستم آن را بهعنوان برنامهای درنظر میگیرد که خودش را برای مدیریت خودکار تماسهای تلفنی پیکربندی کرده است:
- اجازه
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کاربر اعلانها را هنگام نصب برنامه در دستگاهی که نسخه 12L یا پایینتر را اجرا میکند فعال نگه میدارد، سپس دستگاه به Android نسخه ۱۳ یا بالاتر ارتقا مییابد:
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 نسخه ۱۳ یا بالاتر ارتقا مییابد:
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
روالهای مطلوب
این بخش چند روش را شرح میدهد که میتوانید ازطریق آنها از اجازه اعلان جدید بهطور مؤثرتری در برنامهتان استفاده کنید.
بهروزرسانی نسخه کیت توسعه نرمافزار هدف برنامه
برای اینکه برنامهتان انعطافپذیری بیشتری در زمان نمایش کادر گفتگوی اجازه داشته باشد، برنامهتان را بهروز کنید تا Android نسخه ۱۳ یا بالاتر را هدف قرار دهد.
منتظر ماندن برای نمایش پیامواره اجازه اعلان
قبلاز اینکه از کاربران بخواهید اجازهای را اعطا کنند، اجازه دهید با برنامهتان آشنا شوند.
کاربران جدید ممکن است بخواهند برنامه را کاوش کنند و مزایای هر درخواست اعلان را بهطور مستقیم درک کنند. میتوانید درخواست اجازه را از کنش کاربر راهاندازی کنید. فهرست زیر چند نمونه از زمانهای مناسب برای نمایش پیامواره اجازه اعلان را نشان میدهد:
- کاربر روی دکمه «زنگ هشدار» تکضرب میزند.
- کاربر انتخاب میکند حساب رسانه اجتماعی فردی را دنبال کند.
- کاربر سفارشی برای ارسال غذا ارسال میکند.
شکل ۱ گردش کار توصیهشده برای درخواست اجازه اعلان را نشان میدهد. مگر اینکه shouldShowRequestPermissionRationale()
true را برگرداند، برنامهتان نیازی به نمایش صفحه میانی ندارد—صفحهای که
عنوان نوشتاری «مطلع شوید!» را دارد. در Compose، میتوانید Activity فعلی را با دسترسی به LocalContext.current و تبدیل آن به Activity پیدا کنید.
یا میتوانید درخواست را طوری تنظیم کنید که پساز اینکه به کاربران فرصت دادید با برنامهتان آشنا شوند، ظاهر شود. برای مثال، میتوانید تا سومین یا چهارمین باری که کاربر برنامهتان را راهاندازی میکند صبر کنید.
shouldShowRequestPermissionRationale() مقدار true را برگرداند.
درخواست اجازه
برای درخواست اجازه در Compose UI، از
میانای برنامهسازی کاربردی rememberLauncherForActivityResult() با قرارداد
ActivityResultContracts.RequestPermission() استفاده کنید.
قطعه کد زیر نشان میدهد که چگونه میتوان اجازه اعلان را در پاسخ به تعامل کاربر درخواست کرد:
کاتلین
val context = LocalContext.current
val permissionLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// Permission granted, you can now send notifications.
} else {
// Permission denied, handle accordingly.
}
}
// ... in your UI ...
Button(onClick = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}) {
Text("Enable Notifications")
}
درخواست اجازه در بافت
وقتی در برنامهتان اجازههای اعلان را درخواست میکنید، این کار را در بافت صحیح انجام دهید تا بهطور صریح مشخص باشد که اعلانها برای چه چیزی استفاده میشوند و چرا کاربر باید موافقت کند. برای مثال، یک برنامه ایمیل ممکن است گزینههایی برای ارسال اعلان برای هر ایمیل جدید یا فقط ایمیلهایی که کاربر تنها گیرنده آن است داشته باشد.
از این فرصت برای شفافسازی اهدافتان استفاده کنید تا احتمال اینکه کاربران اجازه اعلان را به برنامهتان اعطا کنند بیشتر شود.
بررسی کنید برنامهتان میتواند اعلان ارسال کند یا نه
قبلاز اینکه برنامهتان اعلانی ارسال کند، مطمئن شوید که کاربر اعلانها را برای برنامهتان فعال کرده باشد. برای انجام این کار، areNotificationsEnabled() را فراخوانی کنید.
از اجازه مسئولانه استفاده کنید
پساز دریافت تأییدیه برای ارسال اعلان، بهخاطر داشته باشید که از این اجازه بهطور مسئولانه استفاده کنید. کاربران میتوانند تعداد اعلانهای روزانهای را که برنامهتان ارسال میکند ببینند و هرزمان بخواهند میتوانند اجازه را لغو کنند.