推送通知
注意:這里說的推送通知跟NSNotification有所區(qū)別
NSNotification是抽象的姥芥,不可見的
推送通知是可見的(能用肉眼看到)
iOS中提供了2種推送通知
本地推送通知(Local Notification)
遠(yuǎn)程推送通知(Remote Notification)
[圖片上傳中祟牲。户魏。正蛙。(2)]
[圖片上傳中韵洋。鸭津。。(3)]
[圖片上傳中蚯舱。。掩蛤。(4)]
推送通知的呈現(xiàn)效果總結(jié)
總結(jié)一下枉昏,推送通知有5種不同的呈現(xiàn)效果
在屏幕頂部顯示一塊橫幅(顯示具體內(nèi)容)
在屏幕中間彈出一個UIAlertView(顯示具體內(nèi)容)
在鎖屏界面顯示一塊橫幅(鎖屏狀態(tài)下,顯示具體內(nèi)容)
更新app圖標(biāo)的數(shù)字(說明新內(nèi)容的數(shù)量)
播放音效(提醒作用)
[圖片上傳中揍鸟。兄裂。。(5)]
[圖片上傳中蜈亩。懦窘。肩刃。(6)]
推送通知的使用細(xì)節(jié)
發(fā)出推送通知時缚忧,如果當(dāng)前程序正運(yùn)行在前臺,那么推送通知就不會被呈現(xiàn)出來
點擊推送通知后勾邦,默認(rèn)會自動打開發(fā)出推送通知的app
不管app打開還是關(guān)閉道川,推送通知都能如期發(fā)出
本地推送通知
什么是本地推送通知
顧名思義午衰,就是不需要聯(lián)網(wǎng)就能發(fā)出的推送通知(不需要服務(wù)器的支持)
本地推送通知的使用場景
常用來定時提醒用戶完成一些任務(wù),比如
清理垃圾冒萄、記賬臊岸、買衣服、看電影尊流、玩游戲
如何發(fā)出本地推送通知
創(chuàng)建本地推送通知對象
UILocalNotification *ln = [[UILocalNotification alloc] init];
設(shè)置本地推送通知屬性
推送通知的觸發(fā)時間(何時發(fā)出推送通知)
@property(nonatomic,copy) NSDate *fireDate;
推送通知的具體內(nèi)容
@property(nonatomic,copy) NSString *alertBody;
在鎖屏?xí)r顯示的動作標(biāo)題(完整標(biāo)題:“滑動來” + alertAction)
@property(nonatomic,copy) NSString *alertAction;
音效文件名
@property(nonatomic,copy) NSString *soundName;
app圖標(biāo)數(shù)字
@property(nonatomic) NSInteger applicationIconBadgeNumber;
如何發(fā)出本地推送通知
調(diào)度本地推送通知(調(diào)度完畢后帅戒,推送通知會在特地時間fireDate發(fā)出)
[[UIApplication sharedApplication] scheduleLocalNotification:ln];
獲得被調(diào)度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray *scheduledLocalNotifications;
(已經(jīng)發(fā)出且過期的推送通知就算調(diào)度結(jié)束,會自動從這個數(shù)組中移除)
取消調(diào)度本地推送通知
(void)cancelLocalNotification:(UILocalNotification *)notification;
(void)cancelAllLocalNotifications;
立即發(fā)出本地推送通知(void)presentLocalNotificationNow:(UILocalNotification *)notification;
本地推送通知的其他屬性
每隔多久重復(fù)發(fā)一次推送通知
@property(nonatomic) NSCalendarUnit repeatInterval;
點擊推送通知打開app時顯示的啟動圖片
@property(nonatomic,copy) NSString *alertLaunchImage;
附加的額外信息
@property(nonatomic,copy) NSDictionary *userInfo;
時區(qū)
@property(nonatomic,copy) NSTimeZone *timeZone;
(一般設(shè)置為[NSTimeZone defaultTimeZone] 崖技,跟隨手機(jī)的時區(qū))
點擊本地推送通知
當(dāng)用戶點擊本地推送通知逻住,會自動打開app,這里有2種情況
app并沒有關(guān)閉迎献,一直隱藏在后臺
讓app進(jìn)入前臺瞎访,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
app已經(jīng)被關(guān)閉(進(jìn)程已死)
啟動app,啟動完畢會調(diào)用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對象
遠(yuǎn)程推送通知(難)
什么是遠(yuǎn)程推送通知
顧名思義吁恍,就是從遠(yuǎn)程服務(wù)器推送給客戶端的通知(需要聯(lián)網(wǎng))
遠(yuǎn)程推送服務(wù)扒秸,又稱為APNs(Apple Push Notification Services)
為什么需要遠(yuǎn)程推送通知?
傳統(tǒng)獲取數(shù)據(jù)的局限性
只要用戶關(guān)閉了app冀瓦,就無法跟app的服務(wù)器溝通伴奥,無法從服務(wù)器上獲得最新的數(shù)據(jù)內(nèi)容
遠(yuǎn)程推送通知可以解決以上問題
不管用戶打開還是關(guān)閉app,只要聯(lián)網(wǎng)了翼闽,都能接收到服務(wù)器推送的遠(yuǎn)程通知
[圖片上傳中拾徙。。肄程。(7)]
遠(yuǎn)程推送通知使用須知
所有的蘋果設(shè)備锣吼,在聯(lián)網(wǎng)狀態(tài)下,都會與蘋果的服務(wù)器建立長連接
什么是長連接
只要聯(lián)網(wǎng)了蓝厌,就一直建立連接
長連接的作用
時間校準(zhǔn)
系統(tǒng)升級
查找我的iPhone
.. ...
長連接的好處
數(shù)據(jù)傳輸速度快
數(shù)據(jù)保持最新狀態(tài)
[圖片上傳中玄叠。。拓提。(8)]
[圖片上傳中读恃。。代态。(9)]
[圖片上傳中寺惫。。蹦疑。(10)]
[圖片上傳中西雀。。歉摧。(11)]
[圖片上傳中艇肴。。叁温。(12)]
[圖片上傳中再悼。。膝但。(13)]
[圖片上傳中冲九。。跟束。(14)]
一.開發(fā)iOS程序的推送功能, iOS端需要做的事
1.請求蘋果獲得deviceToken
2.得到蘋果返回的deviceToken
3.發(fā)送deviceToken給公司的服務(wù)器
4.監(jiān)聽用戶對通知的點擊
二.調(diào)試iOS的遠(yuǎn)程推送功能, 必備條件:
1.真機(jī)
2.調(diào)試推送需要的證書文件
1> aps_development.cer : 某臺電腦就能調(diào)試某個app的推送服務(wù)
2> ios_development.cer : 讓電腦具備真機(jī)調(diào)試的能力(調(diào)試設(shè)備)
3> iphone5_qq.mobileprovision : 某臺電腦就能利用某臺設(shè)備調(diào)試某個程序
三.發(fā)布具有推送服務(wù)的app
1> aps_production.cer : 如果發(fā)布的程序中包含了推送服務(wù),就必須安裝此證書
2> ios_distribution.cer : 讓電腦具備發(fā)布程序的能力
3> qq.mobileprovision : 某臺電腦就能發(fā)布某個程序
[圖片上傳中莺奸。。泳炉。(15)]
[圖片上傳中憾筏。。花鹅。(16)]
[圖片上傳中氧腰。。刨肃。(17)]
[圖片上傳中古拴。。真友。(18)]
[圖片上傳中黄痪。。盔然。(19)]
[圖片上傳中桅打。是嗜。。(20)]
[圖片上傳中挺尾。鹅搪。。(21)]
注冊遠(yuǎn)程推送通知
注冊成功后會調(diào)用AppDelegate的下面方法遭铺,得到設(shè)備的deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);
}
點擊遠(yuǎn)程推送通知
當(dāng)用戶點擊遠(yuǎn)程推送通知丽柿,會自動打開app,這里有2種情況
app并沒有關(guān)閉魂挂,一直隱藏在后臺
讓app進(jìn)入前臺甫题,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
app已經(jīng)被關(guān)閉(進(jìn)程已死)
啟動app,啟動完畢會調(diào)用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions參數(shù)通過UIApplicationLaunchOptionsRemoteNotificationKey取出服務(wù)器返回的字典內(nèi)容
[圖片上傳中涂召。坠非。。(22)]
[圖片上傳中果正。麻顶。。(23)]
[圖片上傳中舱卡。辅肾。。(24)]
[圖片上傳中轮锥。矫钓。。(25)]
[圖片上傳中舍杜。新娜。。(26)]
JPush
什么是JPush
一套遠(yuǎn)程推送解決方案既绩,支持android和iOS兩個平臺
它能夠快捷地為iOS App增加推送功能概龄,減少集成APNs需要的工作量、開發(fā)復(fù)雜度
更多的信息饲握,可以參考JPush官方網(wǎng)站:https://www.jpush.cn
集成iOS SDK的步驟可以參考
http://docs.jpush.cn/pages/viewpage.action?pageId=2621727
[圖片上傳中私杜。。救欧。(27)]
[圖片上傳中衰粹。。笆怠。(28)]
[圖片上傳中铝耻。。蹬刷。(29)]
[圖片上傳中瓢捉。频丘。。(30)]
**********************筆記*******************
一. 推送通知
- 什么是推送通知?
首先明確:**此處的推送通知跟我們的”NSNotification”沒有半毛錢關(guān)系
可以理解為: 向用戶推送一條信息來通知用戶某件事情
作用: 可以在APP退到后臺,或者關(guān)閉時;繼續(xù)推送一條消息告訴用戶某件事情
推送通知的應(yīng)用場景?
(1) 一些任務(wù)管理APP,會在任務(wù)時間即將到達(dá)時,通知你做該任務(wù);
(2) 健身App定時提醒你應(yīng)該健身了;
(3) 買過電影票后,提前半小時告訴你,電影即將開場;
(4) 當(dāng)你QQ或者微信收到消息時,即使退到后臺,或者關(guān)閉APP,也可以收到信息通知告訴我們;
(5) 電商APP,推送一條消息通知我們有新品上架等等推送通知的展現(xiàn)樣式?
(1) 在屏幕頂部顯示一塊橫幅(顯示具體內(nèi)容)
(2) 在屏幕中間彈出一個UIAlertView(顯示具體內(nèi)容)
(3) 在鎖屏界面顯示一塊橫幅(鎖屏狀態(tài)下泡态,顯示具體內(nèi)容)
(4) 更新app圖標(biāo)的數(shù)字(說明新內(nèi)容的數(shù)量)
(5) 播放音效(提醒作用)
- 注意:以上樣式只能是用戶自己設(shè)置,我們無法通過代碼控制*
- 推送通知的分類
1.本地推送通知
“本地”可以理解為”不聯(lián)網(wǎng)”;即使沒有網(wǎng)絡(luò)情況下,也可以推送通知消息
應(yīng)用場景: 確定知道未來某個時間點應(yīng)該提醒用戶什么
2.遠(yuǎn)程推送通知
概念:
與“本地”相對,表示,必須在聯(lián)網(wǎng)情況下才會向用戶推送通知消息
遠(yuǎn)程推送服務(wù)椎镣,又稱為APNs(Apple Push Notification Services)
應(yīng)用場景:
不確定未來某個時間點應(yīng)該提醒用戶什么,臨時性的
當(dāng)APP徹底退出時也想繼續(xù)讓用戶獲取一些最新消息
使用原則: 誰能確定通知時間和內(nèi)容, 誰就可以發(fā)送(開發(fā)人員在APP內(nèi)部通過代碼發(fā)送=本地通知; 服務(wù)器可以確定通知時間和內(nèi)容=遠(yuǎn)程通知)推送通知的實現(xiàn)
本地推送通知
1.創(chuàng)建UILocalNotification對象
2.設(shè)置一些必要屬性
推送通知的觸發(fā)時間(何時發(fā)出推送通知)
@property(nonatomic,copy) NSDate *fireDate;
推送通知的具體內(nèi)容
@property(nonatomic,copy) NSString *alertBody;
3.開始推送通知
- 根據(jù)fireDate設(shè)定的時間進(jìn)行推送
[[UIApplication sharedApplication] scheduleLocalNotification:ln]; - 立即推送
presentLocalNotificationNow:(UILocalNotification *)notification;
4.監(jiān)聽用戶點擊通知
- app處于前臺
此時不會彈框通知用戶通知的到達(dá),但是還是會調(diào)用對應(yīng)的代理方法 - app并沒有關(guān)閉兽赁,一直隱藏在后臺時
此時用戶點擊通知信息后,會讓app進(jìn)入前臺,并會調(diào)用AppDelegate的下面方法
application: didReceiveLocalNotification: - app已經(jīng)被關(guān)閉(進(jìn)程已死)
此時用戶點擊通知信息后,會啟動app冷守,啟動完畢會調(diào)用AppDelegate的下面方法
application: didFinishLaunchingWithOptions:
launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotif icationKey取出本推送通知對象
5.額外設(shè)置
每隔多久重復(fù)發(fā)一次推送通知
@property(nonatomic) NSCalendarUnit repeatInterval;
點擊推送通知打開app時顯示的啟動圖片
@property(nonatomic,copy) NSString *alertLaunchImage;
附加的額外信息
@property(nonatomic,copy) NSDictionary *userInfo;
時區(qū)
@property(nonatomic,copy) NSTimeZone *timeZone;
(一般設(shè)置為[NSTimeZone defaultTimeZone] 刀崖,跟隨手機(jī)的時區(qū))
在鎖屏?xí)r顯示的動作標(biāo)題(完整標(biāo)題:“滑動來” + alertAction)
@property(nonatomic,copy) NSString *alertAction;
音效文件名
@property(nonatomic,copy) NSString *soundName;
app圖標(biāo)數(shù)字
@property(nonatomic) NSInteger applicationIconBadgeNumber;
6.其他操作
- 獲得被調(diào)度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray *scheduledLocalNotifications;
已經(jīng)發(fā)出且過期的推送通知就算調(diào)度結(jié)束,會自動從這個數(shù)組中移除 - 取消調(diào)度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification *)notification;
- (void)cancelAllLocalNotifications;
7.注意事項
- 在iOS 8.0+拍摇,如果要使用本地通知亮钦,需要得到用戶的許可
在didFinishLaunchingWithOptions方法中添加如下代碼
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[application registerUserNotificationSettings:settings];
8.額外補(bǔ)充
- 在iOS8.0之后,可以設(shè)置推送通知帶操作行為
在注冊設(shè)置時,設(shè)置categories:參數(shù)
監(jiān)聽通知操作行為的點擊
- 遠(yuǎn)程推送通知
1.遠(yuǎn)程推送的原理
所有蘋果設(shè)備, 在聯(lián)網(wǎng)狀態(tài)下,都會與蘋果服務(wù)器建立一個長連接
“長連接”: 相對的一個概念是”短連接”
“長連接”優(yōu)勢: 服務(wù)器可以向客戶端發(fā)送信息,保證數(shù)據(jù)即時性
劣勢: 占用客戶和服務(wù)器資源
“短連接”優(yōu)勢: 節(jié)省資源,一個會話結(jié)束后,立即釋放資源
劣勢: 服務(wù)器無法主動向客戶端發(fā)信息
蘋果設(shè)備“長連接”作用:
時間校準(zhǔn)
系統(tǒng)升級
查找我的iPhone
推送通知...
原理就是借助蘋果設(shè)備與APNs服務(wù)器之間的長連接, 借助APNs服務(wù)器將消息發(fā)送給客戶端
2.遠(yuǎn)程推送通知實現(xiàn)的條件
只有真機(jī)可以調(diào)試推送通知
因為只有真機(jī)具備UDID, 才能夠生成deviceToken
需要真機(jī)調(diào)試證書, 推送測試證書
3.遠(yuǎn)程推送通知實現(xiàn), 客戶端需要做的事
- 請求蘋果獲得deviceToken
/**
- 請求通知授權(quán),以及請求遠(yuǎn)程通知
*/
-
(void)registerRemoteNotification
{
if (isIOS(8.0))
{
1. 請求通知授權(quán)
UIUserNotificationSettings *notificationSet = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSet];2. 注冊遠(yuǎn)程通知 [[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
iOS8.0之前請求遠(yuǎn)程推送通知
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound ];
}
}
- 得到蘋果返回的deviceToken,發(fā)送deviceToken給公司的服務(wù)器
/**
- 當(dāng)遠(yuǎn)程通知注冊后,APNs會通過調(diào)用這個方法,返回對應(yīng)的deviceToken
*/
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);
}
- 監(jiān)聽用戶對通知的點擊
實現(xiàn)APP代理方法
接收到通知, 并且在以下場景
當(dāng)APP在前臺時, 可以調(diào)用
當(dāng)APP從后臺, 進(jìn)入到前臺, 可以調(diào)用
注意:當(dāng)APP 被徹底退出時, 不調(diào)用這個方法, 調(diào)用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"%@", userInfo);
}
或者:
/**
- 當(dāng)接收到遠(yuǎn)程通知時調(diào)用(iOS7.0之后使用)
- 當(dāng)前在前臺時; 或者app在后臺\app被徹底退出狀態(tài)下,點擊通知打開app進(jìn)入前臺; 都可以執(zhí)行以下方法
- 執(zhí)行completionHandler 作用
1> 系統(tǒng)會估量App消耗的電量,并根據(jù)傳遞的UIBackgroundFetchResult 參數(shù)記錄新數(shù)據(jù)是否可用
2> 調(diào)用完成的處理代碼時充活,應(yīng)用的界面縮略圖會自動更新
- 如果想要接收到通知后,不要用戶點擊通知, 就執(zhí)行以下代碼, 那么必須有三個要求:
1> 必須勾選后臺模式Remote Notification ;
2> 告訴系統(tǒng)是否有新的內(nèi)容更新(執(zhí)行完成代碼塊)
3> 設(shè)置發(fā)送通知的格式("content-available":"隨便傳")
*/
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
}
4.遠(yuǎn)程推送測試
PushMeBaby
- 編譯會出現(xiàn)錯誤, 直接把錯誤行注釋即可;
- 需要填寫對應(yīng)的deviceToken;
- 需要將推送測試證書改名為aps.cer 拖入項目中;
5.第三方推送
極光推送(JPush)
個推
信鴿
具體集成步驟以及使用方法, 請查看對應(yīng)的官方文檔, 非常詳細(xì);
第三方服務(wù)合集: [http://mdsa.51cto.com/services/]
二. 應(yīng)用程序間跳轉(zhuǎn)
- 什么是應(yīng)用間跳轉(zhuǎn),有什么作用?
- 應(yīng)用場景
使用第三方用戶登錄蜂莉,需要用戶授權(quán),還需要"返回到調(diào)用的程序混卵,同時返回授權(quán)的用戶名"
應(yīng)用程序推廣映穗,網(wǎng)易彩票,設(shè)置-推薦應(yīng)用-有很多應(yīng)用程序圖標(biāo)如果本機(jī)已經(jīng)安裝過幕随,會直接跳轉(zhuǎn)到另外一個應(yīng)用程序, 軟件的廣告蚁滋,推廣結(jié)果,后續(xù)會有一些列的金錢上的結(jié)算
支付寶赘淮,第三方支付辕录,淘寶,電話費(fèi)充值梢卸。走诞。。
應(yīng)用程序間跳轉(zhuǎn)實現(xiàn)?
直接打開對應(yīng)APP的scheme即可
1.概念須知
URL : 統(tǒng)一資源定位符
scheme(協(xié)議頭) : 決定通過什么方式查找資源 http:// ftp:// tel:// file://
path(路徑) : 資源路徑 www.baidu.com 192.168.1.1/資源 110 /User/Desktop
- 設(shè)置方式
默認(rèn)情況下應(yīng)用程序是沒有自己的URL的,如果想要擁有自己的URL,需要設(shè)置URL
項目 -> info -> URL Types -> URL Scheme
- 打開方式
代碼:
[[UIApplication shareApplication] openURL:appURL];
4.跳轉(zhuǎn)到對方APP, 對方APP執(zhí)行的代理方法
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
}
iOS9.0跳轉(zhuǎn)適配
在info.plist文件中添加LSApplicationQueriesSchemes 字段 ,是數(shù)組類型
三. 社交分享
- 什么是社交分享, 有什么作用?
- 通過用戶的分享蛤高,讓更多的人去了解和使用這個App
- 目前移動互聯(lián)網(wǎng)應(yīng)用程序推廣的最重要手段之一
- 屬于口碑營銷的范疇蚣旱,經(jīng)典成功案例是《瘋狂猜圖》
社交分享的實現(xiàn)方案
1.系統(tǒng)自帶社交分享導(dǎo)入Social.framework
判斷服務(wù)是否可用
[SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo];彈出分享內(nèi)容輸入界面
SLComposeViewController *cc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
[self presentViewController:cc animated:YES completion:nil];額外設(shè)置
[cc setInitialText:@"測試文字"]; 初始化文字
[cc addImage:[UIImage imageNamed:@"lufy"]]; 配圖
2.第三方SDK實現(xiàn)(友盟分享)
下載地址: [http://www.umeng.com/]
1. 申請賬號,創(chuàng)建應(yīng)用
2. 下載SDK
3. 參照集成文檔
****************************************************************重要**********************
遠(yuǎn)程推送應(yīng)用配置過程
- 創(chuàng)建支持遠(yuǎn)程推送功能的App ID
- 創(chuàng)建調(diào)試證書,并選中剛剛創(chuàng)建的App ID
- 下載CER文件戴陡,并導(dǎo)入鑰匙串管理
- 創(chuàng)建發(fā)布證書姻锁,并選中剛剛創(chuàng)建的App ID
- 下載CER文件,并導(dǎo)入鑰匙串管理
- 檢查App ID猜欺,確認(rèn)證書已經(jīng)指定
- 生成描述文件
格式:{"aps":{"alert":"This is some fancy message.","badge":1,"sound":"default"}}
遠(yuǎn)程推送應(yīng)用程序開發(fā)過程
- 新建應(yīng)用程序
- 指定AppID位隶,在developer.apple.com上設(shè)置的AppID
if(系統(tǒng)版本 >= 8.0)
{
注冊接收通知的類型
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:settings];
注冊允許接收遠(yuǎn)程推送通知
[application registerForRemoteNotifications];
}
else
{
如果是iOS7.0,使用以下方法注冊
[application registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];
}
當(dāng)?shù)玫教O果的APNs服務(wù)器返回的DeviceToken就會被調(diào)用
7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"deviceToken是:%@", deviceToken);
}
接收到遠(yuǎn)程通知开皿,觸發(fā)方法和本地通知一致
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"%@", userInfo);
}
使用后臺的遠(yuǎn)程消息推送
1> 在Capabilities中打開遠(yuǎn)程推送通知
2> 實現(xiàn)代理方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
遠(yuǎn)程消息數(shù)據(jù)格式:
{"aps" : {"content-available" : 1},"content-id" : 42}
執(zhí)行completionHandler有兩個目的
1> 系統(tǒng)會估量App消耗的電量涧黄,并根據(jù)傳遞的UIBackgroundFetchResult 參數(shù)記錄新數(shù)據(jù)是否可用
2> 調(diào)用完成的處理代碼時篮昧,應(yīng)用的界面縮略圖會自動更新
注意:接收到遠(yuǎn)程通知到執(zhí)行完網(wǎng)絡(luò)請求之間的時間不能超過30秒
if (userInfo) {
int contentId = [userInfo[@"content-id"] intValue];
ViewController *vc = (ViewController *)application.keyWindow.rootViewController;
[vc loadDataWithContentID:contentId completion:^(NSArray *dataList) {
vc.dataList = dataList;
NSLog(@"刷新數(shù)據(jù)結(jié)束");
completionHandler(UIBackgroundFetchResultNewData);
}];
} else {
completionHandler(UIBackgroundFetchResultNoData);
}alertView