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

9
我正在使用新的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推送环境?有一个开发环境和一个生产环境,请检查您通过Firebase使用的环境是否与您手动使用的环境相同。 - Gruntcakes
文档中好像没有提到这一点?从网站发送不给我 dev 或 prod 选项,rest API 也是如此?到目前为止我只上传了开发 apns 证书... - DaBeeeenster
我不熟悉Firebase,但苹果推送的基本原理是不变的。生产环境与开发证书不兼容,反之亦然。苹果开发环境称为沙盒。其URL为ssl://gateway.sandbox.push.apple.com:2195。如果在使用Firebase时验证您正在使用苹果沙盒环境。 - Gruntcakes
另外,你是如何从设备中获取苹果推送令牌的?它可能会发生改变,因此每次应用程序启动时都必须检索它。使用过期的推送令牌将导致推送失败。 - Gruntcakes
如果我尝试通过网站向特定令牌发送通知,它会被传送。但是如果我随后尝试通过API发送通知,则永远不会收到。目前没有办法指定是通过开发人员还是生产Apple服务发送。 - DaBeeeenster
必须有一种方法在开发和生产之间切换API,这两者根本不兼容。除非该API仅用于生产环境 - 您是否尝试上传生产证书以供API使用? - Gruntcakes
4个回答

34

在 iOS 上,priority 字段似乎是必需的。

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

1
绝对荒谬。谢谢! - Luís Jesus
你是否使用沙盒令牌进行了测试? - Petr Pavlík
2
对我来说,只有使用“高”优先级才有效。 “正常”从未被传递。 - Craig Siemens
我也遇到了同样的问题。如果我使用仪表板,推送会被传递,但是从API中无法工作。我正在使用开发推送证书。 - FelipeOliveira
我不应该说“谢谢我也是”,但是...谢谢。这个真的需要在文档中。 - MattD
这太疯狂了!一遍又一遍地检查.p12证书,浪费了两天时间,而我所需要的只是这个“优先级”东西!优先级起了作用! - ramires.cabral

1
我在请求正文中添加了notification标签,没有priority。以下是摘要: 输入图像描述

1
我发现使用POST方法发送消息时,message字段和priority字段是必填的。
在Firebase控制台中,message字段被标记为可选项。

1
如果API返回了一个,这意味着您的消息已被正确接受,并最终将传递到设备。
在Android上,消息会尽快传递(前提是设备已连接)。
在苹果设备上,如果应用程序关闭或在后台运行,则通知将通过Apple基础架构发送,并根据Apple文档相应地延迟。
为了减少发送到苹果设备的优先消息的延迟,您可以使用参数。 更多详细信息:https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message

高优先级有助于提高效率!谢谢。 - Vincent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接