我正在我的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)")
}
当我从我的服务器发送消息时,当应用程序不在前台时,它会显示通知,但是当应用程序处于前台时,我看不到任何通知,也没有调用任何回调。我错过了什么吗?
答案 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