一. 本地通知的基本用法

一. 推送通知的介绍

  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)
           }
       }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 许多集成的步骤个推官网都有了,这里只写关于推送的远程推送和本地通知的步骤和代码。APP在后台时:走苹果的APNS通...
    AllureJM阅读 2,709评论 1 9
  • 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知...
    莫离_焱阅读 6,497评论 1 8
  • 什么是推送通知? APP退到后台,或者关闭时;应用推送一条消息告诉用户某件事情,应用通过点击通知进入到应用相应的页...
    tiger2016阅读 556评论 0 1
  • 推送通知注意:这里说的推送通知跟NSNotification有所区别NSNotification是抽象的,不可见的...
    醉叶惜秋阅读 1,508评论 0 3
  • //发送通知 UILocalNotification *notification=[[UILocalNotific...
    韩七夏阅读 1,610评论 1 0