没有在前台ios应用程序中获取FCM消息

时间:2018-01-05 11:11:12

标签: ios swift firebase firebase-cloud-messaging

我正在我的didFinishLaunchingWithOptions方法中注册并在ios中启动firebase。

    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 })
        // For iOS 10 data message (sent via FCM
        FIRMessaging.messaging().remoteMessageDelegate = self

    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()


    FIRApp.configure()

然后在AppDelegate

中设置这样的回调
 func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
    print("fir msg front : \(remoteMessage.appData)")
    print(remoteMessage.appData)
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {

    print("fir msg : \(userInfo)")
}

当我从我的服务器发送消息时,当应用程序不在前台时,它会显示通知,但是当应用程序处于前台时,我看不到任何通知,也没有调用任何回调。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

请实施UNUserNotificationCenterDelegate方法。从iOS 10开始,您将在UNUserNotificationCenterDelegate方法中获得回调。

// The method will be called on the delegate only if the application is in the foreground. If the method is not implemented or the handler is not called in a timely manner then the notification will not be presented. The application can choose to have the notification presented as a sound, badge, alert and/or in the notification list. This decision should be based on whether the information in the notification is otherwise visible to the user.

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions){

}

// The method will be called on the delegate when the user responded to the notification by opening the application, dismissing the notification or choosing a UNNotificationAction.

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping (){

}

如果没有实现这些,您将在以下行中收到错误 -

UNUserNotificationCenter.current().delegate = self