إرسال رسائل المنبع على الروبوت

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