swift 推送通知:程序未运行和运行情况下收到通知处理

程序未运行的时候收到推送通知

在程序未运行的时候,点击推送通知栏通知,需要在didFinishLaunchingWithOptions里面处理

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: 
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
 
        UIApplication.shared.registerForRemoteNotifications() //注册
        //申请推送权限
        if #available(iOS 10.0, *){
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){          granted, error in
                if error != nil {
                    print(error.debugDescription)
                }
            }
            UNUserNotificationCenter.current().delegate = self
        }  else{
            UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.alert, .badge, .sound] , categories: nil))
        }

        //点击推送通知栏通知,进来之后 处理数据,
        if let userInfo = launchOptions?[.remoteNotification] as? [AnyHashable: Any] {
            print(userInfo)
            //处理数据,这个userInfo与didReceiveRemoteNotification 方法内的 userInfo内容一致.
            //比如跳转页面,或者进行一些存储等处理.
        }
}

程序启动过程中,或者程序挂起状态下

如果在程序启动过程中,或者程序挂起状态下,需要到application的代理方法内处理

    //打印收到的apns信息
    func application(_ application: UIApplication,
                     didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void){
        print("userInfo")
        //比如发送通知,或者app内部弹框告知有消息等处理.   !!!注意,程序启动的时候,有通知,也会走这个方法
        NotificationCenter.default.post(name: Notification.Name(rawValue: "RefreshMessages"), object: nil, userInfo: nil)
        completionHandler(.newData)
    }

如果我的文章对你有帮助,请给我一个哦~~!

你可能感兴趣的:(swift 推送通知:程序未运行和运行情况下收到通知处理)