- 傳智播客 課件整理
推送通知
- 注意:這里說的推送通知跟NSNotification有所區(qū)別
1.NSNotification是抽象的鹅搪,不可見的
2.推送通知是可見的(能用肉眼看到)
- iOS中提供了2種推送通知
1.本地推送通知(LocalNotification)
2.遠程推送通知(RemoteNotification)
- n推送通知的作用
可以讓不在前臺運行的app站绪,告知用戶app內(nèi)部發(fā)生了什么事情
- 推送通知的呈現(xiàn)效果
1.在屏幕頂部顯示一塊橫幅
在屏幕頂部顯示一塊橫幅.png
2.在屏幕中間彈出一個UIAlertView
在屏幕中間彈出一個UIAlertView .png
還可以在呈現(xiàn)推送通知的同時播放音效
3.鎖屏時也照樣呈現(xiàn)鎖屏時也照樣呈現(xiàn) .png
4.呈現(xiàn)推送通知的同時,還可以更新app圖標的數(shù)字呈現(xiàn)推送通知的同時丽柿,還可以更新app圖標的數(shù)字 .png
5.用戶接收的推送通知恢准,都會展示在“通知中心”用戶接收的推送通知,都會展示在“通知中心”.png
- 推送通知的呈現(xiàn)效果總結
1.在屏幕頂部顯示一塊橫幅(顯示具體內(nèi)容)
2.在屏幕中間彈出一個UIAlertView(顯示具體內(nèi)容)
3.在鎖屏界面顯示一塊橫幅(鎖屏狀態(tài)下航厚,顯示具體內(nèi)容)
4.更新app圖標的數(shù)字(說明新內(nèi)容的數(shù)量)
5.播放音效(提醒作用)
- 推送通知的呈現(xiàn)效果設置
顯示橫幅還是UIAlertView顷歌,取決于用戶的設置
顯示橫幅還是UIAlertView,取決于用戶的設置 1.png
顯示橫幅還是UIAlertView幔睬,取決于用戶的設置 2.png
顯示橫幅還是UIAlertView眯漩,取決于用戶的設置 3.png
顯示橫幅還是UIAlertView,取決于用戶的設置 4.png
- 推送通知的呈現(xiàn)效果設置
用戶也可以決定是否要開啟以下4個功能:
1.顯示App圖標數(shù)字
2.播放音效
3.鎖屏顯示
4.顯示在“通知中心”
- 推送通知的使用細節(jié)
1.發(fā)出推送通知時麻顶,如果當前程序正運行在前臺赦抖,那么推送通知就不會被呈現(xiàn)出來
2.點擊推送通知后,默認會自動打開發(fā)出推送通知的app
3.不管app打開還是關閉辅肾,推送通知都能如期發(fā)出
本地推送通知
- 什么是本地推送通知
顧名思義队萤,就是不需要聯(lián)網(wǎng)就能發(fā)出的推送通知(不需要服務器的支持)
- 本地推送通知的使用場景
常用來定時提醒用戶完成一些任務,比如
清理垃圾矫钓、記賬要尔、買衣服、看電影新娜、玩游戲
如何發(fā)出本地推送通知
- 創(chuàng)建本地推送通知對象
UILocalNotification*ln= [[UILocalNotificationalloc] init];
n設置本地推送通知屬性
p推送通知的觸發(fā)時間(何時發(fā)出推送通知)
@property(nonatomic,copy) NSDate*fireDate;
p推送通知的具體內(nèi)容
@property(nonatomic,copy) NSString*alertBody;
p在鎖屏時顯示的動作標題(完整標題:“滑動來”+ alertAction)
@property(nonatomic,copy) NSString*alertAction;
p音效文件名
@property(nonatomic,copy) NSString*soundName;
papp圖標數(shù)字
@property(nonatomic) NSIntegerapplicationIconBadgeNumber;
- 如何發(fā)出本地推送通知
n調(diào)度本地推送通知(調(diào)度完畢后赵辕,推送通知會在特地時間fireDate發(fā)出)
[[UIApplicationsharedApplication] scheduleLocalNotification:ln];
n獲得被調(diào)度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray*scheduledLocalNotifications;
(已經(jīng)發(fā)出且過期的推送通知就算調(diào)度結束,會自動從這個數(shù)組中移除)
n取消調(diào)度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification*)notification;
- (void)cancelAllLocalNotifications;
n立即發(fā)出本地推送通知
- (void)presentLocalNotificationNow:(UILocalNotification*)notification;
- 本地推送通知的其他屬性
n每隔多久重復發(fā)一次推送通知
@property(nonatomic) NSCalendarUnitrepeatInterval;
n點擊推送通知打開app時顯示的啟動圖片
@property(nonatomic,copy) NSString*alertLaunchImage;
n附加的額外信息
@property(nonatomic,copy) NSDictionary*userInfo;
n時區(qū)
@property(nonatomic,copy) NSTimeZone*timeZone;
(一般設置為[NSTimeZonedefaultTimeZone]概龄,跟隨手機的時區(qū))
- 點擊本地推送通知
n當用戶點擊本地推送通知还惠,會自動打開app,這里有2種情況
papp并沒有關閉私杜,一直隱藏在后臺
ü讓app進入前臺蚕键,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification;
p
papp已經(jīng)被關閉(進程已死)
ü啟動app救欧,啟動完畢會調(diào)用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
2launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對象
遠程推送通知
- 什么是遠程推送通知
顧名思義,就是從遠程服務器推送給客戶端的通知(需要聯(lián)網(wǎng))
遠程推送服務锣光,又稱為APNs(Apple Push Notification Services)
為什么需要遠程推送通知笆怠?
傳統(tǒng)獲取數(shù)據(jù)的局限性
只要用戶關閉了app,就無法跟app的服務器溝通嫉晶,無法從服務器上獲得最新的數(shù)據(jù)內(nèi)容
遠程推送通知可以解決以上問題
不管用戶打開還是關閉app骑疆,只要聯(lián)網(wǎng)了,都能接收到服務器推送的遠程通知
- 遠程推送通知使用須知
- 所有的蘋果設備替废,在聯(lián)網(wǎng)狀態(tài)下箍铭,都會與蘋果的服務器建立長連接
- 什么是長連接
只要聯(lián)網(wǎng)了,就一直建立連接- 長連接的作用
- 時間校準
- 系統(tǒng)升級
- 查找我的iPhone
- .....
- 長連接的好處
- 數(shù)據(jù)傳輸速度快
- 數(shù)據(jù)保持最新狀態(tài)
上兩張推送的原理圖
針對第二張圖這里有個疑問椎镣,如果我們在同一個設備上用不同的賬號登錄QQ诈火,推送怎么識別不同的賬號?- 本教程來自傳智播客状答,感謝傳智播客的詳細資料
官方文檔的解釋
- n遠程推送的內(nèi)容格式(服務器推送給客戶端的內(nèi)容格式---JSON)
- 獲得deviceToken的過程
證書配置
一.開發(fā)iOS程序的推送功能,iOS端需要做的事
1.請求蘋果獲得deviceToken
2.得到蘋果返回的deviceToken
3.發(fā)送deviceToken給公司的服務器
4.監(jiān)聽用戶對通知的點擊
二.調(diào)試iOS的遠程推送功能,必備條件:
1.真機
2.調(diào)試推送需要的證書文件
1 aps_development.cer: 某臺電腦就能調(diào)試某個app的推送服務
2 ios_development.cer:讓電腦具備真機調(diào)試的能力(調(diào)試設備)
3 iphone5_qq.mobileprovision:某臺電腦就能利用某臺設備調(diào)試某個程序
三.發(fā)布具有推送服務的app
1 aps_production.cer:如果發(fā)布的程序中包含了推送服務,就必須安裝這個證書
2 ios_distribution.cer : 讓電腦具備發(fā)布程序的能力
3 qq.mobileprovision : 某臺電腦就能發(fā)布某個程序
證書配置01 – 創(chuàng)建AppID
- n注意
p遠程推送只能在真機上測試冷守!因此先要保證真機調(diào)試的環(huán)境沒有問題!
p
n遠程推送的第一步是要創(chuàng)建App ID
p目的是說明哪個App需要使用推送服務
p為遠程推送服務創(chuàng)建的AppID一定要是全稱惊科,不能帶有*
證書配置02 – 為AppID創(chuàng)建APNs SSL證書
- 真機調(diào)試用的APNs SSL證書:要在哪臺電腦上調(diào)試具有推送服務的App
- n發(fā)布程序用的APNs SSL證書:要在哪臺電腦上發(fā)布具有推送服務的App
- n最終得到2個APNs SSL證書
pAPNsDevelopmentiOS:真機調(diào)試用的證書
pAPNsProductioniOS:發(fā)布程序用的證書
證書配置03 – 生成描述文件
- n描述文件的作用是用來描述
p哪臺設備要在哪臺電腦上調(diào)試哪個程序
證書配置04 –安裝
- 最終會得到3個文件
paps_development.cer:真機調(diào)試用的
paps_production.cer:發(fā)布程序用的
pnetease_news_iphone5_home.mobileprovision:描述文件
- 建議:先安裝cer文件拍摇,再安裝mobileprovision文件
注冊遠程推送通知
- 客戶端如果想接收APNs的遠程推送通知,必須先注冊(得到用戶的授權)
- 一般在App啟動完畢后就馬上注冊
//這個方法在iOS8已經(jīng)廢棄
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
//注冊遠程通知
UIRemoteNotificationTypetype= UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge| UIRemoteNotificationTypeSound;
[application registerForRemoteNotificationTypes:type];
returnYES;
}
```
```
//使用下面的代碼
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:userSettings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}
- 如果是第一次注冊馆截,會彈出下邊的對話框
注冊遠程推送通知
n注冊成功后會調(diào)用AppDelegate的下面方法充活,得到設備的deviceToken
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSLog(@"%@", deviceToken);
}
點擊遠程推送通知
n當用戶點擊遠程推送通知,會自動打開app蜡娶,這里有2種情況
papp并沒有關閉混卵,一直隱藏在后臺
ü讓app進入前臺,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo;
p
papp已經(jīng)被關閉(進程已死)
ü啟動app窖张,啟動完畢會調(diào)用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
2launchOptions參數(shù)通過UIApplicationLaunchOptionsRemoteNotificationKey取出服務器返回的字典內(nèi)容