إرسال الرسائل الرئيسية على 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، يمكنك تنفيذ رمزَي استدعاءَين 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 لمزيد من المعلومات حول بنية الرسائل الواردة.