无法使用服务器 API 发送推送通知

Posted

技术标签:

【中文标题】无法使用服务器 API 发送推送通知【英文标题】:Can't send push notifications using the server API 【发布时间】:2016-05-19 19:28:22 【问题描述】:

我正在使用新的 Firebase 平台。我正在尝试获取我的应用服务器发送的推送通知并发送到我的 iPhone。

我的设置工作正常,我通过网站上的 Firebase 通知区域手动发送消息,但是当我尝试通过 POST 将消息发送到 https://fcm.googleapis.com/fcm/send 时,我没有收到任何消息传递到设备。

我正在发送以下内容(带有身份验证标头)

 "notification": 
    "title": "Portugal vs. Denmark",
    "text": "5 to 1"
  ,
  "to" : "<registration token>"
  

我收到来自 POST 的 200 响应,正文如下:

    
  "multicast_id": 5511974093763495964,
  "success": 1,
  "failure": 0,
  "canonical_ids": 0,
  "results": [
    
      "message_id": "0:1463685441784359%3ad254b53ad254b5"
    
  ]

如果我尝试通过 Firebase 网站直接发送到此设备,它可以工作,但上面的表单帖子没有。不知道从这里去哪里!

【问题讨论】:

当您手动发送然后使用 Firebase 网站发送时,它们是否都使用相同的 Apple 推送环境?有一个 dev 和一个 prod 环境,检查您通过 Firebase 使用的环境是否与您手动使用的环境相同。 我在文档中没有看到任何地方提到这一点?从站点发送并没有给我一个开发或产品选项,其余的 API 也没有?到目前为止,我只上传了一个 dev apns 证书... 我不熟悉 Firebase,但 Apple push 的基本原理是不变的。 prod 环境与 dev 证书不兼容,反之亦然。Apple 开发环境称为沙箱。它的网址是 ssl://gateway.sandbox.push.apple.com:2195。如果您在使用 Firebase 时验证您使用的是 Apple 沙盒环境。 另外,您如何从设备获取 Apple 推送令牌?它可以而且确实会发生变化,因此每次启动应用程序时都必须检索它。使用过时的推送令牌会导致推送失败。 如果我尝试通过网站向特定令牌发送通知,它就会被传递。如果我尝试通过 API 直接发送它,它就永远不会收到。没有办法指定它是通过 dev 还是 prod apple 服务发送? 【参考方案1】:

ios 上,priority 字段似乎是强制性的。

   
  "to": "cHPpZ_s14EA:APA91bG56znW...",
  "priority": "high",
  "notification" : 
    "body" : "hello!",
    "title": "afruz",
    "sound": "default"
  
 

【讨论】:

绝对荒谬。谢谢! 你用沙盒令牌测试过这个吗? 对我来说,它只适用于“高”优先级。 “正常”从未交付。 我也遇到了同样的问题。如果我使用仪表板,则推送已交付,但无法通过 API 工作。我正在使用开发推送证书。 我不应该说“也谢谢我”,但是……谢谢。这确实需要在文档中。【参考方案2】:

如果 API 向您返回 message_id,则表示您的消息已被正确接受,并且最终将传送到设备。

android 上,消息会尽快传递(当然前提是设备已连接)。

在 Apple 设备上,如果应用程序已关闭或处于后台,则通知将通过 Apple 基础架构发送,并可通过 Apple 文档相应延迟。

要减少发送到 Apple 设备的优先消息的延迟,您可以使用 priority 参数。 更多详情:https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message

【讨论】:

高优先级有帮助!谢谢。【参考方案3】:

我发现message 字段是必需的,priority 字段是通过 POST 传递消息的。

message 在 Firebase 控制台中不是必需的(并且标记为可选)。

【讨论】:

【参考方案4】:

我解决了在没有priority 的情况下在请求正文中添加notification 标记。

这里是一个回顾:

【讨论】:

以上是关于无法使用服务器 API 发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章

无法过滤 Gmail API 推送通知 [重复]

如何从 nodejs 接收(不发送)推送通知?

无法从 Parse 仪表板发送推送通知

解析服务器无法发送推送通知?

无法通过 APNS 向设备发送 MDM 推送通知。

从服务器发送通知时未触发推送事件