美文网首页
一. 本地通知的基本用法

一. 本地通知的基本用法

作者: 面糊 | 来源:发表于2016-05-28 20:08 被阅读945次

    一. 推送通知的介绍

    1. 什么是推送通知

      • 首先要明确一点, 推送通知通知Notification和通知中心等一点关系都没有, 完全就不是一码事
      • 推送通知的表现: 就是想用户推送一条消息, 告知用户App的一些情况
      • 当你的App在后台/关闭的时候, 可以通过推送通知, 来通知用户一些与此App有关的信息
      • 通知的应用场景就不详细解释了, 比如QQ/微信接收到新消息, 这都是推送通知
    2. 推送通知的分类

      1. 本地推送通知

        • 本地通知主要是可以在不联网的情况下发送给用户
        • 一般是在固定的时间点, 推送给用户
      2. 远程推送通知

        • 与本地相比, 远程推送通知必须在联网的情况下才能接收到
        • 远程推送服务: 又称APNs(Apple Push Notification Service), 即苹果推送通知服务, 记好这个名称的概念, 他是由苹果推送给用户的
        • 一般的应用场景表现为, 当App彻底退出了, 或者在不确定的时间, 由App官方的服务器向让用户知晓一些情况, 就需要使用远程推送通知
      3. 使用原则:
        谁能确定时间和内容, 谁就可以发送通知(即开发人员可以通过App的内部, 以代码的形式发送通知=本地推送通知; 开发人员无法确定, 由服务器确定并提供的信息=远程推送通知)

    3. 通知的展示样式

      • 在屏幕顶部弹出的一个横条(一般会显示通知的标题, 在通知中心可以查看具体的内容)
      • 在屏幕中间弹出一个UIAlertView(显示通知的具体内容)
      • 在锁屏界面出现一块横幅(也会显示具体内容)
      • 更新App的图标数字(告知新内容的数量)
      • 播放音效, 提醒用户
      • 注: 我们虽然可以设定通知的内容, 但是样式是由用户在设置->通知中心自己决定的

    二.本地推送通知的一些基本使用

    1. 基本用法
      1. 首先, 创建本地推送通知的主要类为: UILocalNotification
        let notification = UILocalNotification()

      2. 为本地通知设置两个必要的属性:

        • 推送通知的触发时间: notification.fireDate
        • 推送通知的具体内容: notification.alertBody
      3. 本地通知的一些可选属性:

        • 通知的声音: notification.soundName
        • App图标右上侧的数字提示: notification.applicationIconBadgeNumber
        • 通知的图片(但经过测试iOS9.0之后不能用): notificcation.alertLaunchImage
        • 通知的重复间隔: notification.repeatInterval, 最小为1分钟
        • 其他的基本是一些不常用的了, 大家自行发掘吧
      4. 推送通知:

        • 立即推送通知: UIApplication.sharedApplication().presentLocalNotificationNow(notification), 但是通知一般都是为了App在后台的时候通知用户, 所以基本不会用这个方法
        • 根据触发时间, 推送通知: UIApplication.sharedApplication().scheduleLocalNotification(notification)
      5. 取消调度本地推送通知

        • 取消单个通知: UIApplication.sharedApplication().cancelLocalNotification(notification)
        • 取消所有的通知: UIApplication.sharedApplication().cancelAllLocalNotifications()
      6. 获取目前所有准备调度的通知: UIApplication.sharedApplication().scheduledLocalNotifications

      7. 在iOS8.0之后, 如果要使用通知功能, 必须让用户授权, 才可以使用, 通常我们在AppDelegate中, 当程序进入前台时就请求授权

         extension AppDelegate {
             
             func localNotificationAuthority() {
                 
                 if #available(iOS 8.0, *) {
                     
                     // 1. 用通知的类型, 组合一个位移枚举
                     let typeValue = UIUserNotificationType.Alert.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Sound.rawValue
                     // 1.2 使用唯一枚举的真实值, 创建一个通知类型对象
                     let type = UIUserNotificationType(rawValue: typeValue)
         
                     // 2. 使用通知类型对象, 创建一个注册设置对象
                     let setting = UIUserNotificationSettings(forTypes: type, categories: nil)
                     
                     // 3. 根据设置对象, 注册请求通知的权限
                     UIApplication.sharedApplication().registerUserNotificationSettings(setting)
                 }
             }
         }
        
      8. 简单的代码演示:

         class ViewController: UIViewController {
         
             // 懒加载位置管理者
             
             lazy var locationManager : CLLocationManager = {
                 let locationManager = CLLocationManager()
                 
                 if #available(iOS 8.0, *) {
                     locationManager.requestAlwaysAuthorization()
                 }
                 
                 return locationManager
             }()
             
             override func viewDidLoad() {
                 super.viewDidLoad()
                 // Do any additional setup after loading the view, typically from a nib.
             }
         
             @IBAction func sendLocalNotification(sender: AnyObject) {
                 
                 let notification = UILocalNotification()
                 notification.fireDate = NSDate(timeIntervalSinceNow: 5)
                 notification.alertBody = "本地通知~"
                 // 设置时间对应的时区
                 notification.timeZone = NSTimeZone.defaultTimeZone()
                 
                 // 设置重复间隔(最少一分钟)
         //        notification.repeatInterval = .Minute
                 
                 // 设置监听区域
                 // 该功能只有在iOS8.0之后才能使用
         //        if #available(iOS 8.0, *) {
         //            let circleRegion = CLCircularRegion(center: CLLocationCoordinate2DMake(21.123, 123.234), radius: 1000, identifier: "监听区域")
         //            // 1. 获取位置信息
         //            locationManager.startMonitoringForRegion(circleRegion)
         //            // 2. 设置触发通知的区域
         //            notification.region = circleRegion
         //            // 3. 设置区域的触发次数, 如果为false代表不限次数
         //            notification.regionTriggersOnce = false
         //        }
                 
                 // 设置通知在滑屏解锁界面, 左滑时, 右侧显示的内容
                 notification.hasAction = true
                 notification.alertAction = "回复"
                 
                 // 通知的启动图片
                 // 如果找不到图片的话, 会使用系统默认的图片
                 // iOS9.0之后, 经过试验, 不能使用了, 不会显示图片
                 notification.alertLaunchImage = "2.jpg"
                 
                 // 通知的声音
                 notification.soundName = "win.aac"
                 
                 // App图标右上角的文字
                 notification.applicationIconBadgeNumber = 10
                 
                 // 设置通知的标题, 作用在通知中心
                 if #available(iOS 8.2, *) {
                     notification.alertTitle = "新短信"
                 }
                 
                 // 设置通知的附加信息
         //        notification.userInfo
                 
                 // 发送本地通知
                 UIApplication.sharedApplication().scheduleLocalNotification(notification)
         //        UIApplication.sharedApplication().presentLocalNotificationNow(notification)
                 
             }
         
             @IBAction func cancelLocalNotification(sender: AnyObject) {
                 
         //        UIApplication.sharedApplication().cancelLocalNotification(notification)
                 UIApplication.sharedApplication().cancelAllLocalNotifications()
             }
             
             @IBAction func checkLocalNotification(sender: AnyObject) {
                 
                 let notification = UIApplication.sharedApplication().scheduledLocalNotifications
                 
                 print(notification)
             }
         }

    相关文章

      网友评论

          本文标题:一. 本地通知的基本用法

          本文链接:https://www.haomeiwen.com/subject/mvofdttx.html