Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Gửi tin nhắn ngược dòng trên Android

Nếu máy chủ ứng dụng của bạn triển khai giao thức Máy chủ kết nối XMPP , nó có thể nhận thông báo ngược dòng từ thiết bị của người dùng lên đám mây. Để bắt đầu một thông báo ngược dòng, ứng dụng khách sẽ gửi một yêu cầu có chứa thông tin sau:

  • Địa chỉ của máy chủ ứng dụng nhận ở định dạng SENDER_ID@fcm.googleapis.com .
  • ID tin nhắn phải là duy nhất cho mỗi ID người gửi .
  • Dữ liệu thông báo bao gồm các cặp khóa-giá trị của trọng tải của thông báo.

Khi nhận được dữ liệu này, FCM sẽ xây dựng một bản XMPP để gửi đến máy chủ ứng dụng, thêm một số thông tin bổ sung về thiết bị gửi và ứng dụng.

Gửi tin nhắn ngược dòng từ ứng dụng khách Android

Ứng dụng Android của bạn có thể gửi tin nhắn ngược dòng bằng 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 = FirebaseMessaging.getInstance()
fm.send(RemoteMessage.Builder("$SENDER_ID@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action", "SAY_HELLO")
        .build())

Xử lý các cuộc gọi lại tin nhắn ngược dòng

Với FirebaseMessaging , bạn có thể triển khai các lệnh gọi lại onMessageSentonSendError để kiểm tra trạng thái của tin nhắn ngược dòng. Trong trường hợp lỗi, onSendError trả về SendException với mã lỗi. Ví dụ: nếu khách hàng cố gắng gửi thêm tin nhắn sau khi đạt đến giới hạn 20 tin nhắn, nó sẽ trả về SendException#ERROR_TOO_MANY_MESSAGES .

Trong trường hợp thiết bị ngoại tuyến hoặc dịch vụ FCM không khả dụng để chuyển tiếp tin nhắn ngược dòng tới máy chủ của bạn, các phiên bản ứng dụng khách Android có thể tích lũy tối đa 20 tin nhắn đang chờ xử lý. Nếu những tin nhắn như vậy hết hạn trước khi FCM có thể gửi chúng thành công, onSendError trả về SendException#ERROR_TTL_EXCEEDED .

Để tối ưu hóa việc sử dụng mạng, FCM trả lời hàng loạt các phản hồi cho onMessageSentonSendError , do đó, việc xác nhận có thể không ngay lập tức cho mỗi tin nhắn.

Nhận tin nhắn XMPP trên máy chủ ứng dụng

Khi FCM nhận được một cuộc gọi nhắn tin ngược dòng từ một ứng dụng khách, nó sẽ tạo ra đoạn văn XMPP cần thiết để gửi tin nhắn ngược dòng. FCM thêm categoryfrom các trường, sau đó gửi một đoạn thơ như sau đến máy chủ ứng dụng:

<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>

Gửi tin nhắn ACK

Để phản hồi thông báo ngược dòng như trên, máy chủ ứng dụng phải sử dụng cùng một kết nối để gửi thông báo ACK có chứa ID thông báo duy nhất. Nếu FCM không nhận được ACK, nó có thể thử gửi lại thông báo đến máy chủ ứng dụng.

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

Xem Tham chiếu Máy chủ Kết nối XMPP để biết thêm thông tin về cú pháp tin nhắn ngược dòng.