Gửi thông báo ngược dòng (upstream) từ ứng dụng khách Unity

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, ứng dụng 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 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 nội dung sau:

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

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

Gửi thông báo ngược dòng (upstream) từ ứng dụng khách Unity

Để gửi thông báo ngược dòng đến máy chủ, ứng dụng khách Unity sẽ soạn một thông báo và gọi Send như minh hoạ:

Firebase.Messaging.Message message;
message.To = SENDER_ID + "@fcm.googleapis.com";
message.MessageId = get_unique_message_id();
message.Data("my_message", "Hello World");
message.Data("my_action", "SAY HELLO");
message.TimeToLive = kTimetoLive;
Firebase.Messaging.FirebaseMessaging.Send(message);

trong đó:

  • message.To là địa chỉ của máy chủ ứng dụng nhận ở định dạng SENDER_ID@fcm.googleapis.com.

  • message.MessageId là giá trị nhận dạng riêng biệt của tin nhắn. Tất cả người nhận tin nhắn Các lệnh gọi lại được xác định dựa trên mã thông báo này.

  • message.Data là bản đồ các khoá và giá trị dưới dạng chuỗi.

  • message.TimeToLive chỉ định thời lượng (tính bằng giây) của tin nhắn được lưu trong bộ nhớ FCM nếu thiết bị không có kết nối mạng. Nếu FCM không thể gửi thư trước khi hết hạn này, nó sẽ gửi một thông báo lại cho máy khách.

Thư viện ứng dụng FCM lưu thông báo vào bộ nhớ đệm trên ứng dụng khách và gửi khi máy khách có kết nối với máy chủ đang hoạt động. Khi nhận được thư, FCM gửi yêu cầu này đến máy chủ ứng dụng.

Nhận thông báo XMPP trên máy chủ ứng dụng

Khi nhận được cuộc gọi nhắn tin ngược dòng từ một ứng dụng khách, FCM sẽ tạo đoạn mã XMPP cần thiết để gửi thông điệp ngược dòng. FCM thêm các trường categoryfrom, sau đó gửi một stanza 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>

Đang gửi thông báo ACK

Để phản hồi một 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 chứa mã nhận dạng thư. Nếu không nhận được ACK thì FCM 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 Tài liệu tham khảo về máy chủ kết nối XMPP để biết thêm thông tin về cú pháp thông báo truyền lên.