Bu codelab, Advanced Android in Kotlin kursunun bir parçasıdır. Bu kurstan en iyi şekilde yararlanmak için codelab'leri sırayla incelemeniz önerilir ancak bu zorunlu değildir. Kursla ilgili tüm codelab'ler Kotlin'de İleri Düzey Android codelab'leri açılış sayfasında listelenir.
Giriş
Önceki codelab'de, uygulamanızda oluşturulan ve tetiklenen bildirimleri yumurta zamanlayıcınıza eklediniz. Bildirimlerin bir diğer önemli kullanım alanı da uygulamanız çalışmıyorken bile alınabilen anlık bildirimleri uzaktan göndermektir.
Push bildirimi nedir?
Push bildirimleri, sunucunun mobil cihazlara "gönderdiği" bildirimlerdir. Uygulamanız çalışıyor olsun veya olmasın, cihazlara teslim edilebilirler.
Push bildirimleri, kullanıcılara bir güncelleme hakkında bilgi vermenin veya onlara bir görevi ya da özelliği hatırlatmanın harika bir yoludur. Bir ürünün tekrar stokta olmasını beklediğinizi düşünün. Alışveriş uygulamaları, push bildirimi sayesinde stok durumunu her gün kontrol etmenize gerek kalmadan stok güncellemeleri hakkında sizi bilgilendirebilir.
Anlık bildirimler, arka uç uygulamalarının ilgilenen istemcilere alakalı içerik göndermesine olanak tanıyan yayınlama/abone olma modelini kullanır. Yayınlama/abone olma modeli olmadan uygulamanızın kullanıcıları, uygulamanızdaki güncellemeleri düzenli olarak kontrol etmek zorunda kalır. Bu süreç, kullanıcılar için sıkıcı ve güvenilmezdir. Ayrıca, istemci sayısı arttıkça bu düzenli kontroller hem uygulamanızın sunucusu hem de kullanıcının cihazı için ağ ve işleme kaynaklarına çok fazla yük bindirir.
Diğer tüm bildirim türlerinde olduğu gibi, push bildirimleriyle de kullanıcılarınıza saygı gösterin. Bildirim içeriği kullanıcı için ilgi çekici veya zamanında değilse kullanıcı, uygulamanızdan gelen tüm bildirimleri kolayca devre dışı bırakabilir.
Firebase Cloud Messaging nedir?
Firebase Cloud Messaging, mobil geliştirme için Firebase platformunun bir parçasıdır. Genellikle bildirimleri tetiklemek için mobil cihazlarla iletişim kurabilen bir sunucuyu sıfırdan oluşturmanız gerekir. Firebase Cloud Messaging ile sunucu kurmadan, yüklü uygulama kullanıcılarınızın tümüne veya bir alt kümesine bildirim gönderebilirsiniz. Örneğin, kullanıcılara hatırlatma gönderebilir veya onlara ücretsiz hediye gibi özel bir promosyon sunabilirsiniz.Tek bir cihaza veya birden fazla cihaza uzaktan bildirim gönderebilirsiniz.
Ayrıca, arka uç uygulamanızdan veya bir Firebase projesinden kullanıcılarınıza veri aktarmak için Firebase Cloud Messaging'i de kullanabilirsiniz.
Bu codelab'de, Android uygulamanız için push bildirimleri göndermenin yanı sıra veri göndermek üzere Firebase Cloud Messaging'i nasıl kullanacağınızı öğreneceksiniz.
Bu codelab'i uygularken herhangi bir sorunla (kod hataları, dilbilgisi hataları, net olmayan ifadeler vb.) karşılaşırsanız lütfen codelab'in sol alt köşesindeki Hata bildir bağlantısını kullanarak sorunu bildirin.
Bilmeniz gerekenler
Aşağıdaki konular hakkında bilgi sahibi olmanız gerekir:
- Kotlin'de Android uygulamaları oluşturma Özellikle Android SDK ile çalışın.
- Mimari bileşenleri ve veri bağlamayı kullanarak uygulamanızı tasarlama
- Yayın alıcılar hakkında temel bilgi sahibi olmanız gerekir.
- AlarmManager hakkında temel bilgi sahibi olmanız gerekir.
- NotificationManager'ı kullanarak bildirim oluşturma ve gönderme
Neler öğreneceksiniz?
- Firebase Cloud Messaging aracılığıyla kullanıcılara nasıl mesaj gönderilir?
- Firebase Cloud Messaging'in bir parçası olan veri mesajlarını kullanarak arka uçtan uygulamanıza nasıl veri göndereceğinizi öğrenin.
Yapacaklarınız
- Başlangıç uygulamasına push bildirimleri ekleyin.
- Uygulamanız çalışırken Firebase Cloud Messaging'i işleme
- Firebase Cloud Messaging ile veri aktarma
Bu codelab'de, Android Uygulamalarında Bildirimleri Kullanma adlı önceki codelab'deki kod üzerinde çalışacaksınız. Önceki codelab'de, pişirme zamanlayıcısı dolduğunda bildirim gönderen bir yumurta zamanlayıcı uygulaması oluşturmuştunuz. Bu codelab'de, uygulama kullanıcılarını yumurta yemeye hatırlatmak için onlara push bildirimleri göndermek üzere Firebase Cloud Messaging'i ekleyeceksiniz.
Örnek uygulamayı edinmek için:
Depoyu GitHub'dan kopyalayın ve starter dalına geçin:
$ git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm
Alternatif olarak, depoyu Zip dosyası olarak indirebilir, dosyayı açıp Android Studio'da açabilirsiniz.
1. adım: Firebase projesi oluşturun
Firebase'i Android uygulamanıza ekleyebilmeniz için öncelikle Android uygulamanıza bağlanacak bir Firebase projesi oluşturmanız gerekir.
- Firebase konsoluna giriş yapın.
- Proje ekle'yi tıklayın, ardından bir Proje adı seçin veya girin. Projenizi fcm-codelab olarak adlandırın.
- Devam'ı tıklayın.
- Bu proje için Google Analytics'i etkinleştir düğmesini kapatarak Google Analytics'i ayarlamayı atlayabilirsiniz.
- Firebase projesini oluşturma işlemini tamamlamak için Proje Oluştur'u tıklayın.
2. adım: Uygulamanızı Firebase'e kaydedin
Firebase projeniz olduğuna göre Android uygulamanızı bu projeye ekleyebilirsiniz.
- Kurulum iş akışını başlatmak için Firebase konsolunun proje genel bakış sayfasının ortasındaki Android simgesini tıklayın.
- Android paket adı alanına
com.example.android.eggtimernotifications
girin. - Uygulamayı kaydet'i tıklayın.
Önemli: Uygulamanızı Firebase projenize kaydettikten sonra bu değeri ekleyemeyeceğiniz veya değiştiremeyeceğiniz için uygulamanızın kimliğini doğru girdiğinizden emin olun.
3. adım: Firebase yapılandırma dosyasını projenize ekleyin
Firebase Android yapılandırma dosyasını uygulamanıza ekleyin.
- Firebase Android yapılandırma dosyanızı (
google-services.json
) edinmek için Download google-services.json'u (google-services.json'u indir) tıklayın. Yapılandırma dosyasına ek karakterler eklenmediğinden ve dosyanın adının tam olarakgoogle-services.json
olduğundan emin olun. - Yapılandırma dosyanızı uygulamanızın modül (uygulama düzeyi) dizinine taşıyın.
4. adım: Android projenizi Firebase ürünlerini etkinleştirecek şekilde yapılandırın
Uygulamanızda Firebase ürünlerini etkinleştirmek için Gradle dosyalarınıza google-services eklentisini eklemeniz gerekir.
- Kök düzeyindeki (proje düzeyinde) Gradle dosyanızda (
build.gradle
) Google'ın Maven deposunun olup olmadığını kontrol edin. - Ardından, Google Hizmetleri eklentisini dahil edecek kurallar ekleyin.
build.gradle
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// ...
// Add the following line:
classpath 'com.google.gms:google-services:4.3.2' // Google Services plugin
}
}
allprojects {
// ...
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
// ...
}
}
- Modül (uygulama düzeyi) Gradle dosyanızda (genellikle
app/build.gradle
) eklentiyi uygulamak için dosyanın en altına bir satır ekleyin.
app/build.gradle
apply plugin: 'com.android.application'
android {
// ...
}
// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services' // Google Play services Gradle plugin
Bu görevde, push bildirimlerinden yararlanmak için projenize Firebase Cloud Messaging'i (FCM) ekleyeceksiniz.
Bu codelab'deki FCM için Android hizmet kodu MyFirebaseMessagingService.kt
içinde verilmiştir. Aşağıdaki adımlarda Android uygulamanıza kod ekleyeceksiniz.
Uygulamanızı test etmek için Bildirim oluşturucu'yu kullanacaksınız. Bildirim Oluşturucu, Firebase konsolu web sitesinden mesaj oluşturup göndermenize yardımcı olan bir araçtır.
MyFirebaseMessagingService.kt
uygulamasını aç- Dosyayı ve özellikle aşağıdaki işlevleri inceleyin:
onNewToken()
—Hizmetiniz Android manifestinde kayıtlıysa otomatik olarak çağrılır. Bu işlev, uygulamanızı ilk kez çalıştırdığınızda ve Firebase, uygulamanız için her yeni jeton verdiğinde çağrılır. Jeton, Firebase arka uç projenizin erişim anahtarıdır. Bu anahtar, belirli istemci cihazınız için oluşturulur. Firebase, bu jeton sayesinde arka ucun hangi istemciye mesaj göndermesi gerektiğini bilir. Firebase, bu istemcinin geçerli olup olmadığını ve bu Firebase projesine erişimi olup olmadığını da bilir.onMessageReceived
: Uygulamanız çalışırken ve Firebase uygulamanıza mesaj gönderdiğinde çağrılır. Bu işlev, bildirim veya veri mesajı yükü taşıyabilen birRemoteMessage
nesnesi alır. Bildirimler ve veri mesajı yükleri arasındaki farklar hakkında daha fazla bilgiyi bu codelab'in ilerleyen bölümlerinde edineceksiniz.
1. adım: Tek bir cihaza FCM bildirimi gönderme
Bildirimler konsolu, bildirim göndermeyi test etmenize olanak tanır. Konsolu kullanarak belirli bir cihaza mesaj göndermek için bu cihazın kayıt jetonunu bilmeniz gerekir.
Firebase arka ucu yeni veya yenilenmiş bir jeton oluşturduğunda onNewToken()
işlevi çağrılır ve yeni jeton bağımsız değişken olarak iletilir. Tek bir cihazı hedeflemek veya yayın mesajı göndermek istediğiniz bir cihaz grubu oluşturmak istiyorsanız FirebaseMessagingService
öğesini genişleterek ve onNewToken()
öğesini geçersiz kılarak bu jetona erişmeniz gerekir.
AndroidManifest.xml
dosyasını açın ve zamanlayıcı uygulaması içinMyFirebaseMessagingService
'yi etkinleştirmek üzere aşağıdaki kodun yorum işaretini kaldırın. Android manifest'teki hizmet meta verileri,MyFirebaseMessagingService
'yi hizmet olarak kaydeder ve bu hizmetin FCM'den gönderilen mesajları alması için bir amaç filtresi ekler. Meta verilerin son bölümünde, Firebase içinbreakfast_notification_channel_id
,default_notification_channel_id
olarak tanımlanır. Bu kimliği sonraki adımda kullanacaksınız.
<!-- AndroidManifest.xml -->
<!-- TODO: Step 3.0 uncomment to start the service -->
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- [START fcm_default_icon] -->
<!--
Set custom default icon. This is used when no icon is set for incoming notification messages.
See README(https://goo.gl/l4GJaQ) for more.
-->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/common_google_signin_btn_icon_dark"/>
<!--
Set color used with incoming notification messages. This is used when no color is set for the incoming
notification message. See README(https://goo.gl/6BKBk7) for more.
-->
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent"/> <!-- [END fcm_default_icon] -->
<!-- [START fcm_default_channel] -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/breakfast_notification_channel_id" />
<!-- [END fcm_default_channel] -->
Kullanıcılarınız yumurta zamanlayıcı veya FCM push bildirimlerini ayrı ayrı etkinleştirmek/devre dışı bırakmak isteyebileceğinden FCM için yeni bir bildirim kanalı oluşturmanız önerilir.
ui/EggTimerFragment.kt
uygulamasını açın .onCreateView()
bölümüne aşağıdaki kanal oluşturma kodunu ekleyin.
// EggTimerFragment.kt
// TODO: Step 3.1 create a new channel for FCM
createChannel(
getString(R.string.breakfast_notification_channel_id),
getString(R.string.breakfast_notification_channel_name)
)
MyFirebaseMessagingService.kt
dosyasını açın veonNewToken()
işlevinin yorumunu kaldırın. Bu işlev, yeni bir jeton oluşturulduğunda çağrılır.
// MyFirebaseMessagingService.kt
// TODO: Step 3.2 log registration token
// [START on_new_token]
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the
* InstanceID token is initially generated so this is where you would retrieve
* the token.
*/
override fun onNewToken(token: String?) {
Log.d(TAG, "Refreshed token: $token")
// If you want to send messages to this application instance or
// manage this apps subscriptions on the server side, send the
// Instance ID token to your app server.
sendRegistrationToServer(token)
}
// [END on_new_token]
- Yumurta zamanlayıcı uygulamasını çalıştırın.
- Logcat'i gözlemleyin (Görünüm > Araç Pencereleri > Logcat). Aşağıdakine benzer bir jetonunuzu gösteren bir günlük satırı görmeniz gerekir. Bu, cihaza mesaj göndermek için gereken jetondur. Bu işlev yalnızca yeni bir jeton oluşturulduğunda çağrılır.
2019-07-23 13:09:15.243 2312-2459/com.example.android.eggtimernotifications D/MyFirebaseMsgService: Refreshed token: f2esflBoQbI:APA91bFMzNNFaIskjr6KIV4zKjnPA4hxekmrtbrtba2aDbh593WQnm11ed54Mv6MZ9Yeerver7pzgwfKx7R9BHFffLBItLEgPvrtF0TtX9ToCrXZ5y7Hd-m
Not: Logcat mesajlarında jetonu görmüyorsanız uygulamanız daha önce jetonu almış olabilir. Bu durumda, uygulamayı kaldırmak yeni bir jeton almanıza yardımcı olur.
Artık bildirim göndererek test edebilirsiniz. Bildirim göndermek için Bildirim oluşturucu'yu kullanırsınız.
- Firebase konsolunu açıp projenizi seçin.
- Ardından, soldaki gezinme menüsünden Cloud Messaging'i seçin.
- İlk mesajınızı gönderin'i tıklayın.
- Bildirim başlığı olarak
Time for Breakfast!
, bildirim metni olarakDon't forget to eat eggs!
girin ve Test mesajı gönder'i seçin. FCM kayıt jetonu sağlamanızı isteyen Cihazda test et pop-up iletişim kutusu gösterilir.
- Uygulama jetonunuzu logcat'ten kopyalayın.
- Bu jetonu pop-up penceresindeki FCM kayıt jetonu ekleyin alanına yapıştırın, ardından jetonun yanındaki Ekle düğmesini tıklayın.
- Görüntülenen onay kutusu listesinde jetonu seçin. Test düğmesi etkinleştirilmelidir.
- Cihazınızda Yumurta Zamanlayıcı uygulamasını arka plana alın.
- Pop-up pencerede Test et'i tıklayın.
- Test'i tıkladıktan sonra, uygulamanızın arka planda çalıştığı hedef istemci cihazı, sistem bildirimleri tepsisinde bildirimi almalıdır. (Uygulamanız ön plandayken FCM mesajlarını nasıl işleyeceğiniz hakkında daha fazla bilgiyi sonraki bölümlerde bulabilirsiniz.)
Görev: Bir konuya FCM bildirimleri gönderme
FCM konu mesajlaşması, yayınlama/abone olma modeline dayanır.
Mesajlaşma uygulaması, Yayınlama/Abone Olma modeli için iyi bir örnek olabilir. Bir uygulamanın her 10 saniyede bir yeni mesajları kontrol ettiğini düşünün. Bu durum yalnızca telefonunuzun pilini tüketmekle kalmaz, aynı zamanda gereksiz ağ kaynakları kullanır ve uygulamanızın sunucusunda gereksiz yük oluşturur. Bunun yerine, bir istemci cihaz abone olabilir ve uygulamanız aracılığıyla yeni mesajlar teslim edildiğinde bildirim alabilir.
Konular, belirli bir konuyu etkinleştiren birden fazla cihaza mesaj göndermenize olanak tanır. Müşteriler için konular, müşterinin ilgilendiği belirli veri kaynaklarıdır. Sunucu için konular, belirli bir veri kaynağıyla ilgili güncellemeleri almayı kabul eden cihaz gruplarıdır. Konular, haberler, hava durumu tahminleri ve spor sonuçları gibi bildirim kategorilerini sunmak için kullanılabilir. Bu codelab bölümünde, ilgili uygulama kullanıcılarına kahvaltıda yumurta yemelerini hatırlatmak için "kahvaltı" konusu oluşturacaksınız.
Bir konuya abone olmak için istemci uygulaması, konu adıyla breakfast
Firebase Cloud Messaging subscribeToTopic(
)
işlevini çağırır. Bu görüşmenin iki sonucu olabilir. Arayan kişi başarılı olursa OnCompleteListener
geri çağırma işlevi, abone olunan mesajla birlikte çağrılır. İstemci abone olamazsa geri çağırma işlemi bunun yerine bir hata mesajı alır.
Uygulamanızda, kullanıcılarınız kahvaltı konusuna otomatik olarak abone olur. Ancak çoğu üretim uygulamasında, kullanıcıların hangi konulara abone olacağını kontrol etmesine izin vermek daha iyidir.
EggTimerFragment.kt
simgesini açın ve boşsubscribeTopic()
işlevini bulun.FirebaseMessaging
örneğini alın ve konu adıylasubscibeToTopic()
işlevini çağırın.- Aboneliğinizin başarılı olup olmadığı konusunda FCM'den bildirim almak için
addOnCompleteListener
ekleyin.
// EggTimerFragment.kt
// TODO: Step 3.3 subscribe to breakfast topic
private fun subscribeTopic() {
// [START subscribe_topics]
FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
.addOnCompleteListener { task ->
var msg = getString(R.string.message_subscribed)
if (!task.isSuccessful) {
msg = getString(R.string.message_subscribe_failed)
}
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
}
// [END subscribe_topics]
}
- Uygulama başladığında bir konuya abone olmak için
subscribeTopic()
işlevini çağırın.onCreateView()
bölümüne gidin vesubscribeTopic()
bölümüne bir açıklama ekleyin.
// EggTimerFragment.kt
// TODO: Step 3.4 call subscribe topics on start
subscribeTopic()
return binding.root
- Kahvaltı konusuna abone olmak için uygulamayı tekrar çalıştırın. "Konuya abone olundu" şeklinde bir pop-up mesaj görürsünüz.
Artık bir konuya mesaj göndermeyi test edebilirsiniz:
- Bildirim oluşturucu'yu açın ve Bildirim Oluştur'u seçin.
- Bildirim Bildirim başlığı ve Bildirim metni'ni daha önce olduğu gibi ayarlayın.
- Bu kez iletiyi tek bir cihaza göndermek yerine Hedef bölümünde Konu'yu tıklayın ve ileti konusu olarak
breakfast
girin.
- Planlama için Hemen'i seçin.
- Uygulamanızın test cihazınızda arka planda çalıştığından emin olun.
- İncele'yi ve ardından Yayınla'yı tıklayın. Uygulamayı birden fazla cihazda çalıştırabiliyorsanız bildirimin bu konuya abone olan tüm cihazlarda alındığını test edip gözlemleyebilirsiniz.
Uygulamada artık bildirimler için Yumurta ve Kahvaltı kanalları var. İstemci cihazda uygulama simgesini uzun tıklayın, Bilgi'yi seçin ve Bildirimler'i tıklayın. Aşağıdaki ekran görüntüsünde gösterildiği gibi Yumurta ve Kahvaltı bildirim kanallarını görmeniz gerekir. Breakfast kanalının seçimini kaldırırsanız uygulamanız bu kanal üzerinden gönderilen bildirimleri almaz.
Bildirimleri kullanırken kullanıcıların bildirim kanallarını diledikleri zaman kapatabileceğini unutmayın.
1. adım: Veri mesajları
FCM mesajları, istemci uygulamasındaki mesajları işleyen bir veri yükü de içerebilir. Bu durumda, bildirim mesajları yerine veri mesajları kullanın.
Veri mesajlarını işlemek için MyFirebaseMessagingService
işlevinin onMessageReceived()
bölümündeki veri yükünü işlemeniz gerekir. Yük, remoteMessage
nesnesinin data
özelliğinde saklanır. Hem remoteMessage
nesnesi hem de data
özelliği null
olabilir.
MyFirebaseMessagingService.
uygulamasını açremoteMessage
nesnesinindata
özelliğinin bir değeri olup olmadığını kontrol edin ve verileri günlükte yazdırın.
// MyFirebaseMessagingService.kt
// [START receive_message]
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
// Not getting messages here? See why this may be: https://goo.gl/39bRNJ
Log.d(TAG, "From: ${remoteMessage?.from}")
// TODO: Step 3.5 check messages for data
// Check if the message contains a data payload.
remoteMessage?.data?.let {
Log.d(TAG, "Message data payload: " + remoteMessage.data)
}
}
// [END receive_message]
Kodunuzu test etmek için Bildirim Oluşturucu'yu tekrar kullanabilirsiniz.
- Bildirim yazma aracını açın, yeni bir mesaj oluşturun ve Hedef 'i "kahvaltı" konusuna ayarlayın.
- Bu kez 4. adıma, Ek seçenekler'e geldiğinizde Özel veriler anahtar ve değer özelliklerini aşağıdaki gibi ayarlayın:
- Anahtar:
eggs
- Değer:
3
- Uygulamanızın ön planda çalıştığından emin olun. Uygulamanız arka plandaysa FCM mesajı otomatik bir bildirimi tetikler ve kullanıcı bildirimi tıkladığında
onMessageReceived()
işlevi yalnızcaremoteMessage
nesnesini alır. - İletiyi Bildirim Oluşturucu'dan gönderin ve logcat'te görünen veri mesajı günlüğünü inceleyin.
2. adım: İletileri ön planda ve arka planda işleme
Uygulamanızın çalıştığı bir istemci cihazı hem bildirim hem de veri yükleri içeren bir mesaj aldığında uygulamanın davranışı, uygulamanızın bu cihazda arka planda mı yoksa ön planda mı olduğuna bağlıdır:
- Uygulama arka planda çalışıyorsa ve iletide bildirim yükü varsa bildirim tepsisinde otomatik olarak gösterilir. İletide veri yükü de varsa kullanıcı bildirime dokunduğunda veri yükü uygulama tarafından işlenir.
- Uygulama ön planda çalışıyorsa ve mesaj bildiriminde bildirim yükü varsa bildirim otomatik olarak görünmez. Uygulamanın, bildirimi
onMessageReceived()
işlevinde nasıl işleyeceğine karar vermesi gerekir. Mesajda veri yükü de varsa her iki yük de uygulama tarafından işlenir.
Bu codelab'in amacı doğrultusunda, uygulama kullanıcısına kahvaltıda yumurta yemesi gerektiğini hatırlatmak istiyorsunuz. Herhangi bir veri göndermeyi planlamıyorsunuz ancak uygulama ön planda veya arka planda olsa da hatırlatma bildiriminin her zaman görünmesini istiyorsunuz.
Yumurta zamanlayıcı uygulamasının yüklü olduğu cihazlara FCM mesajı gönderdiğinizde, uygulama çalışmıyorsa veya arka plandaysa bildirim mesajı otomatik olarak gösterilir. Ancak uygulama ön planda çalışıyorsa bildirim otomatik olarak gösterilmez. Bunun yerine, uygulamanın kodu mesajla ne yapılacağına karar verir. Uygulama bir FCM mesajı aldığında ön plandaysa onMessageReceived()
işlevi FCM mesajıyla birlikte otomatik olarak tetiklenir. Uygulamanız burada bildirim ve veri yüklerini sessizce işleyebilir veya bir bildirimi tetikleyebilir.
Uygulamanız için, kullanıcıya uygulama ön plandayken hatırlatma gönderildiğinden emin olmak istiyorsunuz. Bu nedenle, bildirimi tetikleyecek bazı kodlar uygulayalım:
onMessageReceived()
işleviniMyFirebaseMessagingService
içinde tekrar açın.- Veri mesajını kontrol etmek için kısa süre önce eklediğiniz kodun hemen ardından, bildirim çerçevesini kullanarak bildirim gönderen aşağıdaki kodu ekleyin.
// MyFirebaseMessagingService.kt
// TODO: Step 3.6 check messages for notification and call sendNotification
// Check if the message contains a notification payload.
remoteMessage.notification?.let {
Log.d(TAG, "Message Notification Body: ${it.body}")
sendNotification(it.body as String)
}
- Uygulamayı tekrar çalıştırıp Bildirim Oluşturucu'yu kullanarak bildirim gönderirseniz uygulama ön planda veya arka planda olmasına bakılmaksızın, codelab'in ilk bölümünde gördüğünüz gibi bir bildirim görmeniz gerekir.
Çözüm kodu, indirdiğiniz kodun ana dalındadır.
FirebaseMessagingService
'ı genişleterek bir FCM BroadcastReceiver uygulayın.- Firebase Cloud Messaging (FCM) projesi oluşturun ve FCM'yi Android uygulamanıza ekleyin.
- Bildirim oluşturucu ile push bildirimleri göndererek uygulamanızı test edin.
FirebaseMessaging
sınıfınınsubscribeToTopic()
işlevini çağırarak FCM konularına abone olun.RemoteMessage
nesnesi kullanarak veri yükü gönderin.onMessageReceived()
işlevindeki verileri işleyin.- Uygulama ön plandayken ve arka plandayken FCM'yi işleyecek mantık ekleyin.
Udacity kursu:
Firebase belgeleri:
Bu kurstaki diğer codelab'lerin bağlantıları için Advanced Android in Kotlin codelab'leri açılış sayfasına bakın.