اگر سرور برنامه شما پروتکل XMPP Connection Server را پیاده سازی کند، می تواند پیام های بالادستی را از دستگاه کاربر به فضای ابری دریافت کند. برای شروع یک پیام بالادستی، برنامه مشتری درخواستی حاوی موارد زیر ارسال می کند:
- آدرس سرور برنامه دریافت کننده در قالب
SENDER_ID@fcm.googleapis.com
. - شناسه پیامی که باید برای هر شناسه فرستنده منحصر به فرد باشد.
- دادههای پیام شامل جفتهای کلید-مقدار محموله پیام است.
هنگامی که FCM این داده ها را دریافت می کند، یک مصراع XMPP برای ارسال به سرور برنامه ایجاد می کند و اطلاعات اضافی درباره دستگاه و برنامه ارسال کننده اضافه می کند.
یک پیام بالادستی از یک برنامه مشتری Android ارسال کنید
برنامه Android شما میتواند با استفاده از FirebaseMessaging.send یک پیام بالادستی ارسال کند:
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());
رسیدگی به تماس های پیام بالادست
با 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 Connection Server مراجعه کنید.