Correct way to retrieve token for FCM - iOS 10 Swift 3

前端 未结 15 2051
日久生厌
日久生厌 2021-01-31 02:42

i had implement Firebase with FirebaseAuth/FCM etc and did sent notification successfully through Firebase Console.

However i would need to push the notification from m

15条回答
  •  南笙
    南笙 (楼主)
    2021-01-31 02:59

    First import the libraries like:

    import FirebaseInstanceID
    import FirebaseMessaging
    import UserNotifications
    

    set Delegate:MessagingDelegate, UNUserNotificationCenterDelegate

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

    Write this code on didFinishLaunching():

     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
        // Override point for customization after application launch.
        FirebaseApp.configure()
        Messaging.messaging().delegate = self
    
        //remote Notifications
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (isGranted, err) in
                if err != nil {
                    //Something bad happend
                } else {
                    UNUserNotificationCenter.current().delegate = self
                    Messaging.messaging().delegate = self
    
                    DispatchQueue.main.async {
                        UIApplication.shared.registerForRemoteNotifications()
                    }
                }
            }
        } else {
            // Fallback on earlier versions
        }
    
        if #available(iOS 10, *) {
            UNUserNotificationCenter.current().requestAuthorization(options: [.badge,.sound,.alert], completionHandler: { (granted, error) in
                application.registerForRemoteNotifications()
            })
        }else{
            let notificationSettings = UIUserNotificationSettings(types: [.badge,.sound,.alert], categories: nil)
            UIApplication.shared.registerUserNotificationSettings(notificationSettings)
            UIApplication.shared.registerForRemoteNotifications()
        }
    
        return true
    }
    

    Write connectFCM method like this way:

    func ConnectToFCM() {
        Messaging.messaging().shouldEstablishDirectChannel = true
    
        if let token = InstanceID.instanceID().token() {
            print("\n\n\n\n\n\n\n\n\n\n ====== TOKEN DCS: " + token)
        }
    

    Also write delegate methods for registering and receiving push notification:

    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
        print("\n\n\n\n\n ==== FCM Token:  ",fcmToken)
        HelperFunction.helper.storeInUserDefaultForKey(name: kFCMToken, val: fcmToken)
        ConnectToFCM()
    }
    
    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    
       // UIApplication.shared.applicationIconBadgeNumber += 1
    
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Barker"), object: nil)
    }
    
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    
        print(userInfo)
    }
    
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    
        print(userInfo)
    
        completionHandler(UIBackgroundFetchResult.newData)
    }
    
    }
    

    Now we can test it from firebase console.

    100% working, easy and tested

    Note: 1) Enable push notification from capability section of xcode.

    2) check twice your both p12 certificates uploaded on firebase project setting.

    3) Device token only can get from real device not a simulator.

提交回复
热议问题