إذا كان خادم التطبيق الخاص بك ينفذ بروتوكول 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 لمزيد من المعلومات حول بناء جملة الرسالة الأولية.