إذا كان خادم تطبيقك يستخدم بروتوكول XMPP Connection Server، يمكنه تلقّي الرسائل الرئيسية من جهاز المستخدم إلى السحابة الإلكترونية. لبدء رسالة رئيسية، يرسل تطبيق العميل طلبًا يحتوي على ما يلي:
- عنوان خادم تطبيق الاستقبال بالتنسيق
SENDER_ID@fcm.googleapis.com
. - معرّف رسالة يجب أن يكون فريدًا لكل رقم تعريف مُرسِل.
- بيانات الرسالة التي تتألف من أزواج المفتاح/القيمة لحمولة الرسالة
وعندما تتلقّى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" هذه البيانات، تنشئ نسخة 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
.
وفي الحالات التي يكون فيها الجهاز غير متصل بالإنترنت أو لا تتوفّر
خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"
لإعادة توجيه الرسائل المرسَلة إلى الخادم، يمكن أن تتراكم مثيلات تطبيق عميل Android
بحد أقصى 20 رسالة في انتظار المراجعة.
إذا انتهت صلاحية هذه الرسائل قبل أن تتمكن خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" من إرسالها بنجاح،
ستعرض خدمة onSendError
القيمة SendException#ERROR_TTL_EXCEEDED
.
لتحسين استخدام الشبكة، ترسِل خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" الردود على onMessageSent
وonSendError
بشكل مجمّع، وبالتالي قد لا يكون الإقرار فوريًا لكل رسالة.
تلقّي رسائل XMPP على خادم التطبيق
عندما تتلقى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" مكالمة مراسلة سابقة من أحد تطبيقات العميل، تنشئ رسالة XMPP اللازمة لإرسال الرسالة الأولية.
تضيف خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" الحقلين 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 تحتوي على المعرّف الفريد للرسالة. إذا لم تتلقَّ خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" ACK، قد تعيد محاولة إرسال الرسالة إلى خادم التطبيق.
<message id=""> <gcm xmlns="google:mobile:data"> { "to":"REGID", "message_id":"m-123" "message_type":"ack" } </gcm> </message>
يُرجى الاطّلاع على مرجع خادم اتصال XMPP للحصول على مزيد من المعلومات حول بنية الرسائل الأولية.