1.簡介
1.1 Why: 為什么要有通知機(jī)制
- 如果你喜歡看英文,直接看官方文檔就可以了, 內(nèi)容都來自這里:
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction.html
iOS處于前臺處于激活狀態(tài)的應(yīng)用在同一時間內(nèi)只能有一個. 所以對于許多使用時間事件(典型的如定時器), 或者聯(lián)網(wǎng)事件(微博通知你有評論)的應(yīng)用, 在處于后臺的情況下需要一個機(jī)制來支持, 發(fā)出相關(guān)的通知給用戶, 并且能夠幫助回到應(yīng)用.
1.2 What: 包括本地和遠(yuǎn)程通知
通知分兩種,本地通知和遠(yuǎn)程通知. 這兩種通知滿足不同的功能需求. 本地通知從本設(shè)備發(fā)出, 遠(yuǎn)程通知(也叫推送通知)從網(wǎng)絡(luò)上的某個服務(wù)器上發(fā)出來.
1.3 How: 安排, 注冊和處理本地通知以及遠(yuǎn)程通知
- 對于本地通知, 你進(jìn)行注冊, 創(chuàng)建通知對象, 設(shè)置一個發(fā)出通知的日期和時間, 以及一些通知展示的細(xì)節(jié)就可以了.
- 對于遠(yuǎn)程通知較為復(fù)雜, 需要為這個應(yīng)用注冊一個令牌, 然后發(fā)送通知的服務(wù)使用這個令牌進(jìn)行消息得出發(fā)送, 這個消息發(fā)出之后, 還得經(jīng)過蘋果的推送通知服務(wù)倒一手, 才能發(fā)送到設(shè)備. 所以為了進(jìn)行遠(yuǎn)程通知,你需要生成一堆的證書文件,這里就不詳述了.
2. 稍微深入一點
2.1 通知讓用戶看起來是啥樣
本地通知和遠(yuǎn)程通知對用戶來說, 看起來是一樣的:
- 在通知中心顯示一條或者彈出個提示框;
- 在應(yīng)用圖標(biāo)上顯示帶數(shù)字的小紅點;
- 播放一個聲音;
2.2 收到通知時應(yīng)用里面是怎么處理的
本地通知和遠(yuǎn)程通知, 對于應(yīng)用來說是不一樣的. 收到通知的時候, 調(diào)用的方法不同.
- 如果處于激活狀態(tài),
本地通知調(diào)用: application:didReceiveLocalNotification:
遠(yuǎn)程通知調(diào)用: application:didReceiveRemoteNotification: - 如果不處于激活狀態(tài), 當(dāng)你點擊通知提示, 或者直接打開應(yīng)用時, 在 application:didFinishLaunchingWithOptions: 里面, 根據(jù)參數(shù)里的UIApplicationLaunchOptionsLocalNotificationKey 或者UIApplicationLaunchOptionsRemoteNotificationKey 的值,進(jìn)行不同的處理.
2.3 本地通知
一個本地通知是一個 UILocalNotification實例;
屬性有:
Scheduled time: 通知時間;
Notification type: 通知類型, 包括提示信息, 小紅點里的數(shù)字, 提示里的圖標(biāo), 聲音, iOS8之后還支持自定義的動作(Action);
Custom data: 自定義數(shù)據(jù), 是一個字典;
2.4 遠(yuǎn)程通知
遠(yuǎn)程通知主要是要使用Apple Push Notification(APN), 你必須得有iOS開發(fā)者帳號才行, 需要在開發(fā)者中心設(shè)置, 創(chuàng)建應(yīng)用的標(biāo)識以及相關(guān)的證書文件.