代码之家  ›  专栏  ›  技术社区  ›  Miles Zoltak

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

  •  0
  • Miles Zoltak  · 技术社区  · 4 年前

    我正在用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控制台在线发送消息。两者都失败了。 我还启用了推送通知和后台模式以及后台提取和远程通知。

    如有任何帮助或建议,我们将不胜感激。

    0 回复  |  直到 4 年前
        1
  •  2
  •   Miles Zoltak    4 年前

    这真的很愚蠢,但问题是firebase中的Bundle ID不正确。当我第一次连接firebase时,它给了我一个默认的捆绑包id(com.firebase.io或类似的东西)。后来,当我真的把我的应用程序放在试飞上时,我完全把它称为其他东西。所以,尽管我遵循了FlutterFire网站上关于建立苹果的所有指示 here 它不起作用,因为捆绑ID不匹配。

    因此,我不得不删除firebase应用程序,替换googleservicesinfo.plist文件(我认为只需更改该文件中的bundle id字段(当然是idk)就足够了),然后在firbase控制台中替换它。不得不使用“新”应用程序重新部署身份验证密钥。

    希望这是有道理的。如果你还有其他问题,请评论!