Bildirim çalışma zamanında istenen izin

Android 13 (API düzeyi 33) ve sonraki sürümler, bir uygulamadan muaf olmayan (Ön Plan Hizmeti (FGS)) bildirimler göndermek için bir çalışma zamanı iznini 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 denetim ve esneklikten yararlanmak için mümkün olan en kısa sürede Android 13 veya sonraki bir sürümü hedeflemenizi önemle tavsiye ederiz. 12L (API düzeyi 32) veya daha düşük sürümleri hedeflemeye devam ederseniz uygulamanızın işlevselliği bağlamında izin istediğinizde biraz esneklik kaybedersiniz.

İzni beyan edin

Uygulamanızdan yeni bildirim iznini istemek için uygulamanızı Android 13'ü hedefleyecek şekilde güncelleyin ve aşağıdaki bölümlerde gösterilen diğer çalışma zamanında istenen izinleri isteme işlemine benzer bir işlemi tamamlayın.

Uygulamanızın manifest dosyasında beyan etmeniz gereken izin, aşağıdaki kod snippet'inde görünür:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Uygulama özellikleri, izinler iletişim kutusundaki kullanıcı seçimine 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 gerçekleştirdiği işleme bağlı olarak 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 aşağıdakileri yapabilir:

Kullanıcı "İzin verme"yi seçer

Kullanıcı izin verme seçeneğini belirlerse uygulamanız muafiyet için uygun olmadığı sürece bildirim gönderemez. Birkaç belirli rol dışındaki tüm bildirim kanalları engellenir. Bu durum, kullanıcı sistem ayarlarında uygulamanıza ait tüm bildirimleri manuel olarak kapattığında ortaya çıkan davranışa benzer.

Dikkat: Uygulamanız 12 L veya daha düşük bir değeri hedefliyorsa ve kullanıcı yalnızca bir kez bile İzin verme'ye dokunursa aşağıdakilerden biri gerçekleşene kadar kullanıcıdan tekrar sorulmaz:

  • Kullanıcı uygulamanızı kaldırıp yeniden yükler.
  • Uygulamanızı, Android 13 veya sonraki bir sürümü hedefleyecek şekilde güncellemeniz gerekir.

Kullanıcı hızlıca iletişim kutusunu kapatarak uzaklaştırıyor

Kullanıcı, iletişim kutusunu hızlıca kaydırırsa (izin ver veya izin verme'yi seçmez) bildirim izninin durumu değişmez.

Yeni yüklenen uygulamalar üzerindeki efektler

Bir kullanıcı Android 13 veya sonraki sürümleri çalıştıran bir cihaza uygulamanızı yüklerse uygulamanızın bildirimleri varsayılan olarak kapalıdır. Uygulamanızın, bildirim göndermek için siz yeni izin isteyene ve kullanıcı bu izni uygulamanıza verene kadar beklemesi gerekir.

İzinler iletişim kutusunun gösterileceği saat, uygulamanızın hedef SDK sürümüne bağlıdır:

  • Uygulamanız Android 13 veya sonraki bir sürümü hedefliyorsa izin iletişim kutusunun ne zaman gösterileceği tamamen kontrolüne sahiptir. Bu fırsatı kullanarak kullanıcılara uygulamanın neden bu izne ihtiyacı olduğunu açıklayın ve onları izni vermeye teşvik edin.
  • Uygulamanız 12L (API düzeyi 32) veya daha düşük bir sürümü hedefliyorsa uygulamanız bir bildirim kanalı oluşturmanızdan sonra ilk kez etkinlik başlattığında ya da uygulamanız bir etkinlik başlatıp ilk bildirim kanalını oluşturduğunda sistem izin iletişim kutusunu gösterir. Bu sorun genellikle uygulama başlatılırken gerçekleşir.

Mevcut uygulamalara yapılan güncellemeler üzerindeki etkiler

Kullanıcı cihazını Android 13 veya sonraki bir sürüme yükselttiğinde sistem, bildirim izniyle ilişkili kesintileri en aza indirmek için uygun uygulamalara yönelik izni otomatik olarak önceden verir. Başka bir deyişle, bu uygulamalar kullanıcılara bildirim göndermeye devam edebilir ve kullanıcılar çalışma zamanında izin istemi görmez.

Ön izin için uygunluk

Uygulamanızın otomatik önceden verme işlemine uygun olması için uygulamanızın mevcut bir bildirim kanalının olması ve 12 L veya daha düşük çözünürlüğe sahip bir cihazda kullanıcı tarafından bildirimlerinin açıkça devre dışı bırakılmaması gerekir.

Kullanıcı 12 L veya daha düşük kapasiteli bir cihazda uygulamanızla ilgili bildirimleri devre dışı bıraktıysa cihaz Android 13 veya sonraki bir sürüme yükseltildiğinde bu ret devam eder.

Muafiyetler

Bu bölümde, bildirim izni davranışı değişikliğinden muaf tutulan bildirimler ve uygulamalar yer alır. Android 13 (API düzeyi 33) veya sonraki sürümlerde kullanıcı, bildirim iznini reddederse Görev Yöneticisi'nde ön plan hizmetleriyle ilgili bildirimleri görmeye devam eder ancak bildirim çekmecesinde görmez.

Medya oturumları

Medya oturumları ile ilgili bildirimler bu davranış değişikliğinden muaftır.

Telefon çağrılarını kendi kendine yönetecek şekilde yapılandırılan uygulamalar

Uygulamanız, telefon çağrılarını kendi kendine yönetecek şekilde kendisini yapılandırıyorsa uygulamanızın Notification.CallStyle bildirim stilini kullanan bildirimler göndermesi için POST_NOTIFICATIONS iznine ihtiyacınız yoktur.

Aşağıdakilerin her birini yapması durumunda sistem, uygulamanızı telefon çağrılarını kendi kendine yönetecek şekilde yapılandırmış olarak kabul eder:

  1. MANAGE_OWN_CALLS iznini beyan eder.
  2. ConnectionService arayüzünü uygular.
  3. registerPhoneAccount() numaralı telefonu arayarak cihazın telekomünikasyon sağlayıcısına kaydolur.

Uygulamanızı test etme

Uygulamanızı, Android 13 veya sonraki sürümleri çalıştıran bir cihazda ilk kez kullanıldığında bildirim izninin nasıl etkilediğini değerlendirebilirsiniz. Aşağıdaki Android Debug Bridge (ADB) komutları, test cihazınızı sıfırlamaya gerek kalmadan en yaygın kullanıcı seçimlerini ve cihaz yükseltmelerini simüle etmenizi sağlar:

  • Uygulama, Android 13 veya sonraki sürümleri çalıştıran bir cihaza yeni yüklendiğinde:

    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 12 L veya daha düşük performansa sahip bir cihaza yüklendiğinde bildirimleri etkin tutar, ardından cihaz Android 13 veya sonraki bir sürüme yükseltilirse:

    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 12 L veya daha düşük performansa sahip bir cihaza yüklendiğinde kullanıcı, bildirimleri manuel olarak devre dışı bırakır ve ardından cihaz Android 13 veya sonraki bir sürüme yükseltilirse:

    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 kullanmanın çeşitli yolları açıklanmaktadır.

Uygulamanızın hedef SDK sürümünü güncelleyin

İzin iletişim kutusunun ne zaman gösterileceği konusunda uygulamanıza daha fazla esneklik kazandırmak için uygulamanızı Android 13 veya sonraki sürümleri hedefleyecek şekilde güncelleyin.

Bildirim izin isteminin gösterilmesini bekle

Kullanıcılardan herhangi bir izin vermelerini istemeden önce uygulamanızı tanımalarına olanak tanıyın.

Yeni kullanıcılar uygulamayı keşfetmek ve her bir bildirim isteğinin faydalarını ilk elden öğrenmek isteyebilir. Bir kullanıcı işleminden izin istemini tetikleyebilirsiniz. Aşağıdaki listede, bildirim izin istemini göstermenin uygun olduğu durumlara dair birkaç örnek gösterilmektedir:

  • Kullanıcı, "uyarı zili" düğmesine dokunur.
  • Kullanıcı, başka bir kişinin sosyal medya hesabını takip etmeyi seçer.
  • Kullanıcı yemek siparişi gönderir.

Şekil 1'de bildirim izni istemek için önerilen bir iş akışı gösterilmektedir. shouldShowRequestPermissionRationale() true değerini döndürmezse uygulamanızın ortadaki ekranı, yani "Bildirim alın" başlık metnini içeren orta ekranı görüntülemesi gerekmez.

Alternatif olarak, kullanıcılara uygulamanızı tanımaları için bir şans verdikten sonra görünecek bir istek de ayarlayabilirsiniz. Örneğin, kullanıcının uygulamanızı üçüncü veya dördüncü kez açmasını bekleyebilirsiniz.

Kullanıcı oturum açtıktan sonra gezi güncellemeleriyle ilgili bildirim alması için bir davetiye sunulur. Kullanıcı varım düğmesine bastıktan sonra uygulama, yeni izni ister. Bu da sistem iletişim kutusunun görünmesini sağlar
Şekil 1. Bildirim izni istemek için kullanıcı odaklı önerilen bir iş akışı. Orta ekran yalnızca shouldShowRequestPermissionRationale(), true değerini döndürürse gereklidir.

İzni bağlam içinde isteyin

Uygulamanızda bildirim izinleri istediğinizde bunu doğru bağlamda yapın. Böylece bildirimlerin ne için kullanıldığı ve kullanıcının uygulamayı neden etkinleştirmesi gerektiği açıkça anlaşılır. Örneğin, bir e-posta uygulamasında her yeni e-posta veya yalnızca kullanıcının tek alıcı olduğu e-postalar için bildirim gönderme seçenekleri bulunabilir.

Niyetlerinizi şeffaf bir şekilde açıklamak için bu fırsatı kullanın. Böylece kullanıcıların uygulamanıza bildirim izni verme olasılığı artar.

Uygulamanızın bildirim gönderip gönderemeyeceğini kontrol etme

Uygulamanız bildirim göndermeden önce, kullanıcının uygulamanız için bildirimleri etkinleştirip etkinleştirmediğini onaylayın. Bunu yapmak için areNotificationsEnabled() numaralı telefonu arayın.

İzni sorumlu bir şekilde kullanın

Bildirim göndermek için onay aldıktan sonra 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 istedikleri zaman bu izni iptal edebilirler.