Android 13 (API düzeyi 33) ve sonraki sürümler, bir uygulamadan muaf olmayan (ön plan hizmetleri (FGS) dahil) bildirimler göndermek için çalışma zamanında istenen izinleri destekler: POST_NOTIFICATIONS. Bu değişiklik, kullanıcıların kendileri için en önemli bildirimlere odaklanmasına yardımcı olur.
Bu özelliğin sunduğu ek kontrol ve esneklikten yararlanmak için en kısa sürede Android 13 veya sonraki sürümleri hedeflemenizi önemle tavsiye ederiz. 12L (API düzeyi 32) veya daha eski sürümleri hedeflemeye devam ederseniz uygulamanızın işlevi bağlamında izin isteme konusunda esnekliğin bir kısmını kaybedersiniz.
İzni beyan etme
Uygulamanızdan yeni bildirim izni istemek için uygulamanızı Android 13'ü hedefleyecek şekilde güncelleyin ve aşağıdaki bölümlerde gösterildiği gibi çalışma zamanında istenen diğer izinleri istemeye benzer bir süreci tamamlayın.
Uygulamanızın manifest dosyasında beyan etmeniz gereken izin, aşağıdaki kod snippet'inde gösterilmektedir:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Uygulama özellikleri, izin iletişim kutusundaki kullanıcı tercihine bağlıdır.
Bu iletişim kutusunda kullanıcılar aşağıdaki işlemleri yapabilir:
- İzin ver'i seçin.
- İzin verme'yi seçin.
- İki düğmeye de basmadan iletişim kutusunu kaydırarak kapatın.
Aşağıdaki bölümlerde, kullanıcının yaptığı işleme göre uygulamanızın nasıl davrandığı açıklanmaktadır.
Kullanıcı "İzin ver"i seçer.
Kullanıcı izin ver seçeneğini belirlerse uygulamanız şunları yapabilir:
- Bildirim gönderme Tüm bildirim kanallarına izin verilir.
- Ön plan hizmetleriyle ilgili bildirimler yayınlama Bu bildirimler bildirim çekmecesinde görünür.
Kullanıcı "İzin verme"yi seçerse
Kullanıcı izin verme seçeneğini belirlerse uygulamanız, muafiyet koşullarını karşılamadığı sürece bildirim gönderemez. Belirli birkaç rol dışında tüm bildirim kanalları engellenir. Bu, kullanıcının sistem ayarlarında uygulamanız için tüm bildirimleri manuel olarak devre dışı bırakmasıyla benzer bir davranıştır.
Kullanıcı, iletişim kutusunu kaydırarak kapatır.
Kullanıcı, iletişim kutusunu kaydırarak kapatırsa (yani izin ver veya izin verme seçeneklerinden birini belirlemezse) bildirim izninin durumu değişmez.
Yeni yüklenen uygulamalara etkileri
Bir kullanıcı, uygulamanızı Android 13 veya sonraki sürümleri çalıştıran bir cihaza yüklerse uygulamanızın bildirimleri varsayılan olarak kapalıdır. Uygulamanız, yeni izin isteğinde bulunup kullanıcı bu izni uygulamanıza verene kadar bildirim göndermeyi beklemelidir.
İzin iletişim kutusunun gösterilme zamanı, uygulamanızın hedef SDK sürümüne bağlıdır:
- Uygulamanız Android 13 veya sonraki sürümleri hedefliyorsa izin iletişim kutusunun ne zaman gösterileceği konusunda tam kontrole sahiptir. Bu fırsatı değerlendirerek uygulamanın neden bu izne ihtiyacı olduğunu kullanıcılara açıklayın ve izin vermelerini teşvik edin.
- Uygulamanız 12L (API düzeyi 32) veya daha önceki sürümleri hedefliyorsa sistem, uygulamanız bir bildirim kanalı oluşturduktan sonra ilk kez bir etkinlik başlattığında veya uygulamanız bir etkinlik başlattıktan sonra ilk bildirim kanalını oluşturduğunda izin iletişim kutusunu gösterir. Bu genellikle uygulama başlatıldığında gerçekleşir.
Çoğu Compose uygulaması gibi tek etkinlikli uygulamalarda sistem,
MainActivitybaşladığında iletişim kutusunu gösterir.
Mevcut uygulamalarda yapılan güncellemeler üzerindeki etkileri
Sistem, bildirim izniyle ilgili kesintileri en aza indirmek için kullanıcı cihazını Android 13 veya sonraki bir sürüme yükselttiğinde tüm uygun uygulamalara otomatik olarak önceden izin verir. Diğer bir deyişle, bu uygulamalar kullanıcılara bildirim göndermeye devam edebilir ve kullanıcılar çalışma zamanında istenen izin istemi görmez.
İzin önceden verme için uygunluk
Uygulamanızın otomatik ön izin için uygun olması için mevcut bir bildirim kanalına sahip olması ve bildirimlerinin 12L veya daha eski bir sürümü çalıştıran bir cihazda kullanıcı tarafından açıkça devre dışı bırakılmamış olması gerekir.
Kullanıcı, 12L veya daha eski bir sürümün yüklü olduğu bir cihazda uygulamanızın bildirimlerini devre dışı bıraktıysa cihaz Android 13 veya sonraki bir sürüme yükseltildiğinde bu ret geçerliliğini korur.
Muafiyetler
Bu bölümde, bildirim izni davranış değişikliğinden muaf olan bildirimler ve uygulamalar yer alır. Android 13 (API düzeyi 33) veya sonraki sürümlerde, kullanıcı bildirim iznini reddederse ön plan hizmetleriyle ilgili bildirimleri Görev Yöneticisi'nde görmeye devam eder ancak bildirim çekmecesinde görmez.
Medya oturumları
Medya oturumlarıyla ilgili bildirimler bu davranış değişikliğinden muaftır.
Telefon aramalarını kendi kendine yönetecek şekilde yapılandırılmış uygulamalar
Uygulamanız telefon aramalarını kendi kendine yönetecek şekilde yapılandırılmışsa uygulamanızın Notification.CallStyle bildirim stilini kullanan bildirimler göndermesi için POST_NOTIFICATIONS iznine ihtiyacınız yoktur.
Sistem, uygulamanızın telefon aramalarını kendi kendine yönetmek için yapılandırıldığını kabul ederse aşağıdakilerin her birini yapar:
MANAGE_OWN_CALLSiznini beyan eder.ConnectionServicearayüzünü uygular.registerPhoneAccount()numarasını arayarak cihazın telekom sağlayıcısına kaydolur.
Uygulamanızı test etme
Bildirim izninin, Android 13 veya sonraki sürümleri çalıştıran bir cihazda ilk kez kullanıldığında uygulamanızı nasıl etkilediğini değerlendirebilirsiniz. Aşağıdaki Android Debug Bridge (ADB) komut grupları, test cihazınızı sıfırlamanıza gerek kalmadan en yaygın kullanıcı seçimlerini ve cihaz yükseltme işlemlerini simüle etmenize olanak tanır:
Uygulama, Android 13 veya sonraki sürümlerin yüklü olduğu bir cihaza yeni yüklenmişse:
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-fixedKullanıcı, uygulama 12L veya daha eski bir sürümü çalıştıran bir cihaza yüklendiğinde bildirimleri etkin tutar, ardından cihaz Android 13 veya sonraki bir sürüme yükseltilir:
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-fixedUygulama, 12L veya daha eski bir sürümün yüklü olduğu bir cihaza yüklendiğinde kullanıcı bildirimleri manuel olarak devre dışı bırakır, ardından cihaz Android 13 veya sonraki bir sürüme yükseltilir:
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
En iyi uygulamalar
Bu bölümde, yeni bildirim iznini uygulamanızda en etkili şekilde kullanabileceğiniz çeşitli yöntemler açıklanmaktadır.
Uygulamanızın hedef SDK sürümünü güncelleme
Uygulamanızın izin iletişim kutusunun ne zaman görüneceği konusunda daha fazla esnekliğe sahip olması için uygulamanızı Android 13 veya sonraki sürümleri hedefleyecek şekilde güncelleyin.
Bildirim izni istemini göstermeyi bekleme
Kullanıcılardan izin vermelerini istemeden önce uygulamanızı tanımalarını sağlayın.
Yeni kullanıcılar uygulamayı keşfetmek ve her bir bildirim isteğinin avantajlarını ilk elden görmek isteyebilir. Kullanıcı işleminden izin istemini tetikleyebilirsiniz. Aşağıdaki listede, bildirim izni istemini göstermek için uygun olan birkaç örnek verilmiştir:
- Kullanıcı, "uyarı zili" düğmesine dokunuyor.
- Kullanıcı, birinin sosyal medya hesabını takip etmeyi seçer.
- Kullanıcı, yemek siparişi verir.
Şekil 1'de, bildirim izni istemek için önerilen iş akışı gösterilmektedir. shouldShowRequestPermissionRationale(), true değerini döndürmediği sürece uygulamanızın, başlık metni "Bildirim alın!" olan ortadaki ekranı göstermesi gerekmez. Compose'da, LocalContext.current öğesine erişip Activity öğesine dönüştürerek mevcut Activity öğesini bulabilirsiniz.
Alternatif olarak, kullanıcılara uygulamanızı tanıma fırsatı verdikten sonra bir istek gösterilmesini ayarlayabilirsiniz. Örneğin, kullanıcının uygulamanızı üçüncü veya dördüncü kez başlatmasını bekleyebilirsiniz.
shouldShowRequestPermissionRationale(), true değerini döndürürse gereklidir.
İzin isteyin
Compose kullanıcı arayüzünüzde izin istemek için ActivityResultContracts.RequestPermission() sözleşmesiyle rememberLauncherForActivityResult() API'sini kullanın.
Aşağıdaki snippet'te, bir kullanıcı etkileşimine yanıt olarak bildirim izninin nasıl isteneceğini görebilirsiniz:
Kotlin
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")
}
İzni bağlam içinde isteme
Uygulamanızda bildirim izni isterken bunu doğru bağlamda yapın. Böylece bildirimlerin ne için kullanıldığı ve kullanıcının neden kaydolması gerektiği açıkça anlaşılır. Örneğin, bir e-posta uygulamasında her yeni e-posta için veya yalnızca kullanıcının tek alıcı olduğu e-postalar için bildirim gönderme seçenekleri bulunabilir.
Bu fırsatı niyetinizi şeffaf bir şekilde açıklamak için kullanırsanız kullanıcıların uygulamanıza bildirim izni verme olasılığı artar.
Uygulamanızın bildirim gönderip gönderemediğini kontrol etme
Uygulamanız bildirim göndermeden önce kullanıcının uygulamanız için bildirimleri etkinleştirip etkinleştirmediğini kontrol edin. Bunun için areNotificationsEnabled() yöntemini çağırın.
İzni sorumlu bir şekilde kullanma
Bildirim gönderme izni aldıktan sonra bu izni sorumlu bir şekilde kullanmayı unutmayın. Kullanıcılar, uygulamanızın gönderdiği günlük bildirim sayısını görebilir ve izni istedikleri zaman iptal edebilirler.