Android Notification Channel Tanımlama Ve Kullanımı

Android Notification Channel Tanımlama Ve Kullanımı

Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız / yayınladığımız Android Dersleri’mize bu dersimizde Android 8 Oreo ile birlikte ortaya çıkan , Target Sdk’sı 26 üzerinde geliştirme yapan ve Notification Özelliğini kullanan herkesin kullanması gereken bir yapı olan Notification Channel hakkında bir yazı yazacağım.

Android Notification Channel Nedir ? 

Notification Channel Android 8 Oreo ile birlikte android’in bizlere sunduğu yeni bir özelliktir. Artık uygulamamıza gelen Push Notification ve ya Local Notificationları gruplayabileceğiz ve notification ayarlarını,kullanıcının bu gruplara göre ayrı ayrı ayarlamasına Uygulama Ayarları sayfasından izin verebileceğiz. Aşağıda videoyu paylaşıyorum.



Yukarıdaki video’dan gördüğünüz gibi Mobilhanem Dersleri adında notification channel oluşturduk ve notification ayarlarını uygulama ayarları sayfasından değiştirebildik. Uygulama ayarları sayfasından ilgili notification channel için , notification’ı açıp kapama , sesi değiştirme , titreşimi açıp kapama , önceliği ve rahatsız etme iznini iptal edebilme özelliklerini kullanıcıya bırakıyoruz.

Notification Channel Artıları 

1 – Bir uygulamada birden fazla channel yaratabilirsiniz. Böylelikle kullanıcı tüm notificationları kapatmak yerine istemediği channel’ı kapatabilir. Örneğin elinizde bir Spor Haberleri uygulaması olduğunu varsayalım ve her bir takım için bir channel oluşturulduğunu düşünelim. Ben kullanıcı olarak sadece Galatasaray Channel’ına izin verip diğerlerini kapatabilirim. Böylelikle diğer takımların notification’ını almamış olurum. Bu anlattığım kullanıcı açısından faydası , biz uygulama sahiplerine veya geliştiricilerine faydası ise notificationlardan sıkılan biri tüm notificationları kapatmak yerine ilgili notificationları açık bırakabilir.

2 – Notification sesini istediği gibi , istediği channel için ayarlayabilir.

3- Titreşimi istediği gibi , istediği channel için ayarlayabilir.

4 – Önem sırasını değiştirebilir.

5 – Kilit ekranında gözüküp gözükmeyeceğini belirleyebilir.

6 – Ekran ışığını açıp açmayacağını ayarlabilir.

7 – Gelen notification’ın Beni Rahatsız Etme özelliğini iptal edip edemeyeceğini ayarlayabilir.

Notification Channel’ı kullanmak zorundamıyız ?

Bunu açıklamaya başlamadan önce yaşadığım durumu sizlere anlatayım. Geliştirmekte olduğum projelerde her zaman  Compile SDK mı ve Target SDK’mı en son çıkan android sürümüne set ederim(şuan 27). Bunun doğru mu yanlış mı olduğu başka bir blog yazısı olabilir ama bunu yapmaktaki temel hedefim , android’in yeni çıkardığı özellikleri projemde kullanmak isteyişimdir.

Örneğin Android 8 ile birlikte artık text fontunu XML’den ayarlayabiliyoruz. (Bununla ilgili bir yazı hazırlığımız mevcut) Bundan öncesinde bunu yapabilmek için 3.rd parti kütüphaneler kullanıyorduk. Bizde projemizde 3.rd parti kütüphane kullanmıştık. TextView , EditText ve  Button gibi yapılardaki textleri kullanmış olduğumuz RobotoTextview kütüphanesi ile fontlarını değiştirmiştik.

Ancak Android 8 Oreo ile birlikte herhangi bir kütüphane kullanmadan native android sdk’sı ile bunu yapma imkanı bulduk. Hatta Support Library kütüphanesi ile  Android 4’e (SDK 14) kadar bu desteği bize sundu. Yani minimum sdk’nız 14 ve üzeri ise artık projelerinizde fontu direk xml’den set edebileceksiniz.  Bende projemde 3.rd parti kütüphaneyi kaldırdım ve native özelliği kullanmaya başladım. Zaten paylaşmış olduğum RobotoTextview kütüphanesinin github sayfasına giderseniz kütüphanenin Android 8 Oreo ile birlikte deprecate olduğunu görebilirsiniz.

Peki ben bunu neden anlattım 🙂 İşte bu ve bunun gibi yeni özelliklerden dolayı her zaman Target SDK ve Compile SDK’mı son sürüme çekerim. Ama bu sefer ummadığım bir durumla karşılaştım. Yeni update çıktığım zaman Android 8 ve üzerindekilerin Push Notification alamadığı gerçeğiyle yüzleştim (Android 8 kullanıcıları %0.5 in altında olmasına rağmen). Herhangi bir Crash durumu söz konusu değildi fakat notification alamıyorlardı. Hemen rollback yapıp Google Play Sürüm yönetiminden eski apk’yı devreye aldım ve konuyu araştırmaya başladım.

Araştırınca sebebini bulmam uzun sürmedi , target SDK’mızı 26 ve üzeri yaptığımız an artık Notification Channel kullanmak zorundayız. Kullanmadığımız durumda notification’ımız çalışmıyordu. Eee o zaman sürümümü 26 ve üzeri yapmam sorunla karşılaşmam diyenleri duydum. Nereye kadar kaçabilirsiniz ki , geliştirdiğiniz uygulama eğer kurumsal bir uygulama ise elbette ilerleyen bir zamanda target sdk’nızı 26 üzerine çıkarmak zorunda kalacaksınız. Dolayısıyla şuan zamanınız varken , işler sıkışmamışken acil bir durum yokken bu yapıya sizde rahat rahat geçin 🙂

Notification Channel’ı Tanımlamak

Direk kodunu paylaşıyorum arkadaşlar.

String CHANNEL_ID = “mobilhanem”;
String CHANNEL_NAME = “Mobilhanem Dersleri”
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
channel.enableVibration(true);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)
manager.createNotificationChannel(channel);

String CHANNEL_ID = “mobilhanem”;

String CHANNEL_NAME = “Mobilhanem Dersleri”

NotificationChannel channel = new NotificationChannel(CHANNEL_ID,

                CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);

channel.enableVibration(true);

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)

manager.createNotificationChannel(channel);

Her bir channel’in bir id’si ve kullanıcını göreceği bir adı olmalıdır. Yukarıda biz id’yi “mobilhanem” olarak set ettik. Adı’nı ise “Mobilhanem Dersleri” verdik. Channel oluşturduktan sonra channel.enableVibration(true); diyerek channel için başlangıç titreşim ayarını açtık.

Channel oluştururken enableVibration() gibi farklı methodlarıda kullanarak default başlangıç değerini değiştirebiliriz.

Birkaç örnek paylaşıyorum:

channel.enableLights() //Cihaz destekliyorsa flaş açıp kapamaya izin verir. true ve ya false değer alır
channel.enableVibration // titreşim açık mı olsun kapalı mı olsun.true veya false değer alır
channel.setVibrationPattern() //titreşim patternini ayarlayabilirsiniz
channel.setImportance() //Notification önemini set edebilirsiniz. Detaylı bilgi için tıklayınız.
channel.setSound() //Notification’ın sesini istediğiniz gibi ayarlayabilirsiniz.
channel.setBypassDnd() //Rahatsız etme iznini iptal edebilsin mi . true ve ya false
channel.canShowBadge() //Notification geldiğinde uygulama ikonuna işaret bıraksın mı. true ve ya false

channel.enableLights()//Cihaz destekliyorsa flaş açıp kapamaya izin verir. true ve ya false değer alır

channel.enableVibration // titreşim açık mı olsun kapalı mı olsun.true veya false değer alır

channel.setVibrationPattern()//titreşim patternini ayarlayabilirsiniz

channel.setImportance()//Notification önemini set edebilirsiniz. Detaylı bilgi için tıklayınız.

channel.setSound() //Notification’ın sesini istediğiniz gibi ayarlayabilirsiniz.

channel.setBypassDnd()//Rahatsız etme iznini iptal edebilsin mi . true ve ya false

channel.canShowBadge()//Notification geldiğinde uygulama ikonuna işaret bıraksın mı.  true ve ya false

Yukarıdaki methodlarla notification channel için başlangıç değerleri atamış olduk. Kullanıcı isterse bunları Bildirim ayarlarından istediği gibi değiştirebilir.

ÖNEMLİ NOT: Bu ayarları sadece notification channel ilk oluştururken ayarlayabiliriz. Channel oluştuktan sonra artık biz uygulama içinden bu ayarları değiştiremeyiz. Sadece kullanıcının ayarlarını okuyabiliriz. Tekrardan yazmak istiyorum 🙂 Channel oluştuktan sonra bu ayarları uygulama içinden değiştiremeyiz.

Notification Göndermek

Bizim bu yazımızın konusu Push notification olmadığı için local notification göndereceğiz. Firebase’le Push Notification Göndermek isterseniz bu dersimizi inceleyebilirsiniz.

Kod:

String CHANNEL_ID = “mobilhanem”;
int NOTIFICATION_ID = 52;//Notification id si, channel ile ilgisi bulunmuyor
Notification notification = new Notification.Builder(this, CHANNEL_ID)
.setContentTitle(“Mobilhanem Notification Channel”)
.setContentText(“Example Text”)
.setSmallIcon(R.drawable.ic_launcher_round)
.setAutoCancel(true)
.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, notification);

String CHANNEL_ID = “mobilhanem”;

int NOTIFICATION_ID = 52;//Notification id si, channel ile ilgisi bulunmuyor

Notification notification = new Notification.Builder(this, CHANNEL_ID)

                .setContentTitle(“Mobilhanem Notification Channel”)

                .setContentText(“Example Text”)

                .setSmallIcon(R.drawable.ic_launcher_round)

                .setAutoCancel(true)

                .build();

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

manager.notify(NOTIFICATION_ID, notification);

Yukarıda Notification’ı oluştururken Builder constructor’ına CHANNEL_ID’mizi gönderiyoruz ki , gelen notification’ın hangi channel’a ait olduğunu bilsin. Siz Push notification ile çalışıyor olsaydınız bu id’yi notification’ı gönderirken gönderebilirsiniz.

Peki Channel oluşturmadan notification göndersek ne olacaktı. Bir Crash’e sebep olmuyor ama notification’da gözükmüyor.

Notification Channel Silmek

Kullanıcı ayarlar sayfasından Notification Channel’ı silemiyor. Biz uygulama içinden aşağıdaki kod ile silebiliyoruz.

String CHANNEL_ID = “mobilhanem”;
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.deleteNotificationChannel(CHANNEL_ID);

String CHANNEL_ID = “mobilhanem”;

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

manager.deleteNotificationChannel(CHANNEL_ID);

Yine gördüğünüz gibi channel_id mizi vererek Channel’ımızı silebiliyoruz.

Özet:

Ben bununla ilgili örnek basit bir uygulama yaptım. Yukarıdaki videonun kodlarını aşağıda paylaşıyorum. Sizlere de kodları indirerek incelemenizi tavsiye ederim.

 

Android Notification Channel Tanımlama Ve Kullanımı anlattığımız dersimizin sonuna geldik. Umarım sizler için yararlı olmuştur. Konu hakkında soru , görüş ve yorumlarını konu altından ve ya SoruCevap sitemizden sorabilirsiniz.

Sıfırdan Android derslerimiz için tıklayınız.

4

Yorum Yap
0 Yorum yapan