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

إذا كان خادم تطبيقك يستخدم بروتوكول XMPP Connection Server، يمكنه تلقّي الرسائل الرئيسية من جهاز المستخدم إلى السحابة الإلكترونية. لبدء رسالة رئيسية، يرسل تطبيق العميل طلبًا يحتوي على ما يلي:

  • عنوان خادم تطبيق الاستقبال بالتنسيق SENDER_ID@fcm.googleapis.com.
  • معرّف رسالة يجب أن يكون فريدًا لكل رقم تعريف مُرسِل.
  • بيانات الرسالة التي تتألف من أزواج المفتاح/القيمة لحمولة الرسالة

وعندما تتلقّى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" هذه البيانات، تنشئ نسخة 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.

وفي الحالات التي يكون فيها الجهاز غير متصل بالإنترنت أو لا تتوفّر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" لإعادة توجيه الرسائل المرسَلة إلى الخادم، يمكن أن تتراكم مثيلات تطبيق عميل Android بحد أقصى 20 رسالة في انتظار المراجعة. إذا انتهت صلاحية هذه الرسائل قبل أن تتمكن خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" من إرسالها بنجاح، ستعرض خدمة onSendError القيمة SendException#ERROR_TTL_EXCEEDED.

لتحسين استخدام الشبكة، ترسِل خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" الردود على onMessageSent وonSendError بشكل مجمّع، وبالتالي قد لا يكون الإقرار فوريًا لكل رسالة.

تلقّي رسائل XMPP على خادم التطبيق

عندما تتلقى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" مكالمة مراسلة سابقة من أحد تطبيقات العميل، تنشئ رسالة XMPP اللازمة لإرسال الرسالة الأولية. تضيف خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" الحقلين 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 تحتوي على المعرّف الفريد للرسالة. إذا لم تتلقَّ خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" ACK، قد تعيد محاولة إرسال الرسالة إلى خادم التطبيق.

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

يُرجى الاطّلاع على مرجع خادم اتصال XMPP للحصول على مزيد من المعلومات حول بنية الرسائل الأولية.