Swift 4, Firebase 5.8.0 токен FCM ноль

Я настраиваю push-уведомления, и все идет хорошо, пока я не попытаюсь получить токен FCM, чтобы я мог отправить тестовое сообщение на реальное устройство. Используя модули Firebase 5.8.0, FirebaseCore (5.1.3), FirebaseInstanceID (3.2.1) и FirebaseMessaging (3.1.2), я могу получить токен APNS в порядке, но каждый раз, когда я пытаюсь получить токен FCM, он приходит out как nil или когда я использую InstanceID.instanceID (). instanceID (handler :), это приводит к некоторому коду ошибки тайм-аута 1003 и результату nil. didReceiveRegistrationToken также не вызывается. Я пробовал много решений 2017 года, но они либо устарели, либо не работают. MessageDelegate и UNUserNotificationCenterDelegate установлены, push-уведомления и совместное использование связки ключей включены в возможностях, переключение методов отключено через p-list и вот моя функция didRegisterForRemoteNotificationsWithDeviceToken, в которой я правильно получаю токен apns. Любые идеи? Спасибо.

`public func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    print("Registration Successful: Device token \(deviceToken)")
    Messaging.messaging().apnsToken = deviceToken
    print("Messaging APNS Token:\(Messaging.messaging().apnsToken)")
    print("Instance Id: \(InstanceID.instanceID().token())") //deprecated & returns nil

    print("Messaging APNS Token:\(Messaging.messaging().apnsToken)")
    print("Token:\(Messaging.messaging().fcmToken)") // return nil
    InstanceID.instanceID().instanceID { (result, error) in
        if let result = result {
             print("Result:\(String(describing: result?.token))")
    } else {
            print("Error:\(error))")
    } //returns after about 2 mins with an firebase iid error of 1003

}

Вы это решили?

Sunkas 19.05.2020 23:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
2 777
1

Ответы 1

Пожалуйста, проверьте приведенный ниже код делегата приложения.

import UIKit
import Firebase
import FirebaseMessaging
import UserNotifications


class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {


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



    //REMOTE NOTIFICATION

    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()

    Messaging.messaging().delegate = self

    let token = Messaging.messaging().fcmToken
    print("FCM token: \(token ?? "")")



    //Added Code to display notification when app is in Foreground
    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().delegate = self
    } else {
        // Fallback on earlier versions
    }
    return true
}



func application(_ application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    Messaging.messaging().apnsToken = deviceToken as Data
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    // Print full message.
    print(userInfo)
}



// This method will be called when app received push notifications in foreground
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
    completionHandler([UNNotificationPresentationOptions.alert,UNNotificationPresentationOptions.sound,UNNotificationPresentationOptions.badge])
}


// MARK:- Messaging Delegates
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    InstanceID.instanceID().instanceID { (result, error) in
        if let error = error {
            print("Error fetching remote instange ID: \(error)")
        } else if let result = result {
            print("Remote instance ID token: \(result.token)")
        }
    }
}

    func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
        print("received remote notification")
    }
}

Это в значительной степени то, что у меня уже было. Использование let token = Messaging.messaging (). FcmToken возвращает ноль. И я не знаю, для чего нужны эти функции Reach. Я могу получить токен APNS, но токен FCM равен нулю

B Dub 17.09.2018 00:31

Не обращайте внимания на функцию досягаемости. Я редактировал то же самое. Также попробуйте удалить модуль и снова добавить его в модуль Firebase / Messaging.

Yogesh Tandel 17.09.2018 12:57

Строка «Messaging.messaging (). Delegate = self» должна быть после «registerForRemoteNotifications ()».

evya 23.05.2020 14:30

Другие вопросы по теме