【问题标题】:Can't send push notifications using the server API无法使用服务器 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 服务发送?

标签: ios firebase firebase-cloud-messaging


【解决方案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 标记。

    这里是一个回顾:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2017-08-19
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2014-07-11
      • 2015-01-01
      相关资源
      最近更新 更多