Kotlin 01.2'de Gelişmiş Android: Android Firebase Cloud Messaging

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.

Zip'i İndir

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.

  1. Firebase konsoluna giriş yapın.
  2. Proje ekle'yi tıklayın, ardından bir Proje adı seçin veya girin. Projenize fcm-codelab adını verin.
  3. Devam'ı tıklayın.
  4. Bu proje için Google Analytics'i etkinleştir düğmesini kapatarak Google Analytics'i ayarlamayı atlayabilirsiniz.
  5. 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.

  1. Firebase konsolunun proje genel bakış sayfasının ortasındaki Android simgesini tıklayarak kurulum iş akışını başlatın.

  1. Android paket adı alanına com.example.android.eggtimernotifications girin.
  2. 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.

  1. 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 olarak google-services.json olarak adlandırıldığından emin olun.
  2. 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.

  1. Kök düzeyindeki (proje düzeyindeki) Gradle dosyanızda (build.gradle) Google&#39'ın Maven deposuna sahip olduğunuzdan emin olun.
  2. 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
    // ...
  }
}
  1. 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.

  1. MyFirebaseMessagingService.kt uygulamasını aç
  2. 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 bir RemoteMessage 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.

  1. AndroidManifest.xml uygulamasını açın ve yumurta zamanlayıcı uygulamasında MyFirebaseMessagingService 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ında breakfast_notification_channel_id, Firebase için default_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.

  1. 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)
    )
  1. MyFirebaseMessagingService.kt işlevini açın ve onNewToken() 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]
  1. Yumurta zamanlayıcı uygulamasını çalıştır.
  2. 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.

  1. Firebase Konsolu'nu açın ve projenizi seçin.
  2. Ardından, sol taraftaki gezinme menüsünden Cloud Messaging'i seçin.
  3. İlk mesajınızı gönderin'i tıklayın.

  1. Bildirim başlığı olarak Time for Breakfast!, bildirim metni olarak Don'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.

  1. Uygulama jetonunuzu logcat'ten kopyalayın.

  1. 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.
  2. Görüntülenen onay kutusu listesinde jetonu seçin. Test et düğmesi etkinleştirilmelidir.

  1. Cihazınızda Yumurta Zamanlayıcı uygulamasını arka plana yerleştirin.
  2. Pop-up'ta Test et'i tıklayın.
  1. 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.

  1. EggTimerFragment.kt öğesini açın ve boş subscribeTopic() işlevini bulun.
  2. FirebaseMessaging öğesinin bir örneğini alın ve konu adıyla subscibeToTopic() işlevini çağırın.
  3. 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]
    }
  1. Uygulama başladığında bir konuya abone olmak için subscribeTopic() işlevini arayın. onCreateView() için yukarı kaydırın ve subscribeTopic() numaralı telefona bir arama ekleyin.
// EggTimerFragment.kt

   // TODO: Step 3.4 call subscribe topics on start
    subscribeTopic()

    return binding.root
  1. 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:

  1. Bildirim oluşturucu'yu açın ve Bildirim Oluştur'u seçin.
  2. Bildirim Bildirimi başlığı ve Bildirim metni'ni eskisi gibi ayarlayın.
  3. Bu kez, iletiyi tek bir cihaza göndermek yerine, Hedef altında Konu'yu tıklayın ve mesaj konusu olarak breakfast yazın.

  1. Planlama için Şimdi'yi seçin.

  1. Uygulamanızın, test cihazınızda arka planda çalıştığından emin olun.
  1. İ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.

  1. MyFirebaseMessagingService. uygulamasını aç
  2. remoteMessage nesnesinin data ö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.

  1. Bildirim oluşturucuyu açın, Hedef değerini "kahvaltı" konusu olarak ayarlayarak yeni bir mesaj oluşturun.
  2. Bu kez, 4. adım olan Ek seçenekler'e geldiğinizde Özel veri anahtarını ve değer özelliklerini şu şekilde ayarlayın:
  1. Anahtar: eggs
  2. Değer: 3

  1. 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ığında remoteMessage nesnesini alır.
  2. 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:

  1. onMessageReceived() işlevini MyFirebaseMessagingService içinde tekrar açın.
  2. 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)
    }
  1. 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.

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.