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

Uygulama sunucunuz XMPP Bağlantı Sunucusu protokolünü uyguluyorsa kullanıcının cihazından buluta giden iletileri alabilir. İstemci uygulaması, yayın 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 bir ileti 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önderilecek bir XMPP dizesi oluşturur.

Android istemci uygulamasından yayın mesajı gönderme

Android uygulamanız, FirebaseMessaging.send yöntemini kullanarak yayın 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ı işleme

FirebaseMessaging ile, yayın öncesi iletilerin durumunu kontrol etmek için onMessageSent ve onSendError geri çağırma işlevlerini uygulayabilirsiniz. Hata durumunda onSendError, hata kodu içeren bir SendException döndürür. Örneğin, istemci 20 ileti sınırına ulaştıktan sonra daha fazla ileti göndermeye çalışırsa SendException#ERROR_TOO_MANY_MESSAGES döndürülür.

Cihazın çevrimdışı olduğu veya FCM hizmetinin sunucunuza yayın mesajları iletemediği durumlarda, Android istemci uygulaması örnekleri en fazla 20 bekleyen mesaj toplayabilir. Bu tür iletilerin süresi, FCM iletileri başarıyla göndermeden ö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'ye verilen yanıtları gruplandırır. Bu nedenle, her mesaj için onay hemen gönderilmeyebilir.

Uygulama sunucusunda XMPP mesajları alma

FCM, istemci uygulamasından yukarı akış mesajlaşma çağrısı aldığında yukarı akış mesajını göndermek için gerekli XMPP dörtlüklerini oluşturur. FCM, category ve from alanlarını ekledikten sonra uygulama sunucusuna aşağıdaki gibi 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 yayın mesajına yanıt olarak uygulama sunucusu, benzersiz mesaj kimliğini içeren bir ACK mesajı göndermek için aynı bağlantıyı kullanmalıdır. FCM, ACK almıyorsa iletiyi 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.