zoukankan      html  css  js  c++  java
  • swift

    1.

    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            regisigerNotification()
            
            let tv = UITextView(frame: CGRect(x: 0, y: UIScreen.main.bounds.size.height * 0.7,  300, height: 300))
            tv.backgroundColor = UIColor.cyan
            
            //FIXME: 手动杀死 APP,在进入,这里接收不到本地通知的bug。
            //FIXME:操作行为在iOS12上, X系列没用
    //        tv.text = launchOptions?.description
    //        print("launchOptions?.description = (launchOptions?.description)")
            
            tv.textColor = UIColor.red
            window?.rootViewController?.view.addSubview(tv)
            
            if launchOptions != nil{
                if let lacal = launchOptions?[UIApplication.LaunchOptionsKey.localNotification]{
                    //用户点击本地通知 启动APP : 真是开发,做点击本地通知的业务处理
                    print("lacal = (lacal)")
                }
            }
            
            
            //目前使用这个方法可以接收到本地通知的信息
            tv.text = UIApplication.shared.scheduledLocalNotifications?.description
            print("UIApplication.shared.scheduledLocalNotifications?.description = (UIApplication.shared.scheduledLocalNotifications?.description)")
            
    //        let str = UIApplication.shared.scheduledLocalNotifications?.description
    //        let jsonData = str?.utf8
    //        if let  loacl =  UIApplication.shared.scheduledLocalNotifications?.description as [UIApplication.LaunchOptionsKey : Any]?{
    //
    //        }
            
            return true
        }
        
        //进入前台:清空角标
        func applicationDidBecomeActive(_ application: UIApplication) {
            UIApplication.shared.applicationIconBadgeNumber = 0
        }
        
        func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, for notification: UILocalNotification, completionHandler: @escaping () -> Void) {
            print("dsadsadsadsa")
            completionHandler()
        }
        
        //接受本地通知
        func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
            print( "接受到通知")
            let sw = UISwitch()
            window?.rootViewController?.view.addSubview(sw)
        }
    
        //注册本地通知
        private func regisigerNotification(){
    
    //        //简单方式实现
    //        if #available(iOS 8.0, *) {
    //            let uns = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    //            UIApplication.shared.registerUserNotificationSettings(uns)
    //        }
            
            //复杂方式实现
            
            //1.请求本地权限
            let type  = UIUserNotificationType.alert.rawValue | UIUserNotificationType.badge.rawValue | UIUserNotificationType.sound.rawValue
            
            
            //FIXME:操作行为在iOS12上, X系列没用
            //FIXME:操作行为在iOS12上, X系列没用
            //FIXME:操作行为在iOS12上, X系列没用
            //创建一组操作行为
            let categorie1 : UIMutableUserNotificationCategory = UIMutableUserNotificationCategory()
            
            /// 设置组标识
            categorie1.identifier = "selected"
            
            //设置组里面的操作行为1
            let action1 = UIMutableUserNotificationAction()
            
            //设置操作行为的参数
            action1.identifier = "操作1"
            action1.title = "标题1"
    //        action1.behavior
    
            /// 用户的点击动作前台还是在后台
            action1.activationMode = .foreground
            
            //前台解锁: 如果在前台的话这个属性会被忽略
            action1.isAuthenticationRequired = true
            
            /// 是否是破坏性行为(使用红色表示,表示这个按钮)
            action1.isDestructive = true
            
            
            //设置组里面的操作行为2
            let action2 = UIMutableUserNotificationAction()
            
            //设置操作行为的参数
            action2.identifier = "操作2"
            action2.title = "标题2"
            //        action1.behavior
            if #available(iOS 9.0, *){
                action1.behavior = .textInput
                action1.parameters  =  [UIUserNotificationTextInputActionButtonTitleKey:"修改的标题"]
            }
            
            
            /// 用户的点击动作前台还是在后台
            action2.activationMode = .background
            
            //前台解锁: 如果在前台的话这个属性会被忽略
            action2.isAuthenticationRequired = false
            
            /// 是否是破坏性行为(使用红色表示,表示这个按钮)
            action2.isDestructive = false
            
            let actions = [action1, action2]
            
            //设置组里面的操作行为
            // 如果针对于弹框样式的通知
            // default 代表, 最多可以显示4个按钮
            // minimal, 代表,最多可以显示2个按钮
            categorie1.setActions( actions, for: UIUserNotificationActionContext.minimal)
     
            //2.附加操作行为
            let categories : Set<UIUserNotificationCategory> = [categorie1]
            
            //设置对象
            let sets = UIUserNotificationSettings(types: UIUserNotificationType(rawValue: type), categories: categories)
            
            //注册通知设置
            UIApplication.shared.registerUserNotificationSettings(sets)
        }
    
    }
    

      

    2.VC里面

    import UIKit
    
    class ViewController: UIViewController {
    
        @IBAction func sendNotification(_ sender: Any) {
            
            /// 创建
            let localNotification = UILocalNotification()
            
            //设置标题
            if #available(iOS 8.2, *) {
                localNotification.alertTitle = "斗地主卡卡"
            }
            
            //此处的 category 和 AppDelegate里面设置的要一样
            localNotification.category = "selected"
            
            //设置内容
            localNotification.alertBody = "通知来了"
            
            //几秒之后执行
            localNotification.fireDate = Date(timeIntervalSinceNow: 2)
            
            //声音 不起作用
    //        localNotification.soundName = UILocalNotificationDefaultSoundName
            localNotification.soundName = "lose.caf"
            
            //重复周期:最少1分钟
            localNotification.repeatInterval = .minute
            
             //锁屏文字 下面两行配合使用
            localNotification.alertAction = "打开666应用"
            localNotification.hasAction = true
            
            //启动图片(当用户点了本地通知,d启动我们APP的时候,带的启动图片)
            //FIXME:但是在iOS9之后这个属性 不起作用。。
            //FIXME:但是在iOS9之后这个属性 不起作用。。
            localNotification.alertLaunchImage = "2.jpg"
            
    
            // 应用程序图标右上角显示的消息数
            localNotification.applicationIconBadgeNumber = 3
            
            // 通知上绑定的其他信息,为键值对
            localNotification.userInfo = ["id": "1",  "name": "xxxx"]
            
            //立即发送
    //        UIApplication.shared.presentLocalNotificationNow(localNotification)
            
            //发送:按照设置的执行时间发送
            UIApplication.shared.scheduleLocalNotification(localNotification)
        }
        
        //取消
        @IBAction func cancleNotification(_ sender: Any) {
            UIApplication.shared.cancelAllLocalNotifications()
        }
        
        //查看
        @IBAction func viewNotification(_ sender: Any) {
        print(UIApplication.shared.scheduledLocalNotifications)
        }
    
    }
    

      

  • 相关阅读:
    验证码的编写 asp.net
    甲骨文收购Sun,IT业界进入三国时代
    动态加载css文件导致IE8崩溃的问题
    页面调试中关于Console应该注意的地方
    关于仿网易邮箱5.0的Neter UI框架的开源声明
    仿网易邮箱5.0(二):core.js
    仿网易邮箱5.0(三):panel.js
    仿网易邮箱5.0(一):页面基本样式
    Windows下配置Sass编译环境
    ASP+Access查询时按时间进行查询
  • 原文地址:https://www.cnblogs.com/qingzZ/p/10278229.html
Copyright © 2011-2022 走看看