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

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

  • عنوان خادم تطبيق الاستقبال بالتنسيق 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 لمزيد من المعلومات عن بنية الرسالة الأولية