Firebase云消息传递在iOS上无法正常工作

3
我在我的项目中添加了Firebase Cloud Messaging用于接收和发送推送通知。我遵循了Google原始教程中的步骤。结果令人兴奋,我可以在我的设备上接收到推送通知 - 我将其发布到TestFlight,但出现了问题。
我意识到我需要创建不同的证书。然后我从Firebase Cloud Messaging中删除了我的密钥(.p8),并重新创建了它(也是开发版),同时我重新创建了相同的开发配置文件(旧的我吊销了)。我重复了教程中的过程,但现在我甚至不能在我的设备上获得推送通知,也没有在TestFlight上。
有人能帮我解决这些问题吗?
  1. 我应该创建哪种证书/配置文件?目前,我已经为开发创建了.p8密钥和用于开发的配置文件(不再起作用)。
  2. 我需要在我的代码中做出改变吗?我在某处发现应该将URL从沙盒更改为生产环境,Firebase是否会自动执行?这是设备令牌的问题吗?即使我将FCM令牌复制/粘贴到控制台中,我也无法收到测试通知。
  3. 是否可以从Firebase消息控制台发送静默推送通知?(我可以在Firebase控制台中设置所有必需的标头吗?)
  4. .p8和.p12之间的区别?是否可能拥有.p8用于生产的密钥?

请帮助我解决这个问题。 谢谢!

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

4个回答

10
Firebase与开发和生产无关,如果您使用两个不同的Firebase应用程序,一个用于开发,另一个用于生产,则这将取决于您自己。如果是这种情况,您只需更改相应环境的GoogleService-Info.plist即可。 以下是正确实现Firebase推送通知的步骤:
1)前往您的苹果开发者帐户并为APNS创建一个新密钥。(参考:Reference
2)创建一个Firebase项目并添加一个iOS应用程序,然后在Cloud Messaging选项卡中,在您的应用程序设置中添加第1步中刚刚创建的KeyID和TeamID。
3)将GoogleService-Info.plist添加到您的项目根目录中,并在Xcode的功能中添加Push Notification选项。
4)然后在您的应用程序中初始化Firebase(参考:Reference
5)在应用程序启动时添加代码以请求通知权限。
6)最后,从此方法获取fcmToken:func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)并向该令牌发送来自Firebase的通知。注意:对于预配置文件,启用Xcode中的自动签名功能,Xcode将会自动进行签名过程。现在我们不需要手动创建预配置文件了。

3
你好,我删掉了所有与Firebase云消息相关的代码,从我的手机上卸载了这个应用程序,在Xcode中清除了生成,删除了Firebase云消息中的服务器,删除了Firebase和开发者中的旧密钥,还有删除了配置文件。我按照您所写的所有步骤进行操作,成功地接收到了fcmToken,将其复制并粘贴到Firebase测试通知中,但是没有任何反应。 - Peter Hlavatík
在发送通知时,请确保您的应用程序未在运行。 - Najeeb ur Rehman
1
我确定。我的项目中应该有MyApp.entitlements文件吗?我没有,在教程中看到过。 - Peter Hlavatík
是的,我看到了,https://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> - Peter Hlavatík
只是想让您知道,在Xcode11.4之前,推送通知只能在真实设备上运行(而不能在模拟器上)。我希望您正在真实设备上进行测试。 - Najeeb ur Rehman
显示剩余4条评论

1
在我们的情况下,主项目设置中团队ID被设置为团队名称,更改后并使用正确的团队ID重新上传APN密钥,它开始正常工作,因此您可能需要仔细检查一下。

1
在我的情况下,是错误的APNs认证密钥导致了问题。我们将错误的文件上传到Firebase控制台,一旦用正确的APN密钥替换,通知就像魔法般地开始工作了。不需要对代码进行任何更改。

1

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

在我的情况下,我曾将授权密钥文件重命名为其他名称,这导致了问题。我尝试将其重新命名为默认格式AuthKey_<KeyID>.p8,然后一切都开始正常工作。


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