【问题标题】:Not getting FCM message in foreground ios app在前台 ios 应用程序中未收到 FCM 消息
【发布时间】:2018-01-05 11:11:11
【问题描述】:

我正在我的 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)")
}

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

【问题讨论】:

标签: ios swift firebase firebase-cloud-messaging


【解决方案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

【讨论】:

  • 谢谢,它成功了。遗憾的是,谷歌没有将其明确包含在 firebase 文档中。
猜你喜欢
  • 2017-05-31
  • 2019-06-28
  • 2013-09-20
  • 1970-01-01
  • 2020-01-14
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多