Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Kirim pesan ke beberapa perangkat

Firebase Cloud Messaging menyediakan dua cara untuk menargetkan pesan ke beberapa perangkat:

  • Perpesanan topik , yang memungkinkan Anda mengirim pesan ke beberapa perangkat yang memilih topik tertentu.
  • Perpesanan grup perangkat , yang memungkinkan Anda mengirim pesan ke beberapa perangkat milik grup yang Anda tentukan.

Tutorial ini berfokus pada pengiriman pesan topik dari server aplikasi Anda menggunakan Admin SDK atau REST API untuk FCM, dan menerima serta menanganinya di aplikasi android. Kami akan membahas penanganan pesan untuk aplikasi latar belakang dan latar depan. Semua langkah untuk mencapai ini tercakup, mulai dari penyiapan hingga verifikasi.

Siapkan SDK

Bagian ini mungkin membahas langkah-langkah yang telah Anda selesaikan jika Anda telah menyiapkan aplikasi klien Android untuk FCM atau melakukan langkah-langkah untuk Mengirim Pesan Pertama Anda .

Sebelum kamu memulai

  • Pasang atau perbarui Android Studio ke versi terbarunya.

  • Pastikan proyek Anda memenuhi persyaratan berikut:

    • Menargetkan API level 19 (KitKat) atau lebih tinggi
    • Menggunakan Android 4.4 atau lebih tinggi
    • Menggunakan Jetpack (AndroidX) , yang termasuk memenuhi persyaratan versi berikut:
      • com.android.tools.build:gradle v3.2.1 atau lebih baru
      • compileSdkVersion 28 atau lebih baru
  • Siapkan perangkat fisik atau gunakan emulator untuk menjalankan aplikasi Anda.
    Perhatikan bahwa SDK Firebase dengan ketergantungan pada layanan Google Play mengharuskan perangkat atau emulator untuk memasang layanan Google Play.

  • Masuk ke Firebase menggunakan akun Google Anda.

Jika Anda belum memiliki proyek Android dan hanya ingin mencoba produk Firebase, Anda dapat mendownload salah satu contoh quickstart kami.

Buat proyek Firebase

Sebelum dapat menambahkan Firebase ke aplikasi Android, Anda perlu membuat proyek Firebase untuk terhubung ke aplikasi Android. Kunjungi Memahami Proyek Firebase untuk mempelajari lebih lanjut tentang proyek Firebase.

Daftarkan aplikasi Anda dengan Firebase

Untuk menggunakan Firebase di aplikasi Android Anda, Anda perlu mendaftarkan aplikasi Anda ke proyek Firebase Anda. Mendaftarkan aplikasi Anda sering disebut "menambahkan" aplikasi Anda ke proyek Anda.

  1. Buka konsol Firebase .

  2. Di tengah halaman ikhtisar proyek, klik ikon Android ( ) atau Tambahkan aplikasi untuk meluncurkan alur kerja penyiapan.

  3. Masukkan nama paket aplikasi Anda di kolom nama paket Android .

  4. (Opsional) Masukkan informasi aplikasi lainnya: Nama panggilan aplikasi dan sertifikat penandatanganan Debug SHA-1 .

  5. Klik Daftarkan aplikasi .

Tambahkan file konfigurasi Firebase

  1. Unduh lalu tambahkan file konfigurasi Android Firebase ( google-services.json ) ke aplikasi Anda:

    1. Klik Unduh google-services.json untuk mendapatkan file konfigurasi Android Firebase Anda.

    2. Pindahkan file konfigurasi Anda ke direktori root modul (level aplikasi) aplikasi Anda.

  2. Agar nilai dalam file konfigurasi google-services.json Anda dapat diakses oleh Firebase SDK, Anda memerlukan plugin Gradle layanan Google ( google-services ).

    1. Di file Gradle level root (level proyek) Anda ( <project>/build.gradle ), tambahkan plugin layanan Google sebagai dependensi buildscript:

      buildscript {
      
          repositories {
            // Make sure that you have the following two repositories
            google()  // Google's Maven repository
            mavenCentral()  // Maven Central repository
          }
      
          dependencies {
            ...
      
            // Add the dependency for the Google services Gradle plugin
            classpath 'com.google.gms:google-services:4.3.15'
          }
      }
      
      allprojects {
        ...
      
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
      }
      
    2. Dalam file Gradle modul (tingkat aplikasi) Anda (biasanya <project>/<app-module>/build.gradle ), tambahkan plugin layanan Google:

      plugins {
          id 'com.android.application'
      
          // Add the Google services Gradle plugin
          id 'com.google.gms.google-services'
          ...
      }
      

Tambahkan Firebase SDK ke aplikasi Anda

  1. Dalam file Gradle modul (level aplikasi) Anda (biasanya <project>/<app-module>/build.gradle ), tambahkan dependensi untuk library Android Firebase Cloud Messaging. Kami merekomendasikan penggunaan Firebase Android BoM untuk mengontrol pembuatan versi library.

    Untuk pengalaman optimal dengan Firebase Cloud Messaging, sebaiknya aktifkan Google Analytics di proyek Firebase Anda dan tambahkan Firebase SDK untuk Google Analytics ke aplikasi Anda.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

    Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi pustaka Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging:23.1.1'
        implementation 'com.google.firebase:firebase-analytics:21.2.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi pustaka Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx:23.1.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.2.0'
    }
    

  2. Sinkronkan proyek Android Anda dengan file Gradle.

Berlangganan aplikasi klien ke suatu topik

Aplikasi klien dapat berlangganan topik apa pun yang ada, atau mereka dapat membuat topik baru. Saat aplikasi klien berlangganan nama topik baru (yang belum ada untuk project Firebase Anda), topik baru dari nama tersebut dibuat di FCM dan klien mana pun selanjutnya dapat berlangganan.

Untuk berlangganan topik, aplikasi klien memanggil Firebase Cloud Messaging subscribeToTopic() dengan nama topik FCM. Metode ini mengembalikan Task , yang dapat digunakan oleh listener penyelesaian untuk menentukan apakah langganan berhasil:

Kotlin+KTX

Firebase.messaging.subscribeToTopic("weather")
    .addOnCompleteListener { task ->
        var msg = "Subscribed"
        if (!task.isSuccessful) {
            msg = "Subscribe failed"
        }
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    }

Java

FirebaseMessaging.getInstance().subscribeToTopic("weather")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                String msg = "Subscribed";
                if (!task.isSuccessful()) {
                    msg = "Subscribe failed";
                }
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Untuk berhenti berlangganan, aplikasi klien memanggil Firebase Cloud Messaging unsubscribeFromTopic() dengan nama topik.

Menerima dan menangani pesan topik

FCM mengirimkan pesan topik dengan cara yang sama seperti pesan downstream lainnya.

Untuk menerima pesan, gunakan layanan yang memperluas FirebaseMessagingService . Layanan Anda harus mengganti callback onMessageReceived dan onDeletedMessages . Itu harus menangani pesan apa pun dalam waktu 20 detik setelah diterima (10 detik di Android Marshmallow). Jendela waktu mungkin lebih pendek tergantung pada penundaan OS yang terjadi sebelum memanggil onMessageReceived . Setelah itu, berbagai perilaku OS seperti batas eksekusi latar belakang Android O dapat mengganggu kemampuan Anda untuk menyelesaikan pekerjaan. Untuk informasi lebih lanjut, lihat ikhtisar kami tentang prioritas pesan .

onMessageReceived disediakan untuk sebagian besar jenis pesan, dengan pengecualian berikut:

  • Pesan notifikasi dikirimkan saat aplikasi Anda berada di latar belakang . Dalam hal ini, notifikasi dikirimkan ke baki sistem perangkat. Pengguna yang mengetuk notifikasi akan membuka peluncur aplikasi secara default.

  • Pesan dengan pemberitahuan dan muatan data, saat diterima di latar belakang . Dalam hal ini, pemberitahuan dikirimkan ke baki sistem perangkat, dan muatan data dikirimkan sebagai tambahan maksud dari Aktivitas peluncur Anda.

Kesimpulan:

Status aplikasi Pemberitahuan Data Keduanya
Latar depan onMessageReceived onMessageReceived onMessageReceived
Latar belakang Baki sistem onMessageReceived Pemberitahuan: baki sistem
Data: dalam tambahan maksud.
Untuk informasi selengkapnya tentang jenis pesan, lihat Notifikasi dan pesan data .

Edit manifes aplikasi

Untuk menggunakan FirebaseMessagingService , Anda perlu menambahkan yang berikut di manifes aplikasi Anda:

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Selain itu, Anda disarankan untuk menyetel nilai default untuk menyesuaikan tampilan notifikasi. Anda dapat menentukan ikon default kustom dan warna default kustom yang diterapkan setiap kali nilai yang setara tidak diatur dalam payload notifikasi.

Tambahkan baris ini di dalam tag application untuk menyetel ikon default khusus dan warna khusus:

<!-- 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/ic_stat_ic_notification" />
<!-- 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" />

Android menampilkan ikon default khusus untuk

  • Semua pesan notifikasi dikirim dari Notifications composer .
  • Setiap pesan notifikasi yang tidak menetapkan ikon secara eksplisit di payload notifikasi.

Android menggunakan warna default khusus untuk

  • Semua pesan notifikasi dikirim dari Notifications composer .
  • Setiap pesan notifikasi yang tidak menetapkan warna secara eksplisit dalam payload notifikasi.

Jika tidak ada ikon default khusus yang disetel dan tidak ada ikon yang disetel dalam payload notifikasi, Android akan menampilkan ikon aplikasi yang dirender dalam warna putih.

Timpa onMessageReceived

Dengan mengganti metode FirebaseMessagingService.onMessageReceived , Anda bisa melakukan tindakan berdasarkan objek RemoteMessage yang diterima dan mendapatkan data pesan:

Kotlin+KTX

override fun onMessageReceived(remoteMessage: RemoteMessage) {
    // TODO(developer): Handle FCM messages here.
    // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
    Log.d(TAG, "From: ${remoteMessage.from}")

    // Check if message contains a data payload.
    if (remoteMessage.data.isNotEmpty()) {
        Log.d(TAG, "Message data payload: ${remoteMessage.data}")

        if (/* Check if data needs to be processed by long running job */ true) {
            // For long-running tasks (10 seconds or more) use WorkManager.
            scheduleJob()
        } else {
            // Handle message within 10 seconds
            handleNow()
        }
    }

    // Check if message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
    }

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

Java

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // TODO(developer): Handle FCM messages here.
    // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        if (/* Check if data needs to be processed by long running job */ true) {
            // For long-running tasks (10 seconds or more) use WorkManager.
            scheduleJob();
        } else {
            // Handle message within 10 seconds
            handleNow();
        }

    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

Ganti onDeletedMessages

Dalam beberapa situasi, FCM mungkin tidak mengirimkan pesan. Hal ini terjadi jika ada terlalu banyak pesan (>100) yang tertunda untuk aplikasi Anda di perangkat tertentu saat terhubung atau jika perangkat tidak terhubung ke FCM selama lebih dari satu bulan. Dalam kasus ini, Anda mungkin menerima callback ke FirebaseMessagingService.onDeletedMessages() Saat instance aplikasi menerima callback ini, instance aplikasi harus melakukan sinkronisasi penuh dengan server aplikasi Anda. Jika Anda belum mengirim pesan ke aplikasi di perangkat tersebut dalam 4 minggu terakhir, FCM tidak akan memanggil onDeletedMessages() .

Tangani pesan notifikasi di aplikasi latar belakang

Saat aplikasi Anda berada di latar belakang, Android mengarahkan pesan notifikasi ke baki sistem. Ketukan pengguna pada notifikasi membuka peluncur aplikasi secara default.

Ini termasuk pesan yang berisi notifikasi dan payload data (dan semua pesan yang dikirim dari konsol Notifications). Dalam kasus ini, pemberitahuan dikirimkan ke baki sistem perangkat, dan muatan data dikirimkan sebagai tambahan maksud dari Aktivitas peluncur Anda.

Untuk wawasan tentang pengiriman pesan ke aplikasi Anda, lihat dasbor pelaporan FCM , yang mencatat jumlah pesan yang dikirim dan dibuka di perangkat Apple dan Android, beserta data untuk "tayangan" (pemberitahuan yang dilihat oleh pengguna) untuk aplikasi Android.

Aplikasi yang Dibatasi Latar Belakang (Android P atau yang lebih baru)

FCM tidak boleh mengirimkan pesan ke aplikasi yang dimasukkan ke dalam batasan latar belakang oleh pengguna (seperti melalui: Pengaturan -> Aplikasi dan Pemberitahuan -> [nama aplikasi] -> Baterai). Setelah aplikasi Anda dihapus dari pembatasan latar belakang, pesan baru ke aplikasi akan dikirimkan seperti sebelumnya. Untuk mencegah pesan hilang dan dampak pembatasan latar belakang lainnya, pastikan untuk menghindari perilaku buruk yang dicantumkan oleh upaya Android vitals . Perilaku ini dapat menyebabkan perangkat Android merekomendasikan kepada pengguna agar aplikasi Anda dibatasi di latar belakang. Aplikasi Anda dapat memeriksa apakah latar belakangnya dibatasi menggunakan: isBackgroundRestricted() .

Buat permintaan kirim

Setelah Anda membuat topik, baik dengan berlangganan instance aplikasi klien ke topik di sisi klien atau melalui API server , Anda dapat mengirim pesan ke topik tersebut. Jika ini pertama kalinya Anda membuat permintaan pengiriman untuk FCM, lihat panduan untuk lingkungan server dan FCM Anda untuk informasi latar belakang dan penyiapan yang penting.

Dalam logika pengiriman Anda di backend, tentukan nama topik yang diinginkan seperti yang ditunjukkan:

Node.js

// The topic name can be optionally prefixed with "/topics/".
const topic = 'highScores';

const message = {
  data: {
    score: '850',
    time: '2:45'
  },
  topic: topic
};

// Send a message to devices subscribed to the provided topic.
getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Jawa

// The topic name can be optionally prefixed with "/topics/".
String topic = "highScores";

// See documentation on defining a message payload.
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .setTopic(topic)
    .build();

// Send a message to the devices subscribed to the provided topic.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

Piton

# The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'

# See documentation on defining a message payload.
message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    topic=topic,
)

# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Pergi

// The topic name can be optionally prefixed with "/topics/".
topic := "highScores"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Topic: topic,
}

// Send a message to the devices subscribed to the provided topic.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

C#

// The topic name can be optionally prefixed with "/topics/".
var topic = "highScores";

// See documentation on defining a message payload.
var message = new Message()
{
    Data = new Dictionary<string, string>()
    {
        { "score", "850" },
        { "time", "2:45" },
    },
    Topic = topic,
};

// Send a message to the devices subscribed to the provided topic.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);

ISTIRAHAT

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
  "message":{
    "topic" : "foo-bar",
    "notification" : {
      "body" : "This is a Firebase Cloud Messaging Topic Message!",
      "title" : "FCM Message"
      }
   }
}

perintah cURL:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
  "message": {
    "topic" : "foo-bar",
    "notification": {
      "body": "This is a Firebase Cloud Messaging Topic Message!",
      "title": "FCM Message"
    }
  }
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Untuk mengirim pesan ke kombinasi topik, tentukan kondisi , yang merupakan ekspresi boolean yang menentukan topik target. Misalnya, kondisi berikut akan mengirim pesan ke perangkat yang berlangganan TopicA dan TopicB atau TopicC :

"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"

FCM terlebih dahulu mengevaluasi kondisi apa pun dalam tanda kurung, lalu mengevaluasi ekspresi dari kiri ke kanan. Dalam ekspresi di atas, pengguna yang berlangganan topik tunggal mana pun tidak menerima pesan. Demikian pula, pengguna yang tidak berlangganan TopicA tidak akan menerima pesan tersebut. Kombinasi ini memang menerimanya:

  • TopicA dan TopicB
  • TopicA dan TopicC

Anda dapat menyertakan hingga lima topik dalam ekspresi bersyarat Anda.

Untuk mengirim ke kondisi:

Node.js

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
const condition = '\'stock-GOOG\' in topics || \'industry-tech\' in topics';

// See documentation on defining a message payload.
const message = {
  notification: {
    title: '$FooCorp up 1.43% on the day',
    body: '$FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
  },
  condition: condition
};

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Jawa

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
String condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
Message message = Message.builder()
    .setNotification(Notification.builder()
        .setTitle("$GOOG up 1.43% on the day")
        .setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
        .build())
    .setCondition(condition)
    .build();

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

Piton

# Define a condition which will send to devices which are subscribed
# to either the Google stock or the tech industry topics.
condition = "'stock-GOOG' in topics || 'industry-tech' in topics"

# See documentation on defining a message payload.
message = messaging.Message(
    notification=messaging.Notification(
        title='$GOOG up 1.43% on the day',
        body='$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.',
    ),
    condition=condition,
)

# Send a message to devices subscribed to the combination of topics
# specified by the provided condition.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Pergi

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
condition := "'stock-GOOG' in topics || 'industry-tech' in topics"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Condition: condition,
}

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

C#

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
var message = new Message()
{
    Notification = new Notification()
    {
        Title = "$GOOG up 1.43% on the day",
        Body = "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
    },
    Condition = condition,
};

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);

ISTIRAHAT

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
   "message":{
    "condition": "'dogs' in topics || 'cats' in topics",
    "notification" : {
      "body" : "This is a Firebase Cloud Messaging Topic Message!",
      "title" : "FCM Message",
    }
  }
}

perintah cURL:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
  "notification": {
    "title": "FCM Message",
    "body": "This is a Firebase Cloud Messaging Topic Message!",
  },
  "condition": "'dogs' in topics || 'cats' in topics"
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Langkah selanjutnya