Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Uygulama sunucunuz XMPP Bağlantı Sunucusu protokolünü uygularsa, 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:

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

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

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

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());

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")
})

Yukarı akış mesajı geri aramalarını işleme

FirebaseMessaging ile, yukarı akış mesajlarının durumunu kontrol etmek için onMessageSent ve onSendError geri aramalarını uygulayabilirsiniz. Hata durumlarında, onSendError SendException . Ö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 döndürür.

Cihazın çevrimdışı olduğu veya FCM hizmetinin yukarı akış mesajlarını sunucunuza iletmek 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önderilmeden önce sona ererse, onSendError SendException#ERROR_TTL_EXCEEDED döndürür.

Ağ kullanımını optimize etmek için FCM, onMessageSent ve onSendError yanıtları toplu olarak işler, bu nedenle onay her mesaj için hemen olmayabilir.

Uygulama sunucusunda XMPP mesajları alın

FCM, bir istemci uygulamasından bir yukarı akış mesajlaşma araması aldığında, yukarı akış mesajını göndermek için gerekli XMPP kıtasını oluşturur. FCM, category from alanlardan ekler ve ardından uygulama sunucusuna aşağıdakine benzer bir kıta 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 sunucusu, benzersiz mesaj kimliğini içeren bir ACK mesajı göndermek için aynı bağlantıyı kullanmalıdır. 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ış ileti sözdizimi hakkında daha fazla bilgi için XMPP Bağlantı Sunucusu Başvurusu'na bakın.