我按照谷歌在www.example.com上的教程https://firebase.google.com/docs/notifications/ios/console-topics#receive_and_handle_topic_messages在我的iOS应用程序上订阅了一个Firebase主题。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
FIRMessaging.messaging().subscribeToTopic("/topics/Notifications")
let homeViewController = UINavigationController(rootViewController: HomeViewController())
UINavigationBar.appearance().translucent = false
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = homeViewController
window?.makeKeyAndVisible()
return true
}
但是,当我从Firebase控制台发送主题推送通知时,我无法收到任何推送通知。但当我从控制台向用户段发送推送通知时,推送工作正常。当我检查Xcode控制台时,我看到FIRMessaging错误。
2016-05-31 11:11:47.893: <FIRMessaging/WARNING> Cannot subscribe to topic: /topics/Notifications with token: (null)
我已经尝试搜索此错误,但没有找到任何结果。我不确定是否是这个问题导致我的应用程序无法接收来自主题的任何推送。
有没有人遇到这个问题,知道如何解决它?
3条答案
按热度按时间1l5u6lss1#
看起来你打电话给
subscribeToTopic
太早了。首先,在设置任何Firebase调用之前,请确保调用
这将确保正确设置和初始化所有Firebase服务。
接下来,你需要稍等片刻才能订阅主题。你的客户端需要先在苹果推送通知和FCM上注册你的应用,以确保它能收到通知。这涉及到网络呼叫,这意味着你不能在应用第一次启动时订阅主题。
相反,我建议将该代码放入
application:didRegisterUserNotificationSettings
处理程序中。编辑:和斯威夫特版本...
20jt8wwn2#
accepted solution对我不起作用。当调用
application:didRegisterUserNotificationSettings:
时,该标记并不总是可用的。例如,如果应用程序是新安装的,并且是第一次启动,FIRInstanceID.instanceID().token()
将返回nil。您需要确保应用程序在令牌可用后调用
subscribeToTopic:
。我最后创建了一个helper对象,该对象将subscribeToTopic:
、unsubscribeFrom:
调用排队,并在令牌到达后按FIFO顺序执行它们。TokenReadyOperation会一直等到词语基元出现。AsynchronousOperation会当做基底类别使用,以最小化样板。
请记住以下几点:
FIRApp.configure()
或FIRApp.configureWithOptions(_:)
(如Todd Kerpelman所述)subscribeToTopic:
、unsubscribeFrom:
不是线程安全的,必须在主线程上执行FIRApp.configureWithOptions(_:)
文档。to94eoyn3#
我的问题在之后呼叫
subscribeToTopic
仍无法解决func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
个相反,它是通过在
当您从APNS而不是firebase获取推送令牌时,将调用此函数。
Xcode 8.3.2版本
雨燕3.0