Mengirim pesan ke topik di Unity

Berdasarkan model publikasi/langganan, messaging topik FCM dapat digunakan untuk mengirim pesan ke beberapa perangkat yang mengikuti topik tertentu. Anda menulis pesan topik sesuai kebutuhan, dan FMC akan menangani perutean serta mengirimkan pesan dengan baik ke perangkat yang tepat.

Misalnya, pengguna aplikasi perkiraan pasang setempat dapat memilih untuk menerima topik "pemberitahuan arus pasang surut" dan menerima notifikasi tentang kondisi penangkapan ikan air asin yang optimal di area tertentu. Pengguna aplikasi olahraga dapat berlangganan update skor otomatis pertandingan langsung untuk tim favoritnya.

Beberapa hal yang perlu diingat tentang topik:

  • Messaging topik sangat cocok untuk konten seperti cuaca, atau informasi lainnya yang tersedia untuk umum.
  • Pesan topik dioptimalkan untuk throughput, bukan latensi. Untuk pengiriman yang cepat dan aman ke satu perangkat atau sekelompok kecil perangkat, targetkan pesan ke token pendaftaran, bukan topik.
  • Jika Anda perlu mengirim pesan ke beberapa perangkat per pengguna, sebaiknya gunakan messaging grup perangkat untuk kasus penggunaan tersebut.
  • Pengiriman pesan topik mendukung langganan tak terbatas untuk setiap topik. Namun, FCM memberlakukan batasan pada area berikut ini:
    • Satu instance aplikasi hanya dapat berlangganan maksimal 2.000 topik.
    • Jika Anda menggunakan impor batch untuk berlangganan instance aplikasi, setiap permintaan dibatasi ke 1.000 instance aplikasi.
    • Frekuensi langganan baru dibatasi kapasitasnya per project. Jika Anda mengirim terlalu banyak permintaan berlangganan dalam waktu singkat, server FCM akan merespons dengan respons 429 RESOURCE_EXHAUSTED ("kuota terlampaui"). Coba lagi dengan backoff eksponensial.

Membuat aplikasi klien berlangganan topik

Untuk berlangganan topik, panggil Firebase.Messaging.FirebaseMessaging.Subscribe dari aplikasi Anda. Tindakan ini membuat permintaan asinkron ke backend FCM dan membuat klien berlangganan ke topik tertentu.

Firebase.Messaging.FirebaseMessaging.Subscribe("/topics/example");

Jika awalnya permintaan langganan gagal, FCM akan mencoba kembali hingga berhasil berlangganan ke topik tersebut. Setiap kali aplikasi dijalankan, FCM akan memastikan bahwa aplikasi tersebut telah berlangganan ke semua topik yang diminta.

Untuk berhenti berlangganan, panggil Firebase.Messaging.FirebaseMessaging.Unsubscribe, dan FCM akan berhenti berlangganan dari topik yang ada di background.

Mengelola langganan topik di server

Anda dapat memanfaatkan API ID Instance untuk melakukan tugas pengelolaan topik dasar dari sisi server. Dengan token pendaftaran yang ada dari instance aplikasi klien, Anda dapat melakukan hal-hal berikut:

Menerima dan menangani pesan topik

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

Dengan berlangganan peristiwa Firebase.Messaging.FirebaseMessaging.MessageReceived Anda dapat melakukan tindakan berdasarkan pesan yang diterima dan mendapatkan data pesan.

Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;

...

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message");
  if (e.Message.From.Length > 0)
    UnityEngine.Debug.Log("from: " + e.Message.From);
  if (e.Message.Data.Count > 0) {
    UnityEngine.Debug.Log("data:");
    foreach (System.Collections.Generic.KeyValuePair iter in
             e.Message.Data) {
      UnityEngine.Debug.Log("  " + iter.Key + ": " + iter.Value);
    }
  }
}

Membuat permintaan kirim

Mengirim pesan ke topik Firebase Cloud Messaging serupa dengan mengirim pesan ke perangkat individual atau ke grup pengguna. Server aplikasi menetapkan kunci topic dalam isi pesan dengan nilai seperti yourTopic. Developer bisa memilih nama topik apa pun yang cocok dengan ekspresi reguler: "[a-zA-Z0-9-_.~%]+".

Untuk mengirim ke kombinasi beberapa topik, server aplikasi menetapkan kunci condition ke condition boolean yang menentukan topik target. Misalnya, untuk mengirimkan pesan ke perangkat yang berlangganan TopicA dan salah satu dari TopicB atau TopicC:

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

FCM mengevaluasi terlebih dahulu setiap kondisi di dalam tanda kurung, lalu mengevaluasi ekspresi tersebut dari kiri ke kanan. Pada ekspresi di atas, pengguna yang berlangganan satu topik apa pun tidak akan menerima pesan. Demikian pula, pengguna yang tidak berlangganan TopicA tidak akan menerima pesan. Namun, kombinasi berikut akan menerima pesan:

  • TopicA dan TopicB
  • TopicA dan TopicC

Anda dapat menyertakan hingga lima topik dalam ekspresi bersyarat. Penggunaan tanda kurung didukung. Operator yang didukung: &&, ||, !. Perhatikan penggunaan untuk !:

!('TopicA' in topics)

Dengan menggunakan ekspresi ini, setiap instance aplikasi yang tidak berlangganan TopicA, termasuk instance aplikasi yang tidak berlangganan topik mana pun, akan menerima pesan.

Untuk mengetahui detail lebih lanjut tentang kunci server aplikasi, lihat informasi referensi.

Permintaan HTTP POST topik

Mengirim ke sebuah topik:

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"
      }
   }
}

Mengirim dengan 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

Mengirim ke perangkat yang berlangganan topik "dogs" atau "cats":

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",
    }
  }
}

Mengirim dengan 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

Respons HTTP topik

{
    "name": "projects/myproject-b5ae1/messages/5735743068807585451"
}

Untuk mengetahui daftar lengkap opsi pesan, lihat referensi HTTP v1 API.

Langkah berikutnya

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.