Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

  • عنوان خادم التطبيق المستلم بالتنسيق 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 ACK ، فقد يعيد محاولة إرسال الرسالة إلى خادم التطبيق.

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

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