إرسال رسائل المنبع على Android

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

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

عندما تتلقى هذه البيانات ، تُنشئ FCM مقطع XMPP لإرساله إلى خادم التطبيق ، مضيفًا بعض المعلومات الإضافية حول جهاز الإرسال والتطبيق.

أرسل رسالة من تطبيق عميل Android

يمكن لتطبيق Android الخاص بك إرسال رسالة أولية باستخدام FirebaseMessaging.send :

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());

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")
})

التعامل مع عمليات إعادة الاتصال للرسائل المنبع

باستخدام 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 للحصول على مزيد من المعلومات حول بناء جملة الرسائل الأولية.