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.
Buka konsol Firebase .
Di tengah halaman ikhtisar proyek, klik ikon Android (
) atau Tambahkan aplikasi untuk meluncurkan alur kerja penyiapan.Masukkan nama paket aplikasi Anda di kolom nama paket Android .
Nama paket secara unik mengidentifikasi aplikasi Anda di perangkat dan di Google Play Store.
Nama paket sering disebut sebagai ID aplikasi .
Temukan nama paket aplikasi Anda di file Gradle modul (level aplikasi), biasanya
app/build.gradle
(contoh nama paket:com.yourcompany.yourproject
).Ketahuilah bahwa nilai nama paket peka huruf besar/kecil, dan tidak dapat diubah untuk aplikasi Android Firebase ini setelah didaftarkan ke proyek Firebase Anda.
(Opsional) Masukkan informasi aplikasi lainnya: Nama panggilan aplikasi dan sertifikat penandatanganan Debug SHA-1 .
Nama panggilan aplikasi : Pengidentifikasi kenyamanan internal yang hanya dapat dilihat oleh Anda di konsol Firebase
Sertifikat penandatanganan debug SHA-1 : Hash SHA-1 diperlukan oleh Firebase Authentication (saat menggunakan Google Sign In atau login dengan nomor telepon ) dan Firebase Dynamic Links .
Klik Daftarkan aplikasi .
Tambahkan file konfigurasi Firebase
Unduh lalu tambahkan file konfigurasi Android Firebase (
) ke aplikasi Anda:google-services.json Klik Unduh google-services.json untuk mendapatkan file konfigurasi Android Firebase Anda.
Pindahkan file konfigurasi Anda ke direktori root modul (level aplikasi) aplikasi Anda.
File konfigurasi Firebase berisi pengidentifikasi unik namun tidak rahasia untuk proyek Anda. Untuk mempelajari lebih lanjut tentang file konfigurasi ini, kunjungi Memahami Proyek Firebase .
Anda dapat mengunduh kembali file konfigurasi Firebase Anda kapan saja.
Pastikan nama file konfigurasi tidak ditambahkan dengan karakter tambahan, seperti
(2)
.
Agar nilai dalam file konfigurasi
Anda dapat diakses oleh Firebase SDK, Anda memerlukan plugin Gradle layanan Google (google-services.json google-services
).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 } }
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
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' }
Sinkronkan proyek Android Anda dengan file Gradle.
Build Gradle yang menggunakan plugin Android Gradle (AGP) v4.2 atau yang lebih lama harus mengaktifkan dukungan Java 8. Jika tidak, project Android ini akan mengalami kegagalan build saat menambahkan Firebase SDK.
Untuk memperbaiki kegagalan build ini, Anda dapat mengikuti salah satu dari dua opsi berikut:
- Tambahkan
compileOptions
yang tercantum dari pesan kesalahan ke filebuild.gradle
tingkat aplikasi Anda. - Tingkatkan
minSdkVersion
untuk proyek Android Anda menjadi 26 atau lebih tinggi.
Pelajari lebih lanjut tentang kegagalan build ini di FAQ ini .
- Tambahkan
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. |
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
danTopicB
-
TopicA
danTopicC
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
- Anda dapat menggunakan server untuk berlangganan instans aplikasi klien ke topik dan melakukan tugas manajemen lainnya. Lihat Mengelola langganan topik di server .
- Pelajari lebih lanjut tentang cara lain untuk mengirim ke beberapa perangkat — Perpesanan grup perangkat