ios - Firebase (FCM) 无法获取 APNS token 错误域=com.firebase.iid 代码=1001

标签 ios swift firebase firebase-cloud-messaging firebase-notifications

我正在尝试使用 FCM 进行通知。
但是<FIRInstanceID/WARNING>无法获取 APNS token 错误 Domain=com.firebase.iid Code=1001 "(null)"发生所以我无法收到通知。 有什么问题?

在控制台,
无法获取 APNS token Error Domain=com.firebase.iid Code=1001 "(null)"

下面是我在 Appdelegate 上的代码

import UIKit
import CoreData
import Alamofire
import Firebase
import FirebaseInstanceID
import FirebaseMessaging

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    var badgeCount : Int = 0;

    enum BasicValidity : String {
        case Success = "basicInfo"
        case Fail = "OauthAuthentificationError"
    }

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


        let uns: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
        application.registerUserNotificationSettings(uns)
        application.registerForRemoteNotifications()

        FIRApp.configure()

        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification), name: kFIRInstanceIDTokenRefreshNotification, object: nil)

        if let token = FIRInstanceID.instanceID().token() {
            sendTokenToServer(token)
            print("token is < \(token) >:")
        }

        return true
    }

    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData){


        print("didRegisterForRemoteNotificationsWithDeviceToken()")

        // if FirebaseAppDelegateProxyEnabled === NO:
        FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .Sandbox)

        print("APNS: <\(deviceToken)>")
    }

    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError){

         print("Registration for remote notification failed with error: \(error.localizedDescription)")
    }

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]){


        print("didReceiveRemoteNotification()")

        //if FirebaseAppDelegateProxyEnabled === NO:
        FIRMessaging.messaging().appDidReceiveMessage(userInfo)

       // handler(.NoData)

    }

    // [START refresh_token]
    func tokenRefreshNotification(notification: NSNotification) {
        print("tokenRefreshNotification()")
        if let token = FIRInstanceID.instanceID().token() {
            print("InstanceID token: \(token)")
            sendTokenToServer(token)
            FIRMessaging.messaging().subscribeToTopic("/topics/global")
            print("Subscribed to: /topics/global")
        }
        connectToFcm()
    }
    // [END refresh_token]

    func sendTokenToServer(currentToken: String) {
        print("sendTokenToServer() Token: \(currentToken)")
        // Send token to server ONLY IF NECESSARY
    }

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

    func applicationWillResignActive(application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }

    // [START disconnect_from_fcm]
    func applicationDidEnterBackground(application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

        FIRMessaging.messaging().disconnect()
        print("Disconnected from FCM.")
    }

    func applicationWillEnterForeground(application: UIApplication) {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

       // UIApplication.sharedApplication().applicationIconBadgeNumber = 0
         connectToFcm()

    }

    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
        // Saves changes in the application's managed object context before the application terminates.
        self.saveContext()
    }
  • 如果我使用包 ID 发送通知,我可以从 Firebase consol 获得通知。但是如果我们的服务器使用 token 向特定设备发送通知,我无法获得。

最佳答案

对我来说,我试着跟随 thigs 让它工作:

  • 重新启用功能->推送通知、钥匙串(keychain)共享和后台模式->远程通知
  • 重新安装应用程序(这将生成新的刷新 token ,后续运行将相同,因此可能不会在您每次运行应用程序时都打印出来)。
  • 确保我在 firebase 控制台->项目设置->云消息中上传了正确的 .p12 文件
  • 正在苹果开发者中心重新检查配置文件(我不得不重新激活 ios 开发者配置文件。)

您可能仍会收到警告,但如果您尝试使用刷新 token 从 firebase 控制台发送通知,它将起作用。

关于ios - Firebase (FCM) 无法获取 APNS token 错误域=com.firebase.iid 代码=1001,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909670/

相关文章:

ios - 如何在 Objective C 中编写以下代码?

ios - 我可以从 iOS 应用程序分享多个图像和多个视频吗

iOS 11 设备方向自动旋转

javascript - 如何在 FIRESTORE 中的文档中输入多个数据

javascript - 如何使用 Firebase 根据查询结果执行服务器验证?

ios - SQLite 不在 iOS 中按日期排序数据?

ios - 自定义布局CollectionView无法滚动

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

ios - 获取拖动预览的帧

javascript - 如何在数组映射循环中的 redux saga 中发出并行请求到 firebase 中?