FCM通知回复服务器

FCM notification reply to server

有一种推送通知服务,可将消息从网络服务器发送到应用程序设备。该应用程序已实现 onMessageReceived() 方法。然而,并不是所有的消息都被传递,我在某处读到 delivery_receipt_request 字段,当设置为 true 时(FCM ), 回复服务器提及消息是否已发送。我想知道,如果消息发送到发件人的端代码,我如何才能从应用程序中获取回复。

选项 1:通过 XMPP

您需要在后端 运行 XMPP 客户端。此客户端应使用您的项目参数连接到 FCM。然后,您将能够处理 FCM 发送给您的消息传递节。以下是婴儿步骤:

  1. 按照 https://www.npmjs.com/package/node-xcs 中的步骤设置 XMPP 客户端,使用您的 FCM 项目参数导出环境变量。
  2. 你可以通过那里发送消息。
  3. 侦听消息传递节:

    client.on('stanza', function(stanza) {
        //HERE IS WHERE YOU PROCESS THE STANZA
        console.log('Please process me. I AM, the stanza: ', stanza.toString())
    })

您将获得的消息传递节如下所示:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
         “message_status":"MESSAGE_SENT_TO_DEVICE",
         “original_message_id”:”m-1366082849205”
         “device_registration_id”: “REGISTRATION_ID”
      },
      "message_id":"dr2:m-1366082849205",
      "message_type":"receipt",
      "from":"gcm.googleapis.com"
  }
  </gcm>
</message>

目前只有 CCS (XMPP) 支持上游消息传递。打败自己。

选项 2:通过 HTTP

现在,如果您决定使用 FCM HTTP 协议来发送消息,那么您将必须解释在进行 HTTP 调用时返回的响应。您可以通过查看 HTTP 响应 header 和响应 body 中的错误来判断消息是否已送达。此处描述了响应的结构:https://firebase.google.com/docs/cloud-messaging/http-server-ref#interpret-downstream

再一次,把自己打倒。