2016-08-23 117 views
12
2016-08-22 18:34:50.108: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO 
2016-08-22 18:34:50.106 YAKKO[4269:] <FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see ...) 
2016-08-22 18:34:50.114: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)" 
2016-08-22 18:34:50.120: <FIRMessaging/INFO> FIRMessaging library version 1.1.1 
2016-08-22 18:34:50.125: <FIRMessaging/WARNING> FIRMessaging AppDelegate proxy enabled, will swizzle app delegate remote notification receiver handlers. Add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO 
2016-08-22 18:34:50.144 YAKKO[4269:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist 
2016-08-22 18:34:50.188 YAKKO[4269:] <FIRAnalytics/INFO> Firebase Analytics enabled 

此问题已被问起before。但我仍然对如何解决这个问题感到不知所措。通知不起作用,我唯一的领导是行:Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)"Firebase无法获取APNS令牌Error Domain = com.firebase.iid Code = 1001“(null)”

我有双重检查,我上传了正确的.p12文件到firebase。我已经进入了目标 - > - > Capabilities->背景Modes->remote-notificationsON 我有双重检查,我bundleID的GoogleService-Info.plist的匹配

这里是我的AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 
     FIRApp.configure() 
     .... 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    print("DEVICE TOKEN = \(deviceToken)") 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) 
} 
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], 
       fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    // If you are receiving a notification message while your app is in the background, 
    // this callback will not be fired till the user taps on the notification launching the application. 
    // TODO: Handle data of notification 
    FIRMessaging.messaging().appDidReceiveMessage(userInfo) 

    // Print message ID. 
    print("Message ID: \(userInfo["gcm.message_id"]!)") 

    // Print full message. 
    print("%@", userInfo) 
} 
func tokenRefreshNotification(notification: NSNotification) { 
    // NOTE: It can be nil here 
    let refreshedToken = FIRInstanceID.instanceID().token() 
    print("InstanceID token: \(refreshedToken)") 

    connectToFcm() 
} 

func connectToFcm() { 
    FIRMessaging.messaging().connectWithCompletion { (error) in 
     if (error != nil) { 
      print("Unable to connect with FCM. \(error)") 
     } else { 
      print("Connected to FCM.") 
     } 
    } 
} 

我的猜测是,它应该在没有最后两种方法的情况下工作,但无论如何我都会将它们放在那里(根据打印声明,它看起来不像被称为)。

我打电话registerForRemoteNotifications:

static func registerForNoties(){ 

    let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] 
    let pushNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) 
    UIApplication.sharedApplication().registerUserNotificationSettings(pushNotificationSettings) 
    UIApplication.sharedApplication().registerForRemoteNotifications() 
} 

而且我可以看到deviceToken打印在控制台上。但我仍然遇到这个FireBase问题。我可以检查其他事情的任何想法?

+0

你解决这个问题? – Dmitry

+0

不,我最终放弃了Firebase for iOS并使用了PyAPNS(我的后端是用django/Python编写的)。 –

回答

2

我曾尝试构建基于iOS(Swift)的Firebase/Quickstart-iOS示例的简单应用程序,并且我遇到了同样的问题:Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)"

当应用程序在后台时,我无法收到通知。 所以,我已经找到解决方案,在这里为我工作: https://github.com/firebase/quickstart-ios/issues/103

基本上,我没有添加这个方法:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
      print("Handle push from background or closed"); 
      print("%@", response.notification.request.content.userInfo); 
     } 

...这行代码:

application.registerForRemoteNotifications() 

显然,例如用Objective-C正常工作,但例如斯威夫特缺少一些代码片段,并预期它不工作...

+0

为我工作,谢谢! – norbDEV

0

尝试将Firebase/Core更新到v3.4.4,它为我解决了意想不到的错误。否则,请尽量避免拨打unregisterForRemoteNotifications。此通话后,您无法再注册该设备以推送通知。另外,请尝试在info.plist文件中设置FirebaseAppDelegateProxyEnabledNO。我认为他们的方法会变得错误。

0

调用此方法您将获得设备令牌。我可以看到打印在控制台上的deviceToken

dispatch_async(dispatch_get_main_queue(), 
{ 
    global.appdel.tokenRefreshNotification() 
}) 
+0

你应该调用这个方法,你的第一个屏幕会出现。在appdelegate之后。 –

+0

在viewdidload()里面添加这个方法 –

相关问题