如果我使用APNs身份验证密钥,是否需要APNs证书?

3

我正在使用Flutter和Firebase编写跨平台应用程序。我一直在研究如何发送通知,在安卓上已经能够完美地实现了。我通过Firebase管理函数SDK无问题地发送消息。请求如下:

const payload = {
  notification: {
    title: title,
    body: body,
  },
}

return admin.messaging().sendToDevice(tokens, payload, {
    mutableContent: true,
    contentAvailable: true,
    apnsPushType: "background",
})

但是当我尝试发送消息到iOS设备时,从shell中会收到以下错误:
"error": {
    "errorInfo": {
        "code": "messaging/third-party-auth-error",
        "message": "A message targeted to an iOS device could not be sent
                   the required APNs SSL certificate was not uploaded or
                   has expired. Check the validity of your development and
                   production certificates."
    },
    "codePrefix": "messaging"
}

我原本认为,由于我使用的是在苹果开发者控制台生成的APNs密钥,所以不需要任何类型的SSL证书。 我的密钥已上传至Firebase控制台,并且iOS设备成功报告其设备令牌,因此我不确定为什么无法通过消息传递。
我已尝试从CLI和FCM在线控制台发送消息。 两者都失败了。 我还启用了推送通知和后台模式,包括后台获取和远程通知。
如有帮助或建议,将不胜感激。

你是否按照这篇文章所述生成了APNS证书? - AechoLiu
事实证明这不是问题所在。老实说,我甚至不确定.pem文件有什么用途。Firebase现在支持.p12文件作为认证密钥,因此也许这在某个时候很有用,但现在可能已经过时了。无论如何,感谢您的帮助!@AechoLiu - Miles Zoltak
1个回答

3
这真的很愚蠢,但问题出在了Firebase中不正确的Bundle ID。当我第一次连接Firebase时,它给了我一个默认的Bundle ID(com.firebase.io之类的东西)。后来当我将应用程序放到TestFlight上并重新命名时,它被完全改变了。所以即使我按照FlutterFire网站上设置苹果这里的所有指示进行操作,因为Bundle ID不匹配,所以它无法正常工作。
因此,我不得不删除Firebase应用程序,在googleservicesinfo.plist文件中替换它(虽然我不确定只更改该文件中的bundle id字段是否足够),然后在Firebase控制台中进行替换。还必须用“新的”应用程序重新上传身份验证密钥。
希望这有意义。如果您有任何其他问题,请留言!

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