Bu codelab, Kotlin'deki Gelişmiş Android kursuna dahildir. Codelab'ler sırasında sırayla çalıştığınızda bu kurstan en yüksek değeri elde edersiniz ancak zorunlu değildir. Tüm kurs codelab'leri Kotlin Codelab'de Gelişmiş Android açılış sayfasında listelenmiştir.
Giriş
Önceki codelab'de, yumurta zamanlayıcınıza uygulamanızda oluşturulan ve tetiklenen bildirimleri eklediniz. Bildirimlerin önemli bir diğer kullanım alanı da, uygulamanız çalışmıyorken bile alınabilen push bildirimleri göndermektir.
Push bildirimi nedir?
Push bildirimleri, sunucunun mobil cihazlara gönderdiği bildirimlerdir. Bunlar, uygulamanızın çalışıp çalışmadığına bakılmaksızın bir cihaza teslim edilebilir.
Push bildirimleri, kullanıcıları bir güncelleme hakkında bilgilendirmenin veya bir görevi ya da özelliği hatırlatmanın mükemmel bir yoludur. Bir ürünün tekrar stokta olmasını beklediğinizi düşünün. Alışveriş uygulaması, push bildirimi sayesinde hisse senetlerinin durumunu her gün kontrol etmeniz gerekmeden size bilgi verebilir.
Push bildirimleri, arka uç uygulamalarının ilgili içeriği ilgili müşterilere aktarmasına olanak tanıyan yayınla/abone ol kalıbını kullanır. Yayınlama/abone olma modeli olmadan, uygulamanızın kullanıcılarının uygulamanızdaki güncellemeleri düzenli olarak kontrol etmesi gerekir. Bu yorucu ve kullanıcılar için güvenilir değildir. Ayrıca, istemci sayısı arttıkça bu periyodik kontroller hem uygulama sunucunuz hem de bir kullanıcının cihazı için ağ iletişimi ve işleme kaynaklarına çok fazla yük getirir.
Diğer tüm bildirim türlerinde olduğu gibi push bildirimlerinde de kullanıcılarınıza saygı gösterin. Bildirim içeriği kullanıcı için ilginç veya zamanında ilgilenmiyorsa uygulamanızın tüm bildirimlerini kolayca kapatabilir.
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 kurabilecek bir sunucuyu sıfırdan kurmanız gerekir. Firebase Cloud Messaging ile, sunucu oluşturmadan tüm yüklü uygulama kullanıcılarınıza veya bunların bir alt grubuna bildirim gönderebilirsiniz. Örneğin, kullanıcılara hatırlatıcı gönderebilir veya ücretsiz bir hediye gibi özel bir promosyon sunabilirsiniz.Bildirimi tek bir cihaza veya birden fazla cihaza uzaktan aktarabilirsiniz.
Arka uç uygulamanızdan veya bir Firebase projesinden kullanıcılarınıza veri aktarmak için Firebase Cloud Messages'ı da kullanabilirsiniz.
Bu codelab'de, Android uygulamanız için push bildirimleri göndermek ve veri göndermek için Firebase Cloud Messaging'i nasıl kullanacağınızı öğreneceksiniz.
Bu codelab'den çalışırken herhangi bir sorunla (kod hataları, dil bilgisi hataları, belirsiz 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 olmalısınız:
- Kotlin'de Android uygulamaları oluşturma. Özellikle Android SDK ile çalışın.
- Mimari bileşenler ve veri bağlama kullanarak uygulamanızı tasarlama.
- Yayın alıcılarıyla ilgili temel bilgiler.
- AlarmManager'ın temel bir anlayışı.
- Bildirim Yöneticisi'ni kullanarak bildirim oluşturma ve gönderme.
Neler öğreneceksiniz?
- Firebase Cloud Messaging aracılığıyla kullanıcıya mesaj aktarma.
- Firebase Cloud Messaging'ın bir parçası olan veri mesajlarını kullanarak arka uçtan uygulamanıza veri gönderme.
Yapacaklarınız
- Başlangıç uygulamasına push bildirimleri ekleyin.
- Uygulamanız çalışırken Firebase Cloud Messaging'i yönetin.
- Verileri Firebase Cloud Messaging ile aktarın.
Bu codelab'de, Android Uygulamaları Codelab'deki Önceki Kullanım Bildirimleri'nde yer alan kod üzerinde çalışacaksınız. Önceki codelab'de, pişirme zamanlayıcının süresi dolduğunda bildirim gönderen bir yumurta zamanlayıcı uygulaması geliştirdiniz. Bu codelab'de, uygulama kullanıcılarınıza yumurta yemesini hatırlatan push bildirimleri göndermek için Firebase Cloud Messaging'i ekleyeceksiniz.
Örnek uygulamayı edinmek için aşağıdakilerden birini yapabilirsiniz:
Depoyu GitHub'dan klonlayın ve starter dalına geçin:
$ git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm
Alternatif olarak, veri havuzunu Zip dosyası olarak indirip sıkıştırılmış dosyayı Android Studio'da açabilirsiniz.
1. Adım: Firebase projesi oluşturun
Firebase'i Android uygulamanıza eklemeden önce, 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. Projenize fcm-codelab adını verin.
- Devam'ı tıklayın.
- Bu proje için Google Analytics'i etkinleştir düğmesini kapatarak Google Analytics'i ayarlamayı atlayabilirsiniz.
- Firebase projesini ayarlamayı tamamlamak için Proje Oluştur'u tıklayın.
2. Adım: Uygulamanızı Firebase'e kaydedin
Artık bir Firebase projeniz olduğu için Android uygulamanızı projenize ekleyebilirsiniz.
- Firebase konsolunun proje genel bakış sayfasının ortasındaki Android simgesini tıklayarak kurulum iş akışını başlatı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 ekleyemez veya değiştiremezsiniz. Bu nedenle, uygulamanız için doğru kimliği 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
) almak için google-services.json dosyasını indir'i tıklayın. Yapılandırma dosyasının başka karakterlerle eklenmediğinden ve tam olarakgoogle-services.json
olarak adlandırıldığından 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ştirmek için 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üzeyindeki) Gradle dosyanızda (
build.gradle
) Google''ın Maven deposuna sahip olduğunuzdan emin olun. - Ardından, Google Hizmetleri eklentisini içerecek 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 dosyanın alt kısmına uygulamak için bir satır ekleyin.
uygulama/derleme.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 Firebase Cloud Messaging (FCM)'yi projenize eklersiniz.
Bu codelab'in FCM Android hizmet kodu MyFirebaseMessagingService.kt
olarak 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 şu işlevleri inceleyin:
onNewToken()
: Hizmetiniz Android manifest'inde 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 yayınladığında çağrılır. Jeton, Firebase arka uç projenize erişim anahtarıdır. Belirli bir istemci cihazınız için oluşturulur. Bu jetonla Firebase, 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 bir mesaj gönderir. Bu işlev, bildirim veya veri mesajı yükü taşıyabilen birRemoteMessage
nesnesi alır. Bu codelab'de daha sonra bildirimler ve veri mesajı yükü arasındaki farklar hakkında daha fazla bilgi edineceksiniz.
1. Adım: FCM bildirimlerini tek bir cihaza gönderme
Bildirimler konsolu, bildirim göndermeyi test etmenize olanak tanır. Konsolu kullanarak belirli bir cihaza mesaj göndermek için söz konusu 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 aktarılır. Tek bir cihazı hedeflemek veya anons mesajı göndermek istediğiniz bir cihaz grubu oluşturmak istiyorsanız FirebaseMessagingService
süresini uzatıp onNewToken()
değerini geçersiz kılarak bu jetona erişmeniz gerekir.
AndroidManifest.xml
uygulamasını açın ve yumurta zamanlayıcı uygulamasındaMyFirebaseMessagingService
işlevini etkinleştirmek için aşağıdaki kodun açıklamasını kaldırın. Android manifest dosyasındaki hizmet meta verileri,MyFirebaseMessagingService
hizmetini hizmet olarak kaydeder ve bu hizmetin FCM'den gönderilen mesajları alması için bir amaç filtresi ekler. Meta verilerin son kısmındabreakfast_notification_channel_id
, Firebase içindefault_notification_channel_id
olarak tanımlanmıştı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ıyı veya FCM push bildirimlerini ayrı ayrı etkinleştirmek/devre dışı bırakmak isteyebileceği için FCM için yeni bir bildirim kanalı oluşturmak iyi bir fikirdir.
ui/EggTimerFragment.kt
uygulamasını açın.onCreateView()
içinde, 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
işlevini açın veonNewToken()
işlevinin açıklamasını 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.
- Logcat'i gözlemleyin (View > Tool Windows > Logcat). Jetonunuzu aşağıdakine benzer bir günlük satırı göreceksiniz. Bu jeton, bu cihaza mesaj gönderebilmek 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: Bu jetonu logcat mesajlarında görmüyorsanız uygulamanız daha önce jetona sahip olabilir. Bu durumda, uygulamanın yüklemesini kaldırmak yeni bir jeton almanıza yardımcı olur.
Artık bildirim göndererek test gerçekleştirebilirsiniz. Bildirim göndermek için Bildirim oluşturucuyu kullanırsınız.
- Firebase Konsolu'nu açın ve projenizi seçin.
- Ardından, sol taraftaki 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 iletisi gönder'i seçin. FCM kayıt jetonu sağlamanızın istendiği Cihazda test et pop-up iletişim kutusu görünür.
- Uygulama jetonunuzu logcat'ten kopyalayın.
- Bu jetonu pop-up penceredeki FCM kayıt jetonu ekle alanına yapıştırın ve jetonun yanındaki Add (Ekle) düğmesini tıklayın.
- Görüntülenen onay kutusu listesinde jetonu seçin. Test et düğmesi etkinleştirilmelidir.
- Cihazınızda Yumurta Zamanlayıcı uygulamasını arka plana yerleştirin.
- Pop-up'ta Test et'i tıklayın.
- Test et'i tıkladıktan sonra, uygulamanızın arka planda çalıştığı hedeflenen istemci cihazı, bildirimi sistem bildirimleri tepsisinde alır. (Uygulamanız daha sonra ön plandaysa FCM mesajlarının nasıl ele alınacağı hakkında daha fazla bilgi göreceksiniz.)
Görev: FCM Bildirimlerini Bir Konuya Gönderme
FCM konu mesajı yayınlama/abone olma modeline dayanır.
Mesajlaşma uygulaması, Yayınla/Abone Ol modeli için iyi bir örnek olabilir. Bir uygulamanın yeni mesajları 10 saniyede bir kontrol ettiğini düşünün. Bu sadece telefonunuzun pilini bitirmekle kalmaz, aynı zamanda gereksiz ağ kaynaklarını kullanır ve uygulamanızın sunucusunda gereksiz bir yük oluşturur. Bunun yerine bir istemci cihazı abone olabilir ve uygulamanız üzerinden teslim edilen yeni mesajlar olduğunda bildirim alabilir.
Konular, ilgili 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, haber, hava durumu tahminleri ve spor sonuçları gibi bildirim kategorileri sunmak için kullanılabilir. Codelab'in bu bölümünde, ilgili uygulama kullanıcılarına kahvaltıda yumurta yemelerini hatırlatan "kahvaltı" başlığı oluşturacaksınız.
İstemci uygulaması, bir konuya abone olmak için Firebase Cloud Messaging subscribeToTopic(
)
işlevini breakfast
konu adıyla çağırır. Bu aramanın iki sonucu olabilir. Arayan başarılı olursa OnCompleteListener
geri çağırması abone olunan mesajla çağrılır. İstemci abone olmazsa geri arama bunun yerine bir hata mesajı alır.
Uygulamanızda, kullanıcılarınızın kahvaltı konusuna otomatik olarak abone olmasını sağlarsınız. Bununla birlikte, çoğu üretim uygulamasında, kullanıcılara hangi konulara abone olacakları konusunda kontrol sahibi olmak daha iyidir.
EggTimerFragment.kt
öğesini açın ve boşsubscribeTopic()
işlevini bulun.FirebaseMessaging
öğesinin bir ö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 bir
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 arayın.onCreateView()
için yukarı kaydırın vesubscribeTopic()
numaralı telefona bir arama 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" yazan bir kısa mesaj görmeniz gerekir.
Artık bir konuya ileti göndermeyi test edebilirsiniz:
- Bildirim oluşturucu'yu açın ve Bildirim Oluştur'u seçin.
- Bildirim Bildirimi başlığı ve Bildirim metni'ni eskisi gibi ayarlayın.
- Bu kez, iletiyi tek bir cihaza göndermek yerine, Hedef altında Konu'yu tıklayın ve mesaj konusu olarak
breakfast
yazın.
- Planlama için Şimdi'yi 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ırabilirseniz bildirimin bu konuya abone olan tüm cihazlarda alındığını test edebilir ve gözlemleyebilirsiniz.
Uygulama artık bildirimler için şu kanallara sahip: Yavru ve Kahvaltı. İ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örebilirsiniz. Kahvaltı: 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 herhangi bir bildirim kanalını istedikleri 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. Bildirim mesajları yerine veri mesajlarını kullanın.
Veri mesajlarını işleyebilmek için MyFirebaseMessagingService
öğesinin onMessageReceived()
işlevindeki veri yükünü işlemeniz gerekir. Yük, remoteMessage
nesnesinin data
özelliğinde depolanır. Hem remoteMessage
nesnesi hem de data
özelliği null
olabilir.
MyFirebaseMessagingService.
uygulamasını açremoteMessage
nesnesinindata
özelliğinin bir değer içerip içermediğini kontrol edin ve verileri günlüğe 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şturucuyu tekrar kullanabilirsiniz.
- Bildirim oluşturucuyu açın, Hedef değerini "kahvaltı" konusu olarak ayarlayarak yeni bir mesaj oluşturun.
- Bu kez, 4. adım olan Ek seçenekler'e geldiğinizde Özel veri anahtarını ve değer özelliklerini şu şekilde 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 bildirim tetikler ve
onMessageReceived()
işlevi sadece kullanıcı bildirimi tıkladığındaremoteMessage
nesnesini alır. - Bildirim oluşturucudan mesajı gönderin ve logcat'te görünen veri mesajı günlüğünü inceleyin.
2. Adım: Ön ve arka planda iletileri işleme
Uygulamanızı çalıştıran bir istemci cihazı hem bildirim hem de veri yüklerini içeren bir mesaj aldığında, uygulamanın davranışı arka planda mı yoksa söz konusu cihazda ön planda mı olduğuna bağlıdır:
- Uygulama arka planda çalışıyorsa iletinin bir bildirim yükü varsa bildirim, bildirim tepsisinde otomatik olarak gösterilir. Mesajda bir veri yükü de varsa kullanıcı bildirime dokunduğunda veri yükü uygulama tarafından işlenir.
- Uygulama ön planda çalışıyorsa mesaj bildiriminde bildirim yükü varsa bildirim otomatik olarak gösterilmez. Uygulamanın,
onMessageReceived()
işlevindeki bildirimi nasıl ele alacağına karar vermesi gerekir. Mesajda veri yükü de varsa her iki yük de uygulama tarafından işlenir.
Bu codelab'in amacına uygun olarak uygulama kullanıcısına kahvaltıda yumurta vermesi gerektiğini hatırlatmak istiyorsunuz. Veri göndermeyi planlamıyor ancak uygulamanın ön planda veya arka planda bulunmasına bakılmaksızın hatırlatıcı bildiriminin her zaman göründüğünden emin olmak istiyorsunuz.
Yumurta zamanlayıcı uygulamasının yüklü olduğu cihazlara bir 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, mesajla ne yapılacağına uygulamanın kodu karar verir. Uygulama bir FCM mesajı aldığında ön plandaysa onMessageReceived()
işlevi, FCM mesajıyla otomatik olarak tetiklenir. Bu aşamada uygulamanız, bildirim ve veri yüklerini sessizce işleyebilir veya bildirim tetikleyebilir.
Uygulamanızda, uygulama ön plandayken kullanıcının hatırlatıcıyı aldığından emin olmak istersiniz. Bu yüzden bir bildirimi tetiklemek için birkaç kod uygulayalım:
onMessageReceived()
işleviniMyFirebaseMessagingService
içinde tekrar açın.- Veri mesajını kontrol etmek için yakın zamanda eklediğiniz koddan hemen sonra, 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ır ve Bildirimler oluşturucuyu kullanarak bir bildirim gönderirseniz, uygulamanın ön planda veya arka planda olmasından bağımsız olarak, codelab'in ilk bölümünde gördüğünüz gibi bir bildirim görmeniz gerekir.
Çözüm kodu indirilmiş kodunuzun ana dalında bulunur.
FirebaseMessagingService
uzantısını genişleterek FCM BroadcastReceiver'ı uygulayın.- Firebase Cloud Messaging (FCM) projesi oluşturarak FCM'yi Android uygulamanıza ekleyin.
- Bildirimler oluşturucudan push bildirimleri göndererek uygulamanızı test edin.
FirebaseMessaging
sınıfınınsubscribeToTopic()
işlevini çağırarak FCM konularına abone olun.RemoteMessage
nesnesini kullanarak veri yükü gönderin.onMessageReceived()
işlevindeki verileri yönetin.- Uygulama ön plandayken ve arka planda çalışırken FCM tarafından ele alınmak için bir mantık ekleyin.
Udacity kursu:
Firebase belgeleri:
Bu kurstaki diğer codelab'lerin bağlantıları için Kotlin codelab'lerde Gelişmiş Android açılış sayfası konusuna bakın.