Buka konsol

Mengirim pesan upstream di Android

Jika server aplikasi Anda menerapkan protokol Server Koneksi XMPP, server tersebut dapat menerima pesan upstream dari perangkat pengguna ke cloud. Untuk memulai pesan upstream, aplikasi klien harus mengirimkan permintaan yang berisi hal berikut ini:

  • Alamat server aplikasi penerima dalam format SENDER_ID@gcm.googleapis.com.
  • ID pesan yang harus unik untuk setiap ID pengirim.
  • Data pesan yang terdiri dari key-value pair pada payload pesan.

Ketika menerima data ini, FCM membuat stanza XMPP untuk dikirimkan ke server aplikasi, dengan menambahkan beberapa informasi tambahan mengenai perangkat dan aplikasi pengirim.

Mengirim pesan upstream dari aplikasi klien Android

Aplikasi Android Anda dapat mengirim pesan upstream menggunakan FirebaseMessaging.send:

Java
Android

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

Kotlin
Android

val fm = FirebaseMessaging.getInstance()
fm.send(RemoteMessage.Builder("$SENDER_ID@gcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action", "SAY_HELLO")
        .build())

Menangani callback pesan upstream

Dengan FirebaseMessaging, Anda dapat menerapkan callback onMessageSent dan onSendError untuk memeriksa status pesan upstream. Jika terjadi error, onSendError akan menampilkan SendException dengan kode error. Misalnya, jika klien mencoba mengirim lebih banyak pesan setelah batas 20 pesan tercapai, maka yang ditampilkan adalah SendException#ERROR_TOO_MANY_MESSAGES.

Jika perangkat offline atau layanan FCM tidak tersedia untuk meneruskan pesan upstream ke server, instance aplikasi klien Android dapat mengakumulasikan maksimum 20 pesan yang tertunda. Jika pesan-pesan tersebut habis berlaku sebelum FCM berhasil mengirimkannya, onSendError menampilkan SendException#ERROR_TTL_EXCEEDED.

Untuk mengoptimalkan penggunaan jaringan, FCM mengelompokkan respons ke onMessageSent dan onSendError, sehingga pengakuan mungkin tidak terjadi secara langsung untuk setiap pesan.

Menerima pesan XMPP di server aplikasi

Ketika FCM menerima panggilan pesan upstream dari aplikasi klien, FCM akan membuat stanza XMPP yang diperlukan untuk mengirim pesan upstream. FCM akan menambahkan kolom category dan from, lalu mengirimkan stanza seperti berikut ini ke server aplikasi:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
          "hello":"world",
      },
      "message_id":"m-123",
      "from":"REGID"
  }
  </gcm>
</message>

Mengirim pesan ACK

Sebagai respons atas pesan upstream seperti yang ditunjukkan di atas, server aplikasi harus menggunakan koneksi yang sama untuk mengirim pesan ACK yang berisi ID pesan unik. Jika FCM tidak menerima ACK, pesan tersebut dapat dikirim kembali ke server aplikasi.

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

Baca Referensi Server Koneksi XMPP untuk mengetahui informasi lebih lanjut mengenai sintaks pesan upstream.