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

Uygulama sunucunuz XMPP Bağlantı Sunucusu protokolünü uyguluyorsa 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 ileti kimliği.
  • Mesajın yükünün anahtar/değer çiftlerini içeren mesaj verileri.

FCM, bu verileri aldığında uygulama sunucusuna gönderilecek bir XMPP dizesi oluşturur ve gönderen cihaz ve uygulama hakkında bazı ek bilgiler ekler.

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

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 koduyla birlikte bir SendException döndürür. Örneğin, istemci 20 mesaj sınırına ulaşıldıktan sonra daha fazla mesaj göndermeye çalışırsa SendException#ERROR_TOO_MANY_MESSAGES değerini döndürür.

Cihazın çevrimdışı olduğu veya FCM hizmetinin yukarı akış mesajlarını sunucunuza iletemediği durumlarda, Android istemci uygulaması örnekleri en fazla 20 bekleyen mesaj biriktirebilir. Bu tür mesajların süresi FCM tarafından başarılı bir şekilde gönderilmeden önce dolarsa, onSendError SendException#ERROR_TTL_EXCEEDED değerini döndürür.

Ağ kullanımını optimize etmek için FCM, onMessageSent ve onSendError yanıtlarını toplu hale getirir, böylece onay her mesaj için hemen gerçekleşmeyebilir.

Uygulama sunucusunda XMPP mesajlarını alın

FCM, bir istemci uygulamasından yukarı akış mesajlaşma çağrısı aldığında, yukarı akış mesajını göndermek için gerekli XMPP dizesini oluşturur. FCM, category ve alan 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.