Cloud Messaging ile Bildirim Gönderme
FCM bildirimleri gönderip alın.
Cloud Messaging ile Bildirim Gönderme, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.
Cloud Messaging Nedir?
Firebase Cloud Messaging (FCM), uygulamanıza push bildirimleri ve veri iletileri gönderir — uygulama kapalıyken bile.
Akış basittir:
- Her uygulama yüklemesi benzersiz bir kayıt belirteci alır.
- Sunucunuz (veya Firebase konsolu), bu belirtece (ya da bir konuya) ileti gönderir.
- FCM iletiyi cihaza yönlendirir; cihaz da iletiyi gösterir veya işler.
Messaging Bağımlılığını Ekleme
FCM, daha önce kurduğunuz BoM tarafından sürümü belirlenen firebase-messaging kitaplığında sunulur.
BoM mevcut olduğunda sürüm numarası belirtmeniz gerekmez.
// app/build.gradle.kts
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-messaging")
}Bildirim İzni
Android 13 (API 33) ve sonraki sürümlerde bildirim göndermek için çalışma zamanı izni olan POST_NOTIFICATIONS gerekir.
Bu izni bildirim dosyasında tanımlayın, ardından çalışma zamanında isteyin — izin verilmezse bildirimleriniz sessizce yok sayılır.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />İzin İsteme
Çalışma zamanında POST_NOTIFICATIONS istemek için Activity Result API'sini kullanın. Bu izni yalnızca API 33 ve sonraki sürümlerde isteyin; daha eski sürümlerde izin otomatik olarak verilir.
import android.Manifest
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted ->
println(if (granted) "Notifications allowed" else "Notifications denied")
}
fun askNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}Kayıt Belirteci
Her yüklemenin, onu hedef olarak tanımlayan benzersiz bir FCM belirteci vardır. Bu belirteci Firebase.messaging.token ile alın.
Belirli bir cihaza ileti gönderebilmesi için bu belirteci arka ucunuza gönderin. Belirteçler değişebilir; bu nedenle en son belirteci her zaman geçerli kabul edin.
import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
suspend fun currentToken(): String {
return Firebase.messaging.token.await()
}Messaging Hizmeti
İletileri almak için FirebaseMessagingService sınıfını genişletin. Gelen yükleri işlemek üzere onMessageReceived işlevini, belirteç değiştiğinde tepki vermek üzere onNewToken işlevini geçersiz kılın.
Hizmeti, FCM amaç filtresiyle bildirim dosyasına kaydedin.
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class MyFcmService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
// Upload the fresh token to your backend
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
val title = message.notification?.title ?: "New message"
val body = message.notification?.body ?: ""
showNotification(title, body)
}
private fun sendTokenToServer(token: String) { /* ... */ }
private fun showNotification(title: String, body: String) { /* ... */ }
}Hizmeti Kaydetme
Android'in iletileri hizmetinize iletebilmesi için hizmetinizi bildirim dosyasında tanımlayın. MESSAGING_EVENT amaç filtresi gereklidir.
<!-- AndroidManifest.xml inside <application> -->
<service
android:name=".MyFcmService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>Bildirim ve Veri İletileri
FCM iletileri iki türdür:
- Bildirim iletileri — uygulama arka plandayken FCM bunları otomatik olarak bildirim tepsisinde gösterir;
onMessageReceivedyalnızca uygulama ön plandayken çalışır. - Veri iletileri — her zaman anahtar/değer eşlemesi olarak
onMessageReceivedişlevine iletilir; böylece işleme biçimini siz denetlersiniz.
Özel alanları message.data içinden okuyun.
import com.google.firebase.messaging.RemoteMessage
fun handle(message: RemoteMessage) {
val type = message.data["type"] // your custom field
val itemId = message.data["itemId"]
when (type) {
"chat" -> openChat(itemId)
"promo" -> openPromo(itemId)
}
}
fun openChat(id: String?) {}
fun openPromo(id: String?) {}Bildirim Kanalı Oluşturma
Android 8'den itibaren her bildirim için bir kanal gerekir. Kanalı uygulama başlangıcında bir kez oluşturun; sistem sesi, önem düzeyini ve kullanıcının kanal başına ayarlarını denetlemek için bu kanalı kullanır.
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
fun createChannel(context: Context) {
val channel = NotificationChannel(
"messages",
"Messages",
NotificationManager.IMPORTANCE_HIGH
)
val manager = context.getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}Bildirimi Gösterme
Bildirimi kanal kimliğinize bağlayarak NotificationCompat.Builder ile oluşturun, ardından NotificationManagerCompat ile yayınlayın.
Unutmayın: API 33 ve sonraki sürümlerde bu bildirim yalnızca kullanıcı POST_NOTIFICATIONS iznini verdiyse görünür.
import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
fun showNotification(context: Context, title: String, body: String) {
val notification = NotificationCompat.Builder(context, "messages")
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.build()
NotificationManagerCompat.from(context).notify(1, notification)
}Konu Abonelikleri
Tek tek belirteçleri izlemek yerine bir konuya yayın yapabilirsiniz. İstemciler bir konu adına abone olur ve sunucunuz abone olan herkese tek bir ileti gönderir.
news, sports veya all-users duyuruları gibi amaçlar için kullanışlıdır.
import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
suspend fun subscribeToNews() {
Firebase.messaging.subscribeToTopic("news").await()
}
suspend fun unsubscribeFromNews() {
Firebase.messaging.unsubscribeFromTopic("news").await()
}Hızlı Kontrol
Uygulamanız arka planda ve FCM'den saf bir bildirim iletisi alıyor. Ne olur?
Özet: Cloud Messaging
Artık kullanıcılara push bildirimleriyle ulaşabilirsiniz:
firebase-messagingekleyin ve API 33 ve sonraki sürümlerde POST_NOTIFICATIONS izni isteyin.- Her yüklemenin bir FCM belirteci vardır; bu belirteci sunucunuza yükleyin.
FirebaseMessagingServicesınıfını genişletin veonMessageReceived/onNewTokenişlevlerini geçersiz kılın.- Bildirim iletileri ile veri iletileri arasındaki farkı bilin.
- Bir bildirim kanalı oluşturun,
NotificationCompatile bildirim oluşturun veya konular üzerinden yayın yapın.
Bu, Firebase üçlüsünü tamamlar: Auth, Firestore ve Messaging — Android uygulamanız için eksiksiz bir arka uç.
Sıkça Sorulan Sorular
“Cloud Messaging ile Bildirim Gönderme” dersi ücretsiz mi?
Evet — “Cloud Messaging ile Bildirim Gönderme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.
“Cloud Messaging ile Bildirim Gönderme” dersinde ne öğreneceğim?
FCM bildirimleri gönderip alın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Cloud Messaging ile Bildirim Gönderme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Firebase'i Kurma
- Firebase Kimlik Doğrulaması
- Cloud Firestore Temelleri
- Cloud Messaging ile Bildirim Gönderme