Способы получения токена FCM с помощью Firebase? - PullRequest
0 голосов
/ 17 сентября 2018

Я использую Firebase, пытаясь получить токен FCM, чтобы я мог проверить Push-уведомления на реальном устройстве.Я получаю токен APNS в порядке, устанавливаю его с

Messaging.messaging().apnsToken = deviceToken,

, но когда я пытаюсь использовать Messaging.messaging().fcmToken для получения токена FCM, он возвращает ноль, а также

InstanceID.instanceID().instanceID { (result, error)  in } //returning nil.

Однако, когда я использую Messaging.messaging().retrieveFCMToken или InstanceID.instanceID().getID, я получаю результаты, но я не вижу никого, кто бы пропагандировал использование этих функций для получения токена FCM.Являются ли эти функции правильными способами получения токена FCM?

1 Ответ

0 голосов
/ 17 сентября 2018

Попробуйте это, это работает для меня (код Swift 4)

Запрос на разрешение

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    self.setupFirebase(applicatin: application)
}

Настройка Firebase registerUserNotificationSettings

func setupFirebase(applicatin:UIApplication)
{
    if #available(iOS 10.0, *) {
        let authOptions : UNAuthorizationOptions = [.alert, .badge , .sound]

        UNUserNotificationCenter.current().requestAuthorization(
        options: authOptions,
        completionHandler: {_,_ in })
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self
        // For iOS 10 data message (sent via FCM)
        // FIRMessaging.messaging().remoteMessageDelegate = self
    } else {

        let notificationtype :UIUserNotificationType = [UIUserNotificationType.alert,UIUserNotificationType.badge,UIUserNotificationType.sound]
        let notificationsettings = UIUserNotificationSettings(types: notificationtype, categories: nil)

        applicatin.registerUserNotificationSettings(notificationsettings)
    }
    applicatin.registerForRemoteNotifications()
}

Получение токена устройства

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    guard InstanceID.instanceID().token() != nil
        else {
            return
    }

    if let refreshedToken = InstanceID.instanceID().token()
    {
        print("InstanceID token: \(refreshedToken)")
    }
}

В случае ошибки

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("Filed to register : \(error.localizedDescription)")
}
...