إرسال الرسائل الرئيسية على Android

إذا كان خادم تطبيقك ينفِّذ بروتوكول 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، يمكنك تنفيذ دالّتَي callback 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 لمزيد من المعلومات حول بنية الرسائل الواردة.