FCM推送通知在iOS 11中不起作用

我需要处理推送通知,这是通过较低版本的ios完成的,但是在ios 11中,从未收到任何推送通知。我使用Firebase Cloud

Messaging。请任何人有解决方案,然后请分享。

回答:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// Use Firebase library to configure APIs

FirebaseApp.configure()

self.registerForPushNotifications(application: application)

Messaging.messaging().delegate = self

    if let token = InstanceID.instanceID().token() {

NSLog("FCM TOKEN : \(token)")

DataModel.sharedInstance.onSetUserFCMStringToken(FCM: token)

self.connectToFcm()

}

if launchOptions != nil {

//opened from a push notification when the app is closed

_ = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] ?? [AnyHashable: Any]()

}

else {

//opened app without a push notification.

}

return true

}

@available(iOS 10,*)

extension AppDelegate: UNUserNotificationCenterDelegate {

// iOS10+, called when presenting notification in foreground

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

let userInfo = notification.request.content.userInfo

NSLog("[UserNotificationCenter] willPresentNotification: \(userInfo)")

//TODO: Handle foreground notification

completionHandler([.alert])

}

// iOS10+, called when received response (default open, dismiss or custom action) for a notification

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

let userInfo = response.notification.request.content.userInfo

NSLog("[UserNotificationCenter] didReceiveResponse: \(userInfo)")

//TODO: Handle background notification

completionHandler()

}}

extension AppDelegate : MessagingDelegate {

//MARK: FCM Token Refreshed

func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {

NSLog("[RemoteNotification] didRefreshRegistrationToken: \(fcmToken)")

}

// Receive data message on iOS 10 devices while app is in the foreground.

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {

NSLog("remoteMessage: \(remoteMessage.appData)")

}}

//Register for push notification.

func registerForPushNotifications(application: UIApplication) {

if #available(iOS 10.0, *) {

let center = UNUserNotificationCenter.current()

center.delegate = self

center.requestAuthorization(options: [.alert,.sound]) { (granted, error) in

if error == nil{

DispatchQueue.main.async(execute: {

application.registerForRemoteNotifications()

})

}

}

}

else {

let settings = UIUserNotificationSettings(types: [.alert,.sound], categories: nil)

application.registerUserNotificationSettings(settings)

application.registerForRemoteNotifications()

}

// Add observer for InstanceID token refresh callback.

NotificationCenter.default.addObserver(self, selector: #selector(self.tokenRefreshNotification), name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)

}

@objc func tokenRefreshNotification(_ notification: Notification) {

print(#function)

if let refreshedToken = InstanceID.instanceID().token() {

NSLog("Notification: refresh token from FCM -> \(refreshedToken)")

}

// Connect to FCM since connection may have failed when attempted before having a token.

connectToFcm()

}

func connectToFcm() {

// Won't connect since there is no token

guard InstanceID.instanceID().token() != nil else {

NSLog("FCM: Token does not exist.")

return

}

Messaging.messaging().shouldEstablishDirectChannel = true

}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {

NSLog("Notification: Unable to register for remote notifications: \(error.localizedDescription)")

}

// This function is added here only for debugging purposes, and can be removed if swizzling is enabled.

// If swizzling is disabled then this function must be implemented so that the APNs token can be paired to the InstanceID token.

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

Messaging.messaging().apnsToken = deviceToken

}

// iOS9, called when presenting notification in foreground

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

NSLog("didReceiveRemoteNotification for iOS9: \(userInfo)")

}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

}

以上是 FCM推送通知在iOS 11中不起作用 的全部内容, 来源链接: utcz.com/qa/403243.html

回到顶部