Bildirim kanalları oluşturma ve yönetme

Android 8.0'dan (API düzeyi 26) itibaren tüm bildirimlerin bir kanala atanması gerekir. Her kanal için, o kanaldaki tüm bildirimlere uygulanacak görsel ve işitsel davranışı ayarlayabilirsiniz. Kullanıcılar bu ayarları değiştirebilir ve uygulamanızdaki hangi bildirim kanallarının rahatsız edici veya görünür olabileceğine karar verebilir.

Android 8.0'daki kanallara ve diğer bildirim özelliklerine genel bakış için aşağıdaki videoyu izleyin.

Bildirim kanalları için kullanıcı ayarları, sistem ayarlarındaki her uygulama için kullanılabilir (Şekil 1'de gösterildiği gibi).

Şekil 1. Saat uygulaması ve kanallarından biri için bildirim ayarları.

Bildirim kanalı oluşturduktan sonra bildirim davranışlarını değiştiremezsiniz. Bu noktada kontrol tamamen kullanıcıdadır. Ancak kanalın adını ve açıklamasını değiştirebilirsiniz.

Göndermeniz gereken her bildirim türü için bir kanal oluşturun. Kullanıcıların yaptığı seçimleri yansıtmak için bildirim kanalları da oluşturabilirsiniz. Örneğin, bir mesajlaşma uygulamasında kullanıcı tarafından oluşturulan her görüşme grubu için ayrı bildirim kanalları oluşturabilirsiniz.

Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflediğinizde bir ya da daha fazla bildirim kanalı uygulamanız gerekir. targetSdkVersion değeriniz 25 veya daha düşük bir değere ayarlanmışsa uygulamanız Android 8.0 (API düzeyi 26) veya sonraki sürümlerde çalışırken Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran cihazlardaki gibi davranır.

Bildirim kanalı oluşturma

Bildirim kanalı oluşturmak için aşağıdaki adımları uygulayın:

  1. Benzersiz bir kanal kimliği, kullanıcı tarafından görülebilen ad ve önem düzeyi içeren bir NotificationChannel nesnesi oluşturun.

  2. İsteğe bağlı olarak, kullanıcının sistem ayarlarında göreceği açıklamayı setDescription() ile belirtin.

  3. Bildirim kanalını createNotificationChannel() yöntemine ileterek kaydedin.

Aşağıdaki örnekte, bildirim kanalının nasıl oluşturulacağı ve kaydedileceği gösterilmektedir:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = descriptionText
    // Register the channel with the system. You can't change the importance
    // or other notification behaviors after this.
    val notificationManager =
        context.getSystemService(NotificationManager::class.java)
    notificationManager?.createNotificationChannel(mChannel)
}

Mevcut bir bildirim kanalını orijinal değerleriyle yeniden oluşturmak herhangi bir işlem gerçekleştirmez. Bu nedenle, bir uygulamayı başlatırken bu kodu çağırmak güvenlidir.

Varsayılan olarak, belirli bir kanala gönderilen tüm bildirimler, NotificationManagerCompat sınıfındaki önem düzeyine göre tanımlanan görsel ve işitsel davranışları (ör. IMPORTANCE_DEFAULT veya IMPORTANCE_HIGH) kullanır. Önem düzeyleri hakkında daha fazla bilgi için sonraki bölüme bakın.

Kanalınızın varsayılan bildirim davranışlarını daha fazla özelleştirmek istiyorsanız NotificationChannel üzerinde enableLights(), setLightColor() ve setVibrationPattern() gibi yöntemleri çağırabilirsiniz. Kanalı oluşturduktan sonra bu ayarları değiştiremeyeceğinizi ve bu davranışların etkin olup olmayacağı konusunda son kararı kullanıcının vereceğini unutmayın.

createNotificationChannels() yöntemini çağırarak tek bir işlemde birden fazla bildirim kanalı da oluşturabilirsiniz.

Önem düzeyini ayarlama

Kanal önemi, kanalda yayınlanan tüm bildirimlerin kesinti düzeyini etkiler. NotificationChannel oluşturucusunda, IMPORTANCE_NONE(0) ile IMPORTANCE_HIGH(4) arasında değişen beş önem düzeyinden birini kullanarak belirtin.

Android 7.1 (API düzeyi 25) veya daha eski sürümleri çalıştıran cihazları desteklemek için NotificationCompat sınıfından bir öncelik sabiti kullanarak her bildirim için setPriority() yöntemini de çağırmanız gerekir.

Önem (NotificationManager.IMPORTANCE_*) ve öncelik (NotificationCompat.PRIORITY_*) sabitleri, aşağıdaki tabloda gösterildiği gibi kullanıcıya gösterilen önem seçenekleriyle eşlenir.

Kullanıcı tarafından görülebilen önem düzeyi Önem (Android 8.0 ve sonraki sürümler) Öncelik (Android 7.1 ve önceki sürümler)
Acil
Ses çıkarır ve kayan bildirim olarak görünür.
IMPORTANCE_HIGH PRIORITY_HIGH veya PRIORITY_MAX
Yüksek
Ses çıkarır.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Orta
Ses çıkarmaz.
IMPORTANCE_LOW PRIORITY_LOW
Düşük
Ses çıkarmaz ve durum çubuğunda görünmez.
IMPORTANCE_MIN PRIORITY_MIN
Yok
Ses çıkarmaz ve durum çubuğunda veya gölgede görünmez.
IMPORTANCE_NONE N/A

Önem derecesi ne olursa olsun tüm bildirimler, bildirim çekmecesi ve başlatıcı simgesindeki rozet gibi kesintiye uğratmayan sistem kullanıcı arayüzü konumlarında görünür. Bununla birlikte, bildirim rozetinin görünümünü değiştirebilirsiniz.

Kanalı NotificationManager'e gönderdikten sonra önem düzeyini değiştiremezsiniz. Ancak kullanıcı, uygulamanızın kanallarıyla ilgili tercihlerini istediği zaman değiştirebilir.

Uygun bir öncelik seviyesi seçme hakkında bilgi için Bildirimler tasarım kılavuzu'ndaki "Öncelik seviyeleri" bölümüne bakın.

Bildirim kanalı ayarlarını okuma

Kullanıcılar, titreşim ve uyarı sesi gibi davranışlar da dahil olmak üzere bildirim kanallarının ayarlarını değiştirebilir. Bir kullanıcının bildirim kanallarınıza uyguladığı ayarları öğrenmek istiyorsanız aşağıdaki adımları uygulayın:

  1. getNotificationChannel() veya getNotificationChannels() yöntemini çağırarak NotificationChannel nesnesini alın.

  2. getVibrationPattern(), getSound() ve getImportance() gibi kanala özel ayarları sorgulayın.

Uygulamanızın istenen davranışını engellediğini düşündüğünüz bir kanal ayarı tespit ederseniz kullanıcıya bu ayarı değiştirmesini önerebilir ve bir sonraki bölümde gösterildiği gibi kanal ayarlarını açma işlemi sağlayabilirsiniz.

Bildirim kanalı ayarlarını açın.

Bildirim kanalı oluşturduktan sonra bildirim kanalının görsel ve işitsel davranışlarını programatik olarak değiştiremezsiniz. Kanal davranışlarını yalnızca kullanıcı sistem ayarlarından değiştirebilir. Kullanıcılarınızın bu bildirim ayarlarına hızlıca erişebilmesi için uygulamanızın ayarlar kullanıcı arayüzüne bu sistem ayarlarını açan bir öğe ekleyin.

ACTION_CHANNEL_NOTIFICATION_SETTINGS işlemini kullanan bir Intent ile bildirim kanallarının sistem ayarlarını açabilirsiniz.

Örneğin, aşağıdaki örnek kodda bir kullanıcıyı bildirim kanalının ayarlarına nasıl yönlendirebileceğiniz gösterilmektedir:

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID)
}
Button(onClick = {
    context.startActivity(intent)
}) {
    Text("Open Channel Settings")
}

Intent'in, uygulamanızın paket adını (uygulama kimliği olarak da bilinir) ve düzenlenecek kanalı belirten iki ek bilgi gerektirdiğini unutmayın.

Bildirim kanalını silme

deleteNotificationChannel() yöntemini çağırarak bildirim kanallarını silebilirsiniz. Aşağıdaki örnek kodda bu işlemin nasıl tamamlanacağı gösterilmektedir:

val notificationManager =
    ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java)
notificationManager?.deleteNotificationChannel(channelId)

Bildirim kanalı grubu oluşturma

Kanallarınızın ayarlar kullanıcı arayüzündeki görünümünü daha ayrıntılı bir şekilde düzenlemek istiyorsanız kanal grupları oluşturabilirsiniz. Uygulamanız birden fazla kullanıcı hesabını destekliyorsa her hesap için bir bildirim kanalı grubu oluşturmanıza olanak tanıdığı için bu iyi bir fikirdir. Kanal grupları, kullanıcıların aynı ada sahip birden fazla bildirim kanalını ayırt etmesine ve kontrol etmesine yardımcı olur.

Şekil 2. Kişisel ve iş hesapları için gruplar içeren bildirim kanalı ayarları.

Örneğin, bir sosyal ağ uygulaması kişisel ve iş hesapları için destek içerebilir. Bu senaryoda, her hesap için aynı işlevlere ve adlara sahip birden fazla bildirim kanalı gerekebilir. Örneğin:

  • İki kanalı olan kişisel hesap:

    • Yeni yorumlar

    • Yayın önerileri

  • İki kanalı olan bir işletme hesabı:

    • Yeni yorumlar

    • Gönderi önerileri

Bildirim kanallarını her hesap için gruplar halinde düzenlemek, kullanıcıların kanalları ayırt etmesine olanak tanır.

Her bildirim kanalı grubunun bir kimliği ve kullanıcı tarafından görülebilen bir adı olmalıdır. Kimlik, paketinizde benzersiz olmalıdır. Aşağıdaki snippet'te, bildirim kanalı grubunun nasıl oluşturulacağı gösterilmektedir.

fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) {
    val notificationManager =
        ContextCompat.getSystemService(context, NotificationManager::class.java)
    notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
}

Yeni bir grup oluşturduktan sonra, yeni bir NotificationChannel nesnesini grupla ilişkilendirmek için setGroup() yöntemini çağırabilirsiniz.

Kanalı bildirim yöneticisine gönderdikten sonra bildirim kanalı ile grup arasındaki ilişkiyi değiştiremezsiniz.