Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ارسال پیام های بالادستی در Android

اگر برنامه را پیاده سازی سرور شما XMPP اتصال به سرور پروتکل، می تواند پیام های بالادست از دستگاه کاربر را به ابر دریافت خواهید کرد. برای شروع یک پیام بالادستی ، برنامه سرویس گیرنده یک درخواست شامل موارد زیر را ارسال می کند:

  • آدرس سرور برنامه دریافت در قالب SENDER_ID@fcm.googleapis.com .
  • یک شناسه پیام است که باید منحصر به فرد برای هر یک ID فرستنده .
  • داده های پیام شامل زوج های کلید و مقدار بار پیام است.

هنگامی که این داده ها را دریافت می کند ، FCM یک بند XMPP برای ارسال به سرور برنامه ایجاد می کند و اطلاعات اضافی در مورد دستگاه و برنامه ارسال کننده اضافه می کند.

ارسال پیام بالادست از برنامه مشتری Android

برنامه آندروید خود را می توانید یک پیام بالادست با استفاده از ارسال FirebaseMessaging.send :

جاوا

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

تماس های پیام های بالادستی را مدیریت کنید

با FirebaseMessaging ، شما می توانید از تماس پیاده سازی onMessageSent و onSendError برای بررسی وضعیت پیام های بالادست. در موارد خطا، onSendError بازده یک SendException با یک کد خطا. برای مثال، اگر تلاش مشتری به ارسال پیام های بیشتر بعد از 20-پیام رسیده است، آن را می گرداند SendException#ERROR_TOO_MANY_MESSAGES .

در مواردی که دستگاه آفلاین است یا سرویس FCM برای ارسال پیام های بالادستی به سرور شما در دسترس نیست ، نمونه های برنامه مشتری Android می تواند حداکثر 20 پیام معلق را جمع آوری کند. اگر چنین پیام منقضی قبل از FCM با موفقیت می تواند آنها را ارسال، onSendError گرداند SendException#ERROR_TTL_EXCEEDED .

برای استفاده از شبکه بهینه سازی، FCM دسته پاسخ به onMessageSent و onSendError ، بنابراین اذعان ممکن است فوری برای هر پیام.

پیام های XMPP را در سرور برنامه دریافت کنید

وقتی FCM یک پیام پیام بالادستی را از یک برنامه سرویس گیرنده دریافت می کند ، بند XMPP لازم برای ارسال پیام بالادستی را ایجاد می کند. FCM می افزاید: category و from زمینه ها، و پس از آن یک بند مانند زیر به سرور برنامه می فرستد:

<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

در پاسخ به پیام بالادستی مانند موارد بالا ، سرور برنامه باید از همان اتصال برای ارسال پیام ACK حاوی شناسه پیام منحصر به فرد استفاده کند. اگر FCM ACK دریافت نکند ، ممکن است مجدداً پیام را به سرور برنامه ارسال کند.

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

مراجعه کنید XMPP مرجع اتصال به سرور برای اطلاعات بیشتر در مورد نحو پیام بالادست.