Bildirim kanalları oluşturma ve yönetme

Android 8.0 (API düzeyi 26) sürümünden itibaren tüm bildirimler bir kanala atanmalıdır. Her kanal için, 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 bir bakış için aşağıdaki videoya göz atın.

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

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

Bir bildirim kanalı oluşturduktan sonra bildirim davranışlarını değiştiremezsiniz. Bu aşamada, kullanıcı tam kontrole sahip olur. Bununla birlikte, bir kanalın adını ve açıklamasını değiştirebilirsiniz.

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

Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflediğinizde bir veya daha fazla bildirim kanalı uygulamanız gerekir. targetSdkVersion değeriniz 25 veya daha düşük bir değere ayarlanırsa uygulamanız Android 8.0 (API düzeyi 26) veya sonraki bir sürümü üzerinde çalışırken Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran cihazlarla aynı şekilde davranır.

Bildirim kanalı oluşturma

Bildirim kanalı oluşturmak için şu adımları uygulayın:

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

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

  3. Bildirim kanalını createNotificationChannel()'e ileterek kaydedin.

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

Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    val name = getString(R.string.channel_name)
    val descriptionText = getString(R.string.channel_description)
    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 = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(mChannel)
}

Java

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

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

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

Kanalınızın varsayılan bildirim davranışlarını daha da özelleştirmek isterseniz NotificationChannel'da 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 olmadığı konusunda son kontrolün kullanıcıda olduğunu unutmayın.

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

Önem düzeyini ayarlama

Kanal önem derecesi, kanalda yayınlanan tüm bildirimlerin kesinti düzeyini etkiler. Bu değeri, NotificationChannel oluşturucuda IMPORTANCE_NONE(0) ile IMPORTANCE_HIGH(4) arasındaki beş önem düzeyinden birini kullanarak belirtin.

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

Önem (NotificationManager.IMPORTANCE_*) ve öncelik (NotificationCompat.PRIORITY_*) sabitleri, aşağıdaki tabloda gösterildiği gibi, kullanıcının görebildiği ö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
Bir ses çıkarır ve uyarı bildirimi olarak görünür.
IMPORTANCE_HIGH PRIORITY_HIGH veya PRIORITY_MAX
Yüksek
Bir 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

Önemleri fark etmeksizin tüm bildirimler, bildirim çekmecesinde ve başlatıcı simgesinde bir rozet gibi kesintiye uğratmayan sistem kullanıcı arayüzü konumlarında görünür ancak bildirim rozetinin görünümünü değiştirebilirsiniz.

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

Uygun bir öncelik düzeyi seçme hakkında bilgi edinmek için Bildirim tasarım kılavuzundaki "Öncelik düzeyleri" konusuna bakın.

Bildirim kanalı ayarlarını okuma

Kullanıcılar, titreşim ve uyarı sesi gibi davranışlar da dahil olmak üzere bildirim kanallarıyla ilgili ayarları değiştirebilir. Bir kullanıcının bildirim kanallarınıza uyguladığı ayarları öğrenmek isterseniz şu adımları izleyin:

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

  2. getVibrationPattern(), getSound() ve getImportance() gibi belirli kanal ayarlarını sorgulayın.

Uygulamanızın istenen davranışı engellediğini düşündüğünüz bir kanal ayarı tespit ederseniz kullanıcıya bunu değiştirmesini önerebilir ve sonraki bölümde gösterildiği gibi kanal ayarlarını açmak için bir işlem sunabilirsiniz.

Bildirim kanalı ayarlarını açma

Bir 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. Uygulamanızın ayarlar kullanıcı arayüzüne bu sistem ayarlarını açan bir öğe ekleyerek kullanıcılarınızın bu bildirim ayarlarına kolayca erişmesini sağlayabilirsiniz.

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

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

Kotlin

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)

Java

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

Amacın, uygulamanızın paket adını (uygulama kimliği olarak da bilinir) ve düzenlenecek kanalı belirten iki ekstra özellik gerektirdiğine dikkat edin.

Bildirim kanalını silme

deleteNotificationChannel() numaralı telefonu arayarak bildirim kanallarını silebilirsiniz. Aşağıdaki örnek kod bu işlemi nasıl tamamlayacağınızı gösterir:

Kotlin

// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)

Java

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
notificationManager.deleteNotificationChannel(id);

Bildirim kanal grubu oluşturma

Ayarlar kullanıcı arayüzünde kanallarınızın görünümünü daha ayrıntılı bir şekilde düzenlemek isterseniz kanal grupları oluşturabilirsiniz. Uygulamanız iş profilleri gibi birden fazla kullanıcı hesabını destekliyorsa bu iyi bir fikirdir. Çünkü bu özellik her hesap için bir bildirim kanalı grubu oluşturmanıza olanak tanır. Bu şekilde, kullanıcılar aynı ada sahip birden çok bildirim kanalını kolayca belirleyip kontrol edebilir.

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

Örneğin, bir sosyal ağ uygulaması kişisel hesaplar ve iş hesapları için destek içerebilir. Bu senaryoda her hesap, aynı işlev ve ada sahip birden fazla bildirim kanalına ihtiyaç duyabilir. Örneğin:

  • İki kanalı olan kişisel bir hesap:

    • Yeni yorumlar

    • Yayın önerileri

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

    • Yeni yorumlar

    • Yayın önerileri

Bildirim kanallarını her bir hesap için gruplar halinde düzenlemek, kullanıcıların bunları ayırt edebilmesini sağlar.

Her bildirim kanalı grubu, paketiniz içinde benzersiz olması gereken bir kimlik ve kullanıcı tarafından görülebilen bir ad gerektirir. Aşağıdaki snippet'te bir bildirim kanalı grubunun nasıl oluşturulacağı gösterilmektedir.

Kotlin

// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

Java

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

Yeni bir grup oluşturduktan sonra grupla yeni bir NotificationChannel nesnesini ilişkilendirmek için setGroup() çağrısı yapabilirsiniz.

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