了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Android'de yukarı akış mesajları gönderme

Uygulama sunucunuz XMPP Bağlantı Sunucusu protokolünü uyguluyorsa, bir kullanıcının cihazından buluta yukarı akış mesajları alabilir. Bir yukarı akış mesajı başlatmak için, istemci uygulaması aşağıdakileri içeren bir istek gönderir:

  • Alıcı uygulama sunucusunun SENDER_ID@fcm.googleapis.com biçimindeki adresi.
  • Her gönderen kimliği için benzersiz olması gereken bir mesaj kimliği.
  • Mesajın yükünün anahtar-değer çiftlerini içeren mesaj verileri.

FCM bu verileri aldığında, gönderen cihaz ve uygulama hakkında bazı ek bilgiler ekleyerek uygulama sunucusuna göndermek için bir XMPP kıtası oluşturur.

Bir Android istemci uygulamasından yukarı akış mesajı gönderin

Android uygulamanız, FirebaseMessaging.send kullanarak bir yukarı akış mesajı gönderebilir:

Kotlin+KTX

val fm = Firebase.messaging
fm.send(
    remoteMessage("$SENDER_ID@fcm.googleapis.com") {
        setMessageId(messageId.toString())
        addData("my_message", "Hello World")
        addData("my_action", "SAY_HELLO")
    },
)

Java

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

Yukarı akış mesaj geri aramalarını yönetin

FirebaseMessaging ile, yukarı akış mesajlarının durumunu kontrol etmek için onMessageSent ve onSendError geri aramalarını uygulayabilirsiniz. Hata durumlarında, onSendError hata kodu içeren bir SendException döndürür. Örneğin, istemci 20 iletilik sınıra ulaşıldıktan sonra daha fazla ileti göndermeye çalışırsa SendException#ERROR_TOO_MANY_MESSAGES döndürür.

Cihazın çevrimdışı olduğu veya FCM hizmetinin yukarı akış mesajlarını sunucunuza yönlendirmek için kullanılamadığı durumlarda, Android istemci uygulaması örnekleri en fazla 20 bekleyen mesaj toplayabilir. Bu tür iletilerin süresi, FCM başarıyla gönderemeden önce sona ererse, onSendError SendException#ERROR_TTL_EXCEEDED döndürür.

Ağ kullanımını optimize etmek için, FCM yanıtları onMessageSent ve onSendError öğelerine gruplandırır, bu nedenle onay her ileti için hemen olmayabilir.

Uygulama sunucusunda XMPP mesajları alın

FCM, bir istemci uygulamasından bir yukarı akış mesajlaşma çağrısı aldığında, yukarı akış mesajını göndermek için gerekli XMPP kıtasını oluşturur. FCM, category ve from ekler ve ardından uygulama sunucusuna aşağıdakine benzer bir dörtlük gönderir:

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

ACK mesajı gönderme

Yukarıdaki gibi bir yukarı akış mesajına yanıt olarak, uygulama sunucusunun benzersiz mesaj kimliğini içeren bir ACK mesajı göndermek için aynı bağlantıyı kullanması gerekir. FCM bir ACK almazsa, mesajı uygulama sunucusuna göndermeyi yeniden deneyebilir.

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

Yukarı akış mesajı sözdizimi hakkında daha fazla bilgi için XMPP Bağlantı Sunucusu Referansına bakın.