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