Bildirim çalışma zamanında istenen izin

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:

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:

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, MainActivity baş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:

  1. MANAGE_OWN_CALLS iznini beyan eder.
  2. ConnectionService arayüzünü uygular.
  3. 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-fixed
    
  • Kullanı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-fixed
    
  • Uygulama, 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.

Kullanıcı oturum açtıktan sonra gezi güncellemeleriyle ilgili bildirim alma daveti gösterilir. Kullanıcı &quot;Kabul ediyorum&quot; düğmesine bastıktan sonra uygulama yeni izin ister. Bu da sistem iletişim kutusunun görünmesine neden olur.
Şekil 1. Bildirim izni istemek için önerilen kullanıcı odaklı iş akışı. Orta ekran yalnızca 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.