• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift本地推送通知UILocalNotification

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源。

在iOS中分为两种通知:本地、远程。本地的UILocalNotification由全局的NotificationManager统一管理,我们只需要将本地通知对象添加到系统的Notification队列中就可以了,系统会在指定的时间激发本地通知。

本地推送通知:UILocalNotification

  1. 如果要使用推送通知,必须先在苹果的推送通知服务里注册你要使用哪几种类型的通知,就比如下面的一段代码就表示同时注册了提醒、标记和声音两种类型的通知(ios 8之前是不需要注册的):
// 在appDelegate中注册通知
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        if #available(iOS 8.0, *) {
            let uns = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
            UIApplication.sharedApplication().registerUserNotificationSettings(uns)
        }
}

2.创建并添加本地通知

class LocalNotificationUtils: NSObject {

     /** 添加创建并添加本地通知 */
    class func addNotification() {
         // 初始化一个通知
         let localNoti = UILocalNotification()

        // 通知的触发时间,例如即刻起15分钟后
         let fireDate = NSDate().dateByAddingTimeInterval(-15*60) 
         localNoti.fireDate = fireDate
         // 设置时区
         localNoti.timeZone = NSTimeZone.defaultTimeZone()
         // 通知上显示的主题内容
         localNoti.alertBody = "通知上显示的提示内容"
         // 收到通知时播放的声音,默认消息声音
         localNoti.soundName = UILocalNotificationDefaultSoundName
         //待机界面的滑动动作提示
         localNoti.alertAction = "打开应用"
         // 应用程序图标右上角显示的消息数
         localNoti.applicationIconBadgeNumber = 0
         // 通知上绑定的其他信息,为键值对
         localNoti.userInfo = ["id": "1",  "name": "xxxx"]

        // 添加通知到系统队列中,系统会在指定的时间触发       
         UIApplication.sharedApplication().scheduleLocalNotification(localNoti)
    }

}

3.获取所有本地通知

let locals = UIApplication.sharedApplication().scheduledLocalNotifications

4.取消一个本地推送

    // 通过通知上绑定的id来取消通知,其中id也是你在userInfo中存储的信息
    class func deleteNotification(id: String) {
        if orderID.isEmpty {
            return
        }

        if let locals = UIApplication.sharedApplication().scheduledLocalNotifications {
            for localNoti in locals {
                if let dict = localNoti.userInfo {

                    if dict.keys.contains("id") && dict["id"] is String && (dict["id"] as! String) == id {
                        // 取消通知
                        UIApplication.sharedApplication().cancelLocalNotification(localNoti)
                    }
                }
            }
        }
    }

5.取消所有本地通知

UIApplication.sharedApplication().cancelAllLocalNotifications()

6.点击通知后的触发事件

1.应用在正在运行(在前台或后台运行),点击通知后触发appDelegate代理方法::didReceiveLocalNotification

class AppDelegate: UIResponder, UIApplicationDelegate{

    /** 接收本地通知 */
    func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
        // 获取通知上绑定的信息
        guard let dict = notification.userInfo else {
            return
        }

        // 后面作相应处理...

    }
}

2.应用未运行,点击通知启动app,走appDelegate代理方法:didFinishLaunchingWithOptions

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

        // 省略创建window及根控制器等代码
        ......
        // 此处只介绍当点击通知启动应用后如何获取通知
        if launchOptions != nil {
            if let localNotification = launchOptions!["UIApplicationLaunchOptionsLocalNotificationKey"] as? UILocalNotification {
                if let dict = localNotification.userInfo {
                        // 获取通知上绑定的信息后作相应处理...
                }
            }
        }


        return true

   }
}

参考:http://www.cnblogs.com/kenshincui/p/4168532.html#localNotification


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap