Android FCM Notificationların UI üzerinde AlertDialog’da gösterilmesi

(Çalışma Kotlin dili üzerinde örnek gösterilmiştir)

Daha önce açık bir uygulama üzerinde bildirim alma (push notification) işlemi için AlertDialog ya da popup dialog yöntemleri gibi arayüz üzerinden görüntülenebilir bildirim iletmeyi hiç düşündünüz mü ? Yanıtınız Evet ise doğru yerdesiniz 🙂

İlgili Activity sınıfına ui tarafına (diğer bir adıyla Foreground Notification) gelen bildirimin iletilebilmesi adına broadcast receiver tanımlanması gerekmektedir.

İlgili Activity sınıfı içerisindeyken üretelim;

private val mhandler: BroadcastReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent) {
        val title = intent.getStringExtra("title")
        val message = intent.getStringExtra("body")
        val gidilecek_url = intent.getStringExtra("gidilecek_url")

        AlertDialog.Builder(this@MainActivity)
            .setTitle(title)
            .setMessage(message)
            .setPositiveButton("Bağlantıya git") { dialog, whichButton ->
                if (click_action != null) {
                    //webView.loadUrl(gidilecek_url)
                }
                dialog.dismiss()
            }.setNegativeButton("İptal") { dialog, whichButton -> dialog.dismiss()}
            .show()

        Toast.makeText(context, "title is :$title", Toast.LENGTH_SHORT).show()
    }
}

override fun onPause() {
    super.onPause()
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mhandler)
}

override fun onResume() {
    super.onResume()
    LocalBroadcastManager.getInstance(this)
        .registerReceiver(mhandler, IntentFilter("UI_FCM_MESSAGE"))
}

onPause ve onResume fonksiyonlarımızdan onPause activity sınıfımızın açık olmaması durumunda yayın almayı durdurması sağlanmış, onResume ise yayın almayı devam ettirmiş olacaktır.

LocalBroadcastManager’da registerReceiver’da IntentFilter’da tanımladığımız String değişken, gelecek yayının adını belirtip yakalayabilmemiz için gerekli olacaktır.

FCM servis sınıfımız olan FirebaseMessagingService’dan türettiğimiz sınıfın onMessageReceived’ın gelen FCM mesajlarını yakalamak için kullanıldığını biliyoruz. Şimdi gelen bildirimde bildirim içeriğinin BroadcastManager üzerinden ilgili activity sınıfına gönderilmesi işlemini sağlayalım;

onMessageReceived içerisine ekleyelim;

if (remoteMessage.getData().isNotEmpty()) {
    val i = Intent("UI_FCM_MESSAGE")
    i!!.putExtra("gidilecek_url", remoteMessage.data["gidilecek_url"])
    i!!.putExtra("title", remoteMessage.notification?.title)
    i!!.putExtra("body", remoteMessage.notification?.body)
    val lbm = LocalBroadcastManager.getInstance(this)
    lbm.sendBroadcast(i!!)
}

hepsi bu kadar, keyifli çalışmalar dilerim…

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top