Swift 2.3 中的 Xcode 8.1 推送通知与 firebase 集成没有得到?

编程入门 行业动态 更新时间:2024-10-28 00:15:24
本文介绍了Swift 2.3 中的 Xcode 8.1 推送通知与 firebase 集成没有得到?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Xcode 8.1 &swift 2.3 在这里我使用 firebase 集成来获取推送通知.我不知道为什么我没有收到通知..我的代码:

I am working with Xcode 8.1 & swift 2.3 here I am using firebase integration for getting push notifications.I don't know why i am not getting notifications.. My code:

     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


            if #available(iOS 10.0, *) {
                let authOptions : UNAuthorizationOptions = [.Alert, .Badge, .Sound]
                UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions(
                    authOptions,
                    completionHandler: {_,_ in })

                // For iOS 10 display notification (sent via APNS)
                UNUserNotificationCenter.currentNotificationCenter().delegate = self
                // For iOS 10 data message (sent via FCM)
                FIRMessaging.messaging().remoteMessageDelegate = self
                 application.registerForRemoteNotifications()

            } else
            {
                let settings: UIUserNotificationSettings =
                    UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
                application.registerUserNotificationSettings(settings)
            }

            application.registerForRemoteNotifications()
            FIRApp.configure()

            // Add observer for InstanceID token refresh callback.
            if #available(iOS 10.0, *) {
                NSNotificationCenter.defaultCenter().addObserver(self,
                                                                 selector: #selector(self.tokenRefreshNotification),
                                                                 name: kFIRInstanceIDTokenRefreshNotification,
                                                                 object: nil)
            } else {
                // Fallback on earlier versions
            }
    return true
    }

  func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
                     fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

        FIRMessaging.messaging().appDidReceiveMessage(userInfo)
}

 func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings)
    {
        application.registerForRemoteNotifications()


    }

    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
    {
        print(deviceToken)
        let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
        var tokenString = ""

        for i in 0..<deviceToken.length {
            tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
        }

        //Tricky line
        FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Unknown)
        print("Device Token:", tokenString)

    }
    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        // Print the error to console (you should alert the user that registration failed)
        print("APNs registration failed: (error)")
    }

    @available(iOS 10.0, *)
    func tokenRefreshNotification(notification: UNUserNotificationCenter) {
        if let refreshedToken = FIRInstanceID.instanceID().token() {
            print("InstanceID token: (refreshedToken)")
            let deviceFCMToken: String = refreshedToken
            NSUserDefaults.standardUserDefaults().setObject(deviceFCMToken, forKey: "FCMToken")
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isFCMTokenAvailable")
             //UIApplication.sharedApplication().registerForRemoteNotifications()
        }

        // Connect to FCM since connection may have failed when attempted before having a token.
        connectToFcm()
    }
    func connectToFcm()
    {
        FIRMessaging.messaging().connectWithCompletion { (error) in
            if (error != nil)
            {
                print("Unable to connect with FCM. (error)")
            } else {
                print("Connected to FCM.")
            }
        }
    }


extension AppDelegate : FIRMessagingDelegate
{
    // Receive data message on iOS 10 devices.
    func applicationReceivedRemoteMessage(remoteMessage: FIRMessagingRemoteMessage)
    {

        print("%@", remoteMessage.appData)
    }
}

推荐答案

既然你在另一个线程的评论部分上要求我,我将使用你提到的相同配置发布这组工作代码:

Since you requested me on another thread's comment section, I am posting this working set of code with the same configuration you have mentioned:

import UserNotifications

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate,CLLocationManagerDelegate, UNUserNotificationCenterDelegate {
    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        //############## FIREBASE ##################

        registerForPushNotifications(application)
        FIRApp.configure()
        // Add observer for InstanceID token refresh callback.
        NSNotificationCenter
            .defaultCenter()
            .addObserver(self, selector: #selector(AppDelegate.tokenRefreshNotification),
                         name: kFIRInstanceIDTokenRefreshNotification, object: nil)

        //############ FIREBASE END ################  

        return true
    }


    //MARK: - FIREBASE START

    //######################################## FIREBASE START ###########################################

    func registerForPushNotifications(application: UIApplication) {

        if #available(iOS 10.0, *){
            UNUserNotificationCenter.currentNotificationCenter().delegate = self
            UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert], completionHandler: {(granted, error) in
                if (granted)
                {
                    UIApplication.sharedApplication().registerForRemoteNotifications()
                }
                else{
                    //Do stuff if unsuccessful...
                }
            })
        }

        else{ //If user is not on iOS 10 use the old methods we've been using
            let notificationSettings = UIUserNotificationSettings(
                forTypes: [.Badge, .Sound, .Alert], categories: nil)
            application.registerUserNotificationSettings(notificationSettings)
        }
    }



    func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
        if notificationSettings.types != .None {
            application.registerForRemoteNotifications()
        }
    }

    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
        var tokenString = ""

        for i in 0..<deviceToken.length {
            tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
        }

        //Tricky line
        FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox)
        print("Device Token:", tokenString)
        print("Firebase Token:",FIRInstanceID.instanceID().token())
    }

    // [START receive_message]


    @available(iOS 10.0, *)
    func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
        //Handle the notification
        //Use this place to handle
    }


    @available(iOS 10.0, *)
    func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
        //Handle the notification
        //Use this place to handle the notification
        print(response)
    }

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
                     fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

        print(userInfo)
    }

    // [END receive_message]

    // [START refresh_token]
    func tokenRefreshNotification(notification: NSNotification) {
        if let refreshedToken = FIRInstanceID.instanceID().token() {
            print("InstanceID token: (refreshedToken)")
        }

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

    // [END refresh_token]

    // [START connect_to_fcm]
    func connectToFcm() {
        FIRMessaging.messaging().connectWithCompletion { (error) in
            if (error != nil) {
                print("Unable to connect with FCM. (error)")
            } else {
                print("Connected to FCM.")
            }
        }
    }
    // [END connect_to_fcm]

    func applicationDidBecomeActive(application: UIApplication) {
        connectToFcm()
        UIApplication.sharedApplication().applicationIconBadgeNumber = 0
        //FBSDKAppEvents.activateApp()
    }

    // [START disconnect_from_fcm]
    func applicationDidEnterBackground(application: UIApplication) {
        //FIRMessaging.messaging().disconnect()
        print("Disconnected from FCM.")
    }
    // [END disconnect_from_fcm]


    //###################################### FIREBASE ##########################################
    //######################################## END #############################################
}

有效载荷格式:

[aps: {
    alert =     {
        body = "Some message.";
        title = "Some title";
     };
     category = " ";
 }, Name: ios, gcm.message_id: 0:1474608925388897%17bce75117bc5555]

这篇关于Swift 2.3 中的 Xcode 8.1 推送通知与 firebase 集成没有得到?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-03-28 04:05:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/717649.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:通知   Swift   Xcode   firebase

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!