FirebaseApp.configure () Тема 1: Сигнал SIGBART - PullRequest
0 голосов

Я делаю кое-что с Firebase и Cloud Messaging.

И проблема в том, что мне нужно вызвать application.registerForRemoteNotifications () ПЕРЕД FirebaseApp.configure ().Я читал, что это должно решить мою проблему.

Я работаю с проектом, полученным от работодателя, и FirebaseApp.configure () называется так:

override init() {
    super.init()
    FirebaseApp.configure()
}

Я не знаюпочему это так.

И application.registerForRemoteNotifications () вызывается в приложении (didFinishLaunchingWithOptions).Вот что у меня есть:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    //        FirebaseApp.configure()
    GMSPlacesClient.provideAPIKey("AIzaSyCWMU53OSR4zO28i9e2BsASnda3X1TAS2Y")
    GMSServices.provideAPIKey("AIzaSyCWMU53OSR4zO28i9e2BsASnda3X1TAS2Y")
    UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)


    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor:UIColor.clear], for: .normal)
    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor:UIColor.clear], for: .selected)




    print("Token is ", Messaging.messaging().fcmToken)


    Thread.sleep(forTimeInterval: 1.0)

    if #available(iOS 10, *) {
        UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate

        Messaging.messaging().delegate = self

        UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: { (granted, err) in
            //                application.registerForRemoteNotifications()
        })
    } else {
        let notificationSettings = UIUserNotificationSettings(types: [.badge, .alert, .sound], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(notificationSettings)
        UIApplication.shared.registerForRemoteNotifications()
    }

    application.registerForRemoteNotifications()

    return true
}

И проблема в , когда я пытаюсь поставить FirebaseApp.configure() в начале application(didFinishLaunchingWithOptions) Я получаю

Поток 1: ошибка сигнала SIGABRT.

Из консоли я получаю :

Завершение приложения из-за необработанного исключения 'NSInternalInconsistencyException', причина: 'Экземпляр FIRApp по умолчанию должен быть настроен до инициализации FIRAuthinstance по умолчанию.Один из способов убедиться, что это вызов [FIRApp configure];, вызывается в application:didFinishLaunchingWithOptions:. '

Я не могу понять причину.

1 Ответ

0 голосов
/ 27 мая 2018

Сначала FirebaseApp.configure () должен находиться в самой первой строке didFinishLaunchingWithOptions

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    ...

.

После этогоВы делаете все регистрационные вещи.

    ...
    // Thread.sleep(forTimeInterval: 1.0) // why do you need a sleep here?
    if #available(iOS 10, *) {
        UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
        Messaging.messaging().delegate = self
        UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: { (granted, err) in
           application.registerForRemoteNotifications()
        })
    } else {
        let notificationSettings = UIUserNotificationSettings(types: [.badge, .alert, .sound], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(notificationSettings)
        UIApplication.shared.registerForRemoteNotifications()
    }
    return true
}
...