一. 本地通知的基本用法

一. 推送通知的介紹

  1. 什么是推送通知

    • 首先要明確一點(diǎn), 推送通知通知Notification和通知中心等一點(diǎn)關(guān)系都沒有, 完全就不是一碼事
    • 推送通知的表現(xiàn): 就是想用戶推送一條消息, 告知用戶App的一些情況
    • 當(dāng)你的App在后臺/關(guān)閉的時候, 可以通過推送通知, 來通知用戶一些與此App有關(guān)的信息
    • 通知的應(yīng)用場景就不詳細(xì)解釋了, 比如QQ/微信接收到新消息, 這都是推送通知
  2. 推送通知的分類

    1. 本地推送通知

      • 本地通知主要是可以在不聯(lián)網(wǎng)的情況下發(fā)送給用戶
      • 一般是在固定的時間點(diǎn), 推送給用戶
    2. 遠(yuǎn)程推送通知

      • 與本地相比, 遠(yuǎn)程推送通知必須在聯(lián)網(wǎng)的情況下才能接收到
      • 遠(yuǎn)程推送服務(wù): 又稱APNs(Apple Push Notification Service), 即蘋果推送通知服務(wù), 記好這個名稱的概念, 他是由蘋果推送給用戶的
      • 一般的應(yīng)用場景表現(xiàn)為, 當(dāng)App徹底退出了, 或者在不確定的時間, 由App官方的服務(wù)器向讓用戶知曉一些情況, 就需要使用遠(yuǎn)程推送通知
    3. 使用原則:
      誰能確定時間和內(nèi)容, 誰就可以發(fā)送通知(即開發(fā)人員可以通過App的內(nèi)部, 以代碼的形式發(fā)送通知=本地推送通知; 開發(fā)人員無法確定, 由服務(wù)器確定并提供的信息=遠(yuǎn)程推送通知)

  3. 通知的展示樣式

    • 在屏幕頂部彈出的一個橫條(一般會顯示通知的標(biāo)題, 在通知中心可以查看具體的內(nèi)容)
    • 在屏幕中間彈出一個UIAlertView(顯示通知的具體內(nèi)容)
    • 在鎖屏界面出現(xiàn)一塊橫幅(也會顯示具體內(nèi)容)
    • 更新App的圖標(biāo)數(shù)字(告知新內(nèi)容的數(shù)量)
    • 播放音效, 提醒用戶
    • 注: 我們雖然可以設(shè)定通知的內(nèi)容, 但是樣式是由用戶在設(shè)置->通知中心自己決定的

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

  1. 基本用法
    1. 首先, 創(chuàng)建本地推送通知的主要類為: UILocalNotification
      let notification = UILocalNotification()

    2. 為本地通知設(shè)置兩個必要的屬性:

      • 推送通知的觸發(fā)時間: notification.fireDate
      • 推送通知的具體內(nèi)容: notification.alertBody
    3. 本地通知的一些可選屬性:

      • 通知的聲音: notification.soundName
      • App圖標(biāo)右上側(cè)的數(shù)字提示: notification.applicationIconBadgeNumber
      • 通知的圖片(但經(jīng)過測試iOS9.0之后不能用): notificcation.alertLaunchImage
      • 通知的重復(fù)間隔: notification.repeatInterval, 最小為1分鐘
      • 其他的基本是一些不常用的了, 大家自行發(fā)掘吧
    4. 推送通知:

      • 立即推送通知: UIApplication.sharedApplication().presentLocalNotificationNow(notification), 但是通知一般都是為了App在后臺的時候通知用戶, 所以基本不會用這個方法
      • 根據(jù)觸發(fā)時間, 推送通知: UIApplication.sharedApplication().scheduleLocalNotification(notification)
    5. 取消調(diào)度本地推送通知

      • 取消單個通知: UIApplication.sharedApplication().cancelLocalNotification(notification)
      • 取消所有的通知: UIApplication.sharedApplication().cancelAllLocalNotifications()
    6. 獲取目前所有準(zhǔn)備調(diào)度的通知: UIApplication.sharedApplication().scheduledLocalNotifications

    7. 在iOS8.0之后, 如果要使用通知功能, 必須讓用戶授權(quán), 才可以使用, 通常我們在AppDelegate中, 當(dāng)程序進(jìn)入前臺時就請求授權(quán)

       extension AppDelegate {
           
           func localNotificationAuthority() {
               
               if #available(iOS 8.0, *) {
                   
                   // 1. 用通知的類型, 組合一個位移枚舉
                   let typeValue = UIUserNotificationType.Alert.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Sound.rawValue
                   // 1.2 使用唯一枚舉的真實(shí)值, 創(chuàng)建一個通知類型對象
                   let type = UIUserNotificationType(rawValue: typeValue)
       
                   // 2. 使用通知類型對象, 創(chuàng)建一個注冊設(shè)置對象
                   let setting = UIUserNotificationSettings(forTypes: type, categories: nil)
                   
                   // 3. 根據(jù)設(shè)置對象, 注冊請求通知的權(quán)限
                   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 = "本地通知~"
               // 設(shè)置時間對應(yīng)的時區(qū)
               notification.timeZone = NSTimeZone.defaultTimeZone()
               
               // 設(shè)置重復(fù)間隔(最少一分鐘)
       //        notification.repeatInterval = .Minute
               
               // 設(shè)置監(jiān)聽區(qū)域
               // 該功能只有在iOS8.0之后才能使用
       //        if #available(iOS 8.0, *) {
       //            let circleRegion = CLCircularRegion(center: CLLocationCoordinate2DMake(21.123, 123.234), radius: 1000, identifier: "監(jiān)聽區(qū)域")
       //            // 1. 獲取位置信息
       //            locationManager.startMonitoringForRegion(circleRegion)
       //            // 2. 設(shè)置觸發(fā)通知的區(qū)域
       //            notification.region = circleRegion
       //            // 3. 設(shè)置區(qū)域的觸發(fā)次數(shù), 如果為false代表不限次數(shù)
       //            notification.regionTriggersOnce = false
       //        }
               
               // 設(shè)置通知在滑屏解鎖界面, 左滑時, 右側(cè)顯示的內(nèi)容
               notification.hasAction = true
               notification.alertAction = "回復(fù)"
               
               // 通知的啟動圖片
               // 如果找不到圖片的話, 會使用系統(tǒng)默認(rèn)的圖片
               // iOS9.0之后, 經(jīng)過試驗(yàn), 不能使用了, 不會顯示圖片
               notification.alertLaunchImage = "2.jpg"
               
               // 通知的聲音
               notification.soundName = "win.aac"
               
               // App圖標(biāo)右上角的文字
               notification.applicationIconBadgeNumber = 10
               
               // 設(shè)置通知的標(biāo)題, 作用在通知中心
               if #available(iOS 8.2, *) {
                   notification.alertTitle = "新短信"
               }
               
               // 設(shè)置通知的附加信息
       //        notification.userInfo
               
               // 發(fā)送本地通知
               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)
           }
       }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梁钾,一起剝皮案震驚了整個濱河市逊抡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麦射,老刑警劉巖潜秋,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胎许,死亡現(xiàn)場離奇詭異辜窑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牙勘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門方面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恭金,“玉大人横腿,你說我怎么就攤上這事【镜耄” “怎么了搀别?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵歇父,是天一觀的道長。 經(jīng)常有香客問我护戳,道長媳荒,這世上最難降的妖魔是什么驹饺? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鱼炒,結(jié)果婚禮上蝌借,老公的妹妹穿的比我還像新娘。我一直安慰自己自晰,他們只是感情好酬荞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布混巧。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凿傅。 梳的紋絲不亂的頭發(fā)上聪舒,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天虐急,我揣著相機(jī)與錄音止吁,去河邊找鬼敬惦。 笑死,一個胖子當(dāng)著我的面吹牛宏怔,可吹牛的內(nèi)容都是我干的臊诊。 我是一名探鬼主播斜脂,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秽褒,長吁一口氣:“原來是場噩夢啊……” “哼销斟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起约谈,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤泼橘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炬灭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體重归,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼻吮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年椎木,在試婚紗的時候發(fā)現(xiàn)自己被綠了香椎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片士鸥。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肥照,靈堂內(nèi)的尸體忽然破棺而出舆绎,到底是詐尸還是另有隱情吕朵,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布硫嘶,位于F島的核電站沦疾,受9級特大地震影響哮塞,放射性物質(zhì)發(fā)生泄漏忆畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一家凯、第九天 我趴在偏房一處隱蔽的房頂上張望眠屎。 院中可真熱鬧,春花似錦肆饶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至竭鞍,卻和暖如春板惑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偎快。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工冯乘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晒夹。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓喷好,卻偏偏與公主長得像,于是被迫代替她去往敵國和親无切。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 許多集成的步驟個推官網(wǎng)都有了,這里只寫關(guān)于推送的遠(yuǎn)程推送和本地通知的步驟和代碼。APP在后臺時:走蘋果的APNS通...
    AllureJM閱讀 2,717評論 1 9
  • 概述 在多數(shù)移動應(yīng)用中任何時候都只能有一個應(yīng)用程序處于活躍狀態(tài),如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,512評論 1 8
  • 什么是推送通知? APP退到后臺,或者關(guān)閉時;應(yīng)用推送一條消息告訴用戶某件事情,應(yīng)用通過點(diǎn)擊通知進(jìn)入到應(yīng)用相應(yīng)的頁...
    tiger2016閱讀 561評論 0 1
  • 推送通知注意:這里說的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的,不可見的...
    醉葉惜秋閱讀 1,515評論 0 3
  • //發(fā)送通知 UILocalNotification *notification=[[UILocalNotific...
    韓七夏閱讀 1,621評論 1 0