إذا كان خادم تطبيقك ينفِّذ بروتوكول 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 إشعارًا بالتأكيد، قد يحاول مرة أخرى إرسال الرسالة إلى خادم التطبيق.
<message id=""> <gcm xmlns="google:mobile:data"> { "to":"REGID", "message_id":"m-123" "message_type":"ack" } </gcm> </message>
اطّلِع على مرجع خادم اتصال XMPP لمزيد من المعلومات حول بنية الرسائل الواردة.