iOS:Firebase令牌返回null

时间:2016-11-29 07:21:18

标签: ios swift firebase firebase-cloud-messaging

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

我已启用了推送通知的证书和配置文件。我还使用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自动   屏幕报告已启用。致电+ [FIRAnalytics   setScreenName:setScreenClass:]设置屏幕名称或覆盖   默认屏幕类名称。要禁用自动屏幕报告,请设置   标志FirebaseAutomaticScreenReportingEnabled中的NO   Info.plist

     

2016-11-29 16:11:12.419:Firebase   消息未正确设置,nil senderID。致命错误:意外   在解包可选值时发现nil

提前感谢您提供任何建议/帮助。

3 个答案:

答案 0 :(得分:4)

在没有实施的评论中已经回答:

请务必按照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)
}

答案 1 :(得分:1)

对于仍然遇到令牌问题的人,可能是因为尚未生成令牌。

在指南(https://firebase.google.com/docs/cloud-messaging/ios/client)上,您可以找到以下部分:

  

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

我希望它有所帮助。

答案 2 :(得分:0)

我被这个问题困住了,没有在 IOS-10 之上的 IOS 设备上收到 firebase 推送通知,因为 firebase 令牌可能比您选择用于存储的数据类型长。 检查令牌列的数据类型。我已经从 varchar 转换为文本,它可以工作并挽救了我们的一天。

问候, 护林员