iOS:Firebase标记返回null

我目前正在尝试按照官方的Firebase文档实施Firebase云消息传递。

我已经解决了启用了推送通知的证书和供应configuration文件。 我也使用CocoaPods安装了所有必要的框架(FirebaseMessaging,Firebase),并且它们似乎工作正常。

在应用程序委托中,我尝试用下面的代码初始化Firebase云消息传递令牌。

let token = FIRInstanceID.instanceID().token()! 

我还设置GCM启用,并在GoogleService-Info.plist中有一个GCM发件人ID值。

我得到的错误如下:

2016-11-29 16:11:12.358 Firebasesample [3852:122151]启用了Firebase自动屏幕报告function。 调用+ [FIRAnalytics setScreenName:setScreenClass:]设置屏幕名称或覆盖默认的屏幕类名称。 要禁用自动屏幕报告,请将Info.plist中的标志FirebaseAutomaticScreenReportingEnabled设置为NO

2016-11-29 16:11:12.419:Firebase消息传递设置不正确,无发件人ID。 致命错误:意外地发现零,而解包一个可选值

提前感谢您的任何build议/帮助。

已经在没有执行的评论中回答了:

确保您按照https://firebase.google.com/docs/cloud-messaging/ios/client上的设置指南进行操作。

在你的didFinishLaunchingWithOptions添加下面的方法(在FIRApp.configure() )。

 NotificationCenter.default.addObserver(self, selector: #selector(tokenRefreshNotification(_:)), name: NSNotification.Name.firInstanceIDTokenRefresh, object: nil) 

当你的令牌刷新时,它会调用:

 func tokenRefreshNotification(_ notification: Notification) { guard let token = FIRInstanceID.instanceID().token() else { QL3("No firebase token, aborting registering device") return nil } //register your token somewhere.. registerToken(token) } 

对于那些仍然有问题得到令牌,也许是因为令牌尚未产生。

在指南( https://firebase.google.com/docs/cloud-messaging/ios/client )上可以find这个部分:

当你需要当前令牌时,检索它。 如果令牌尚未生成,则可能返回null。

我希望它有帮助。