Android 13 (API düzeyi 33) ve sonraki sürümler, şu uygulamalardan muaf olmayan (Ön Plan Hizmeti (FGS)) bildirimler göndermek için çalışma zamanı iznini destekler: POST_NOTIFICATIONS
.
Bu değişiklik, kullanıcıların kendileri için en önemli bildirimlere odaklanmasını sağlar.
Bu özelliğin sunduğu ek denetim ve esneklikten yararlanmak için 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şlevi bağlamında izin isteyerek biraz esnekliği kaybedersiniz.
İzni beyan et
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, diğer çalışma zamanı izinlerini isteme işlemine benzer bir işlem 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 kutusunda kullanıcı seçimine 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üğmeden birine basmadan iletişim kutusundan dışarı kaydırma
Aşağıdaki bölümlerde, kullanıcının gerçekleştirdiği işleme göre uygulamanızın davranışı açıklanmaktadır.
Kullanıcı "İzin Ver"i seçer
Kullanıcı izin ver seçeneğini belirlerse uygulamanız aşağıdakileri yapabilir:
- Bildirim gönder'e dokunun. Tüm bildirim kanallarına izin verilir.
- Ön plan hizmetleriyle ilgili bildirimler yayınlayın. Bu bildirimler bildirim çekmecesinde görünür.
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. Belirli birkaç 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 12L veya daha düşük bir değeri hedefliyorsa ve kullanıcı yalnızca bir kez bile olsa İ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üncelleyin.
Kullanıcı iletişim kutusunu kaydırarak kapatıyor
Kullanıcı, iletişim kutusunu kaydırarak hızla uzaklaşırsa izin ver veya izin verme'yi seçmezse bildirim izninin durumu değişmez.
Yeni yüklenen uygulamalar üzerindeki etkiler
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ı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 üzerinde kontrole sahip olur. Bu fırsatı değerlendirerek uygulamanın neden bu izne ihtiyacı olduğunu kullanıcılara açıklayıp onları izin vermeye teşvik edin.
- Uygulamanız 12L (API düzeyi 32) veya daha düşük bir düzeyi hedefliyorsa uygulamanız bir bildirim kanalı oluşturduktan sonra ilk kez bir 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 hata genellikle uygulama başlatılırken gerçekleşir.
Mevcut uygulamalarda yapılan güncellemeler üzerindeki etkiler
Bildirim izniyle ilişkili kesintileri en aza indirmek amacıyla, kullanıcı cihazını Android 13 veya sonraki bir sürüme yükselttiğinde sistem, tüm uygun uygulamalara 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ı izni istemi görmez.
Önceden izin almaya uygunluk
Uygulamanızın otomatik önceden verme işlemine uygun olması için mevcut bir bildirim kanalının olması ve bildirimlerinin 12 L veya daha düşük bir sürümü çalıştıran bir cihazda kullanıcı tarafından açıkça devre dışı bırakılmaması gerekir.
Kullanıcı, 12 L veya daha düşük sürümlere sahip bir cihazda uygulamanızın bildirimlerini devre dışı bıraktıysa bu ret, cihaz Android 13 veya sonraki bir sürüme yükseltildiğinde de devam eder.
Muafiyetler
Bu bölümde, bildirim izni davranışı değişikliğinden muaf tutulan bildirim ve uygulamalar bulunur. 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ıyla 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 aramalarını kendi kendine yönetecek şekilde kendini 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:
MANAGE_OWN_CALLS
iznini beyan eder.ConnectionService
arayüzünü uygular.registerPhoneAccount()
çağrısı yaparak cihazın telekomünikasyon sağlayıcısına kaydolur.
Uygulamanızı test etme
Bildirim izninin, uygulamanız 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ırlamaya gerek kalmadan kullanıcı seçimlerinin ve cihaz yükseltmelerinin en yaygın sıralarını simüle etmenize olanak tanır:
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 pil gücüne sahip bir cihaza yüklendiğinde bildirimleri etkin tutarsa ve 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 pil gücüne 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ü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 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 sağlamak için uygulamanızı, Android 13 veya sonraki sürümleri hedefleyecek şekilde güncelleyin.
Bildirim izni isteminin gösterilmesini bekleyin
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 avantajlarını bizzat anlamak isteyebilir. Bir kullanıcı işleminden izin istemini tetikleyebilirsiniz. Aşağıdaki listede, bildirim izin istemini göstermenin uygun olduğu zamanlara ilişkin birkaç örnek gösterilmektedir:
- Kullanıcı, "uyarı zili" düğmesine dokunur.
- Kullanıcı, birisinin sosyal medya hesabını takip etmeyi seçer.
- Kullanıcı yemek teslimatı için bir sipariş gönderir.
Şekil 1'de bildirim izni istemek için önerilen bir iş akışı gösterilmektedir. shouldShowRequestPermissionRationale()
işlevi true
değerini döndürmezse uygulamanızın orta ekranı, yani "Bildirim alın!" başlıklı orta ekranı görüntülemesi gerekmez.
Alternatif olarak, kullanıcılara uygulamanızı tanıma şansı verdikten sonra görünecek bir istek ayarlayabilirsiniz. Örneğin, kullanıcının uygulamanızı üçüncü veya dördüncü kez açmasını bekleyebilirsiniz.
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 neden izin vermesi gerektiği açıkça anlaşılır. Örneğin, bir e-posta uygulaması 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 içerebilir.
Amaçlarınızı şeffaf bir şekilde ifade etmek için bu fırsatı kullanın. Böylece kullanıcıların uygulamanıza bildirim izni verme olasılığı daha yüksektir.
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. Bunun 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.