【问题标题】:Firebase Cloud Messaging on iOS not working properlyiOS 上的 Firebase 云消息传递无法正常工作
【发布时间】:2020-03-23 08:49:24
【问题描述】:

我添加到我的项目 Firebase 云消息传递 以接收和发送推送通知。我按照谷歌原始教程中的步骤进行操作。结果令人兴奋,我可以在我的设备上接收推送通知 - 我将它发布到 TestFlight - 出现问题

我意识到我需要创建不同的证书。 (???) 然后我从 Firebase Cloud 消息传递中删除我的密钥 (.p8) 并重新创建它(开发也是)+ 我重新创建了相同的开发配置文件(我撤销的旧配置文件),我重复了教程中的过程,但现在我即使在我的设备中也无法收到推送通知,在 TestFlight 上也没有。

谁能帮我解答这些问题?

  1. 我应该创建哪个证书/配置文件?目前,我已经为开发创建了 .p8 密钥并为开发创建了配置文件(不再工作)
  2. 我应该更改我的代码中的某些内容吗?我发现某处我应该将 URL 从沙盒更改为产品,Firebase 会自动执行吗?设备令牌有问题吗?将 FCM 令牌复制/粘贴到控制台时,我什至收不到测试通知。
  3. 可以从 Firebase 消息控制台发送静默推送通知吗? (我可以在 Firebase 控制台中设置所有必需的标头吗?)
  4. .p8 和 .p12 之间的区别?有可能有 .p8 用于生产的密钥吗?

请帮助我。 谢谢!

[更新][已解决] 完成 this answer 的步骤并将 Firebase 中的团队 ID 更改为来自 Apple Developer 的相同团队 ID后,我能够收到通知到我的设备和所有TestFlight 设备。

【问题讨论】:

    标签: ios swift firebase push-notification apple-push-notifications


    【解决方案1】:

    Firebase 与开发和生产无关。如果您使用两个不同的 firebase 应用程序,一个用于开发,另一个用于生产,那将是您的最终目标。如果是这种情况,您只需更改相应环境的 GoogleService-Info.plist。 以下是正确实施 Firesbase 推送通知应遵循的步骤。

    1) 转到您的苹果开发者帐户并为 APNS 创建一个新密钥。 (Reference)

    2) 创建一个 firebase 项目并添加一个 iOS 应用程序,然后在您的应用程序设置的 Cloud Messaging 选项卡中添加您刚刚在第一步中创建的带有 KeyID 和 TeamID 的密钥。

    3) 将 GoogleService-Info.plist 添加到项目的根目录,并从 Xcode 中的功能添加推送通知。

    4) 然后在你的应用中初始化 firebase (Reference)

    5) 添加代码以在应用启动时请求通知权限。

    6) 最后通过这个方法得到 fcmToken

    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)

    并从 firesbase 向该令牌发送通知。

    注意:对于配置文件,在 Xcode 中启用自动签名,Xcode 将自行执行签名过程。现在我们不需要手动创建配置文件了。

    【讨论】:

    • 您好,我删除了所有连接到 Firebase Cloud Messaging 的代码,我从手机中删除了该应用程序,清除 Xcode 中的构建,删除 Firebase Cloud Messaging 中的服务器,从 Firebase 中删除旧密钥并开发人员,删除配置文件。我按照您编写的所有步骤进行操作,我成功收到了 fcmToken,将其复制并粘贴到 Firebase 测试通知 - 没有任何反应。
    • 确保您的应用在发送通知时没有运行。
    • 我确定。我的项目中应该有 MyApp.entitlements 文件吗?我没有,我在教程的某个地方看到它。
    • 是的,我明白了,github.com/PeHk/AcademicInformationSystem,我的项目是开源的,因为这是我的学士论文。权利文件应该是这样的吗? <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>aps-environment</key> <string>development</string> </dict> </plist>
    • 请仔细检查您的 Firebase 应用是否与您的 iOS 应用具有相同的 bundleID,并且您添加了正确的 GoogleService-Info.plist。
    【解决方案2】:

    在我们的例子中,在主项目设置中,团队 ID 被设置为团队名称,在更改它并使用正确的团队 ID 再次上传 APN 密钥后它开始工作,因此您可能需要仔细检查.

    【讨论】:

      【解决方案3】:

      在我的情况下,这是错误的 APNs 身份验证密钥 我们已将错误的文件上传到 firebase 控制台,一旦用正确的 APN 密钥替换,通知就像一个魅力。无需更改代码

      【讨论】:

        【解决方案4】:

        确保不要重命名授权密钥文件

        就我而言,我已将身份验证密钥文件重命名为其他内容,这导致了问题。我尝试将其命名回默认格式AuthKey_<KeyID>.p8,一切都开始工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-10
          • 1970-01-01
          • 1970-01-01
          • 2019-07-12
          • 2020-07-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多