2-) Android’de Bildirimler (Notifications)
Bu yazımda bir bildirim, kanal (channel) nasıl oluşturulur. Oluşturduğumuz bildirimi kullanıcıya nasıl gösterebiliriz, gösterdiğimiz bildirimi güncellemeyi ve iptal etmeyi ve kilit ekranından bildirimde görünen ayrıntı düzeyini nasıl kontrol edildiğini anlatacağım.
Bildirim Oluşturmak
En temel ve kompakt haliyle her bildirim bir simge, bir başlık ve az miktarda içerik metni görüntüler. Bu bölümde, kullanıcının uygulamanızdaki bir etkinliği başlatmak için tıklayabileceği bir bildirimi nasıl oluşturacağınızı öğreneceksiniz.
Bildirim İçeriğini Ayarlama
Bir bildirimin içeriğini ve kanalını ayarlamak için NotificationCompat.Builder()
nesnesini kullanabilirsiniz.
İşte adım adım yapılacak işlemler:
- Küçük İkon (Small Icon) ayarlama: Bir bildirimde görünecek küçük bir simge belirlemek için
setSmallIcon()
yöntemini kullanabilirsiniz. Bu simge, genellikle uygulamanızın logosu olur.
val builder = NotificationCompat.Builder(context,"channelId")
.setSmallIcon(R.drawable.sport_icon);
2. Başlık (Title) ve İçerik Metni (Body Text) ayarlama: Bildirimde görünecek başlık ve içerik metnini setContentTitle()
ve setContentText()
yöntemlerini kullanarak ayarlayabilirsiniz. Örneğin:
val builder = NotificationCompat.Builder(context,"channelId")
.setSmallIcon(R.drawable.sport_icon)
.setContentTitle("Spor Bildirimleri")
.setContentText("Nba finallerinde Denver Nuggets ve Miami Heat.");
3. Bildirim Önceliği (Notification Priority) ayarlama: Bir bildirimin önceliğini belirlemek için setPriority()
yöntemini kullanabilirsiniz. Bu öncelik, bildirimin Android 7.1 (Android 8.0 için bunun yerine ileride göstereceğim kanal önemini (channel importance) ayarlamamız gerekiyor)
val builder = NotificationCompat.Builder(context, "channelId")
.setSmallIcon(R.drawable.sport_icon)
.setContentTitle("Spor Bildirimleri")
.setContentText("Nba finallerinde Denver Nuggets ve Miami Heat.")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
Android 8.0 (API seviyesi 26) ve üzeri sürümler için bildirimler oluştururken bir kanal kimliği(channelId) sağlamanız gerekmektedir.
Kanal (Channel) Oluşturmak
Android 8.0 (API level 26)’dan itibaren tüm bildirimler bir kanala dahil edilmelidir. Aksi taktirde bildirimler görünmezler. Aşağıdaki kod örneği, SDK_INT sürümüne göre bildirim kanalını sisteme kaydetmenin nasıl yapılacağını göstermektedir:
private fun createNotificationChannel(context: Context) {
// Sadece API 26+ için NotificationChannel oluşturun
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "Spor Bildirimleri"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel("channelId", name, importance)
// Sisteme kanalı (channel) kaydedin
val notificationManager: NotificationManager =
context.getSystemService(NotificationManager::class.java) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
Oluşturduğumuz channel’i kullanıcılar uygulama ayarlarından görebilir ve her bir channel için ayarlamalar yapabilirler.
Bildirimi Göstermek
Bir bildirimi göstermek için NotificationManagerCompat.from(context).notify()
yöntemini kullanmamız gerekmektedir. Bu yöntem, iki parametre alır. İlk olarak, her bir bildirim için benzersiz bir kimlik değeri iletmeliyiz. İkinci parametre ise bir Notification nesnesidir, bu nesneyi oluşturmak için yukarıda belirtildiği gibi bir NotificationCompat.Builder
nesnesini kullanabiliriz.
Yukarıdaki bildirim içeriğini ayarlama bölümünde, builder değişkenini kullanarak bir NotificationCompat.Builder
nesnesi oluşturduk ve istediğimiz bildirim için ayarlamaları yaptık. Bu ayarlamaları tamamladıktan sonra, build()
fonksiyonunu kullanarak bir Notification
nesnesi oluşturduk.
// 1 ile belirttiğimiz alan her bir bildirim için benzersiz bir id değeri
NotificationManagerCompat.from(context).notify(1, builder.build())
Bildirimi Güncelleme ve Daha Uzun Mesajlar Gösterme
NotificationManagerCompat.from(context)
.notify(1, builder
.setContentText("Nba finallerinde Denver Nuggets ve Miami Heat karşılaşacak")
.setStyle(NotificationCompat.BigTextStyle()
.bigText("Nba finallerinde Denver Nuggets ve Miami Heat karşılaşacak. Denver'de dikkat çeken oyuncu Nikola Jokic, Miami tarafında dikkat çeken oyuncu Jimmy Butler")
).build()
)
Bir bildirimi gösterdikten sonra güncellemek için, NotificationManagerCompat().notify()
işlevini tekrar çağırın ve daha önce kullandığınız aynı ID’ye sahip bir bildirim iletin. Bildiriminizin daha uzun bir text içermesini istiyorsanız, setStyle()
ile bir stil şablonu ekleyerek genişletilebilir bir bildirimi etkinleştirebilirsiniz.
Bildirimi Silmek
Bir bildirimi silmek için NotificationManagerCompat().cancel(id)
methodunu kullanarak silebiliriz.
NotificationManagerCompat.from(context).cancel(1)
Bir bildirimi yukarıda olduğu gibi manuel olarak silebiliriz, ama istersek bir bildirimi silmek için, bildirim oluştururken setTimeOutAfter()
methodunu kullanarak bir zaman aşımı ayarlarsanız, belirtilen süre geçtikten sonra sistem bildirimi iptal eder. Aşağıdaki örnekte sistem bildirim gösterildikten 3 saniye sonra bildirimi otomatik olarak siler.
val builder = NotificationCompat.Builder(context, "channelId")
.setSmallIcon(R.drawable.sport_icon)
.setContentTitle("Spor Bildirimleri")
.setContentText("Nba finallerinde Denver Nuggets ve Miami Heat.")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setTimeoutAfter(3000)
Bildirimin Kilit Ekranından Görünürlüğünü Ayarlama
Kilit ekranındaki bildirimlerin görünürlüğünü ayarlamak için bildirim oluştururken setVisibility()
methodunu kullanarak ayarlayabiliriz. Temelde 3 adet ayarlayabileceğimiz ayar bulunuyor.
VISIBILITY_PUBLIC
Bildirimin tam içeriğini gösterir.VISIBILITY_SECRET
Bildirim hiçbir şekilde kilit ekranında gösterilmez.VISIBILTY_PRIVATE
Bildirimin sadece belirli kısımlarını gösterir. Bunlar bildirim için kullandığımız icon vesetContentTitle()
fonksiyonu ile belirttiğimiz bölümler gösterilir.
Şimdi her biri için örneklere bakalım.
VISIBILITY_PUBLIC
VISIBILITY_PRIVATE
Bu özelliği kullandığımızda bildirimin kilit ekranında göstermek istediğimiz bir versiyonunu da iletebiliriz. setPublicVersion()
methodunu kullanarak istediğimiz yeni bir Notification
nesnesini oluşturabiliriz. Örnek olarak;
val builder = NotificationCompat.Builder(context, "channelId")
.setSmallIcon(R.drawable.sport_icon)
.setContentTitle("Spor Bildirimleri")
.setContentText("Nba finallerinde Denver Nuggets ve Miami Heat.")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
.setPublicVersion(
NotificationCompat.Builder(context, "channelId")
.setSmallIcon(R.drawable.sport_icon)
.setContentTitle("Spor Bildirimleri")
.setContentText("Nba finallerine kalan takımlar belli oldu.")
.build()
)
VISIBILITY_SECRET
Android Bildirimleriyle İlgili Intent ve PendingIntent Kullanımı
Kullanıcıyı ilgili activity’e yönlendirmek için Intent
ve PendingIntent
kullanılır. Bu bölümde, Android uygulamalarında bildirimlerle ilişkili olarak kullanılan bir Intent
ve PendingIntent
örneğini inceleyeceğiz.
Öncelikle, Intent
sınıfı, uygulamanın farklı bileşenlerini başlatmak veya birbiriyle iletişim kurmak için kullanılır. Bildirimlerde, genellikle Intent
kullanılarak kullanıcının tıkladığı veya bildirime yanıt verdiği zaman açılacak olan bir activity başlatılır. İşte bu durumu sağlamak için kullanılan bir Intent
örneği:
val intent = Intent(context, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
Yukarıdaki kod parçasında, Intent
sınıfının bir örneği oluşturuluyor. MainActivity
başlatılacak olan activity sınıfını temsil eder. flags
özelliği, Intent
nesnesinin davranışını belirlemek için kullanılır.
Bildirimlerde, Intent
nesnesi bir PendingIntent
içinde kullanılır. PendingIntent
, başka bir zaman veya başka bir bileşen tarafından kullanılabilen bir Intent
i temsil eder. İşte yukarıdaki Intent
örneğiyle ilişkilendirilmiş bir PendingIntent
örneği:
val pendingIntent = PendingIntent.getActivity(
context,
0,
intent,
PendingIntent.FLAG_IMMUTABLE
)
Ve son olarak oluşturduğumuz PendingIntent
nesnesini Notification
nesnemize bildirmemiz gerekiyor. Bu işlemi setContentIntent()
methodunu kullanarak yapabiliriz.
val builder = NotificationCompat.Builder(context, "channelId")
.setSmallIcon(R.drawable.sport_icon)
.setContentTitle("Spor Bildirimleri")
.setContentText("Nba finallerinde Denver Nuggets ve Miami Heat.")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)
Ve işte PendingIntent
kullanarak oluşturduğumuz işlem için örnek:
Yaptığımız uygulamanın bütün kodları:
Özet
Bu makalede Android’de bildirimlerle ilgili temel konuları ele aldık ve bildirim oluşturma, güncelleme, iptal etme ve kilit ekranında görünürlük ayarlama gibi işlemleri adım adım öğrendik. Umarım bu makale, Android bildirimlerini anlamanıza ve uygulamanızda etkili bir şekilde kullanmanıza yardımcı olmuştur. Bir sonraki yazıda, bildirimlere aksiyon alabilmemiz için oluşturabildiğimiz action button’ları nasıl oluşturacağımızı anlatacağım. Görüşmek Üzere 👋
Diğer sosyal medya hesaplarımda takip etmek isterseniz:
Linkedin: https://www.linkedin.com/in/tolga-pirim-7b0b10168/
GitHub: https://github.com/tolgaprm
Twitter: https://twitter.com/tlgprm38