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ını alabilir. İstemci uygulaması, bir yukarı akış mesajı başlatmak için 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 ileti kimliği.
  • Mesaj yükünün anahtar/değer çiftlerini içeren mesaj verileri.

FCM, bu verileri aldığında uygulama sunucusuna göndermek için bir XMPP ifadesi oluşturup 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'i kullanarak 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 çağırmalarını yönetme

FirebaseMessaging ile, yukarı akış mesajlarının durumunu kontrol etmek için onMessageSent ve onSendError geri çağırmalarını uygulayabilirsiniz. Hata durumlarda onSendError, hata kodu içeren 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ışı olması veya FCM hizmetinin yukarı akış mesajlarını sunucunuza yönlendirmek için kullanılamadığı durumlarda, Android istemci uygulaması örnekleri en fazla 20 bekleyen mesaj biriktirebilir. Bu tür mesajların süresi, FCM tarafından başarıyla gönderilemeden sonra sona ererse onSendError, SendException#ERROR_TTL_EXCEEDED değerini döndürür.

FCM, ağ kullanımını optimize etmek amacıyla yanıtları onMessageSent ve onSendError için toplu olarak işler. Bu nedenle, onay her mesajda hemen verilmeyebilir.

Uygulama sunucusunda XMPP mesajlarını al

FCM, bir istemci uygulamasından yukarı akış mesajlaşma çağrısı aldığında, yukarı akış mesajını göndermek için gereken XMPP ifadesini oluşturur. FCM, category ve from alanlarını ekler ve ardından uygulama sunucusuna aşağıdakine benzer bir dize 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, 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öz dizimi hakkında daha fazla bilgi için XMPP Bağlantı Sunucusu Referansı'na bakın.