Уведомление Firebase обрабатывается центром userNotification, а не функциями Firebase - PullRequest
0 голосов
/ 31 октября 2018

В моем приложении реализована передача сообщений Firebase Cloud для отправки уведомлений. Всякий раз, когда я использую консоль Firebase для тестирования уведомлений Firebase, уведомления обрабатываются функциями userNotificationCenter, которые будут отображаться, а не didReceiveRemoteNotification, а не функцией Firebase applicationReceivedRemoteMessage, я что-то упустил? Кроме того, функции userNotification не имеют никаких данных, когда я пытаюсь распечатать уведомление, только что пришедшее из Firebase. вот моя установка:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, FIRMessagingDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        FIRMessaging.messaging().remoteMessageDelegate = self
        FIRApp.configure()
        registerForFireBaseNotifications()
    //Other set up variables
    connectToFcm()

        return true
    }

func registerForFireBaseNotifications(){
        let authOptions: UNAuthorizationOptions = [.alert, .sound, .badge]
        UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
        application.registerForRemoteNotifications()
    }

    func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
        print("Recieved remote firebase notification: %@", remoteMessage.appData)
    }

    func tokenRefreshNotification(notification: NSNotification) {
        let refreshedToken = FIRInstanceID.instanceID().token()
        print("FCM: Connected to FCM. Token : \(String(describing: refreshedToken))")
        connectToFcm()
    }

    func connectToFcm() {
        // Won't connect since there is no token
        guard FIRInstanceID.instanceID().token() != nil else {
            print("FCM: Token does not exist.")
            return
        }

        // Disconnect previous FCM connection if it exists.
        FIRMessaging.messaging().disconnect()

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

//Non firebase notifications
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (_ options: UNNotificationPresentationOptions) -> Void) {
    //do something with notifications that came while on foreground
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    //do something with notifications that came from background
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.sandbox)
}

1 Ответ

0 голосов
/ 01 ноября 2018

Я смог продолжить копать и нашел ответ, который искал. Для любого, кто борется с этим и понимает, как уведомления Firebase работают с IOS. Код выше для настройки является правильным. Основная проблема, с которой я столкнулся, заключалась в том, что уведомление не обрабатывалось с помощью функции Firebase applicationReceivedRemoteMessage. Это было неправильно из моего понимания! Консоль Firebase позволяет отправлять сообщения только в виде уведомлений! а это значит, что ваше приложение получит уведомление через apns! Если вы хотите запустить функцию applicationReceivedRemoteMessage, вам нужно отправить сообщение в виде объекта данных json. Что вы можете сделать через почтальона, смотрите здесь: Невозможно отправить сообщение с данными через консоль Firebase . Надеюсь, это поможет!

...