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 XMPP Connection Server (Máy chủ kết nối XMPP), thì máy chủ đó 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ề ứng dụng và thiết bị 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ư sau:

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ả lệnh gọi lại của trình nhận thông báo đều được xác định dựa trên mã nhận dạng 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 khoảng thời gian (tính bằng giây) thông báo sẽ được lưu giữ 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ông báo trước khi hết hạn này, thì FCM sẽ gửi lại thông báo cho ứng dụng.

Thư viện ứng dụng FCM sẽ lưu thông báo vào bộ nhớ đệm trên ứng dụng và gửi thông báo đó khi ứng dụng có kết nối với máy chủ đang hoạt động. Khi nhận được tin nhắn, FCM sẽ gửi tin nhắn đó đế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 lệnh gọi nhắn tin ngược dòng từ một ứng dụng khách, FCM sẽ tạo thông báo XMPP cần thiết để gửi thông báo ngược dòng. FCM thêm các trường categoryfrom, sau đó gửi một thông điệp 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ông báo duy nhất. Nếu không nhận được ACK, 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>

Hãy 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 ngược dòng.