上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息,先上个图瞅瞅:
继上一篇的内容进行小小的改动:
在didFinishLaunchingWithOptions方法内进行以下修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | if (UIDevice.currentDevice().systemVersion as NSString ).floatValue >= 8 { // APService.registerForRemoteNotificationTypes( // UIUserNotificationType.Badge.rawValue | // UIUserNotificationType.Sound.rawValue | // UIUserNotificationType.Alert.rawValue, // categories: setting.categories) //1.创建一组动作 var userAction = UIMutableUserNotificationAction() userAction.identifier = "action" userAction.title = "Accept" userAction.activationMode = UIUserNotificationActivationMode.Foreground var userAction2 = UIMutableUserNotificationAction() userAction2.identifier = "action2" userAction2.title = "Ingore" userAction2.activationMode = UIUserNotificationActivationMode.Background userAction2.authenticationRequired = true userAction2.destructive = true //2.创建动作的类别集合 var userCategory = UIMutableUserNotificationCategory() userCategory.identifier = "MyNotification" userCategory.setActions([userAction,userAction2], forContext: UIUserNotificationActionContext.Minimal) var categories: NSSet = NSSet (object: userCategory) //3.创建UIUserNotificationSettings,并设置消息的显示类类型 var userSetting = UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert , categories: categories as Set< NSObject >) //4.注册推送 application.registerForRemoteNotifications() application.registerUserNotificationSettings(userSetting) } |
2.修改applicationDidEnterBackground方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | func applicationDidEnterBackground(application: UIApplication) { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. UIApplication.sharedApplication().cancelAllLocalNotifications() var notification = UILocalNotification() //notification.fireDate = NSDate().dateByAddingTimeInterval(1) //setting timeZone as localTimeZone notification.timeZone = NSTimeZone .localTimeZone() notification.repeatInterval = NSCalendarUnit .CalendarUnitDay notification.alertTitle = "This is a local notification" notification.alertBody = "Hey,It's great to see you again" notification.alertAction = "OK" notification.category = "MyNotification" //这个很重要,跟上面的动作集合(UIMutableUserNotificationCategory)的identifier一样 notification.soundName = UILocalNotificationDefaultSoundName //setting app's icon badge notification.applicationIconBadgeNumber = 1 var userInfo:[ NSObject : AnyObject] = [ NSObject : AnyObject]() userInfo[ "kLocalNotificationID" ] = "LocalNotificationID" userInfo[ "key" ] = "Attention Please" notification.userInfo = userInfo //UIApplication.sharedApplication().scheduleLocalNotification(notification) //UIApplication.sharedApplication().presentLocalNotificationNow(notification) application.presentLocalNotificationNow(notification) } |
3.点击推送消息的按钮时会触发func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {}这个方法。
如果是远程推送那就是func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void) {}这个方法。
这里只需要调用本地第一个方法即可
1 2 3 4 5 | func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) { println( "identifier=\(identifier)" ) //这里的identifier是按钮的identifier completionHandler() //最后一定要调用这上方法 } |
分类:
Swift
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2012-07-03 SAP应用界面开发:3)SELECTION-SCREEN对象(4)