一墩朦、蘋果中的通知
1、廣播通知(NSNotificationCenter)
1)實(shí)現(xiàn)一個(gè)對(duì)象對(duì)多個(gè)對(duì)象的通信
2)是抽象的翻擒,肉眼看不到的
2氓涣、推送通知
1)可以讓不在前臺(tái)運(yùn)行的app,告知用戶app內(nèi)部發(fā)生了什么事情
2)肉眼看看到的
3)設(shè)置提示樣式
設(shè)置 ---- 通知中心 點(diǎn)擊任意應(yīng)用通知 提示樣式
4)推送通知有兩種
本地通知(Local Notification)
遠(yuǎn)程通知(Remote Notification)
二陋气、本地推送通知
1劳吠、概念
- 不需要聯(lián)網(wǎng)就能發(fā)出的推送通知(不需要服務(wù)器的支持)
2、使用場(chǎng)景
- 常用來(lái)定時(shí)提醒用戶完成一些任務(wù)巩趁,即使程序被殺死提示照樣有痒玩,例如:記事本、備忘錄等
3议慰、如何發(fā)送出本地通知 (必須要有的5步)(其中5.1和5.2放到Appdelegate.m里面)
//1.通知對(duì)象
UILocalNotification *local = [[UILocalNotification alloc]init];
//2.通知的時(shí)間
local.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
//3.通知的內(nèi)容
local.alertBody = @"你吃飯了嗎蠢古??别凹?";
//4.調(diào)度本地通知
[[UIApplication sharedApplication] scheduleLocalNotification:local];
//5.打開通知的設(shè)置權(quán)限
//5.1獲取授權(quán)的內(nèi)容
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeNone |
UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
//5.2使用Applaction對(duì)象授權(quán)
[application registerUserNotificationSettings:setting];
-
當(dāng)然還有一些其他的通知屬性如下:(選用上面本地通知的對(duì)象local)
//1.鎖屏?xí)r的動(dòng)作標(biāo)題
local.alertAction = @"來(lái)消息了";
//2.設(shè)置音效內(nèi)容(要的是聲音的字符串)
local.soundName = @"布谷鳥.caf";
//local.soundName = UILocalNotificationDefaultSoundName //系統(tǒng)默認(rèn)的聲音
//3.設(shè)置app圖標(biāo)文字
local.applicationIconBadgeNumber = 99;
//4.還可以幫助設(shè)置App啟動(dòng)圖片
local.alertLaunchImage = @"圖片的名字";
//5.設(shè)置通知的時(shí)候的附加信息
local.userInfo = @{@"type":@"1",@"hello":@"word"};
//6 取消所有通知
UIApplication *app = [UIApplication sharedApplication];
[app cancelAllLocalNotifications];
三草讶、監(jiān)聽本地通知點(diǎn)擊(一條通知一個(gè)附加信息)
1、點(diǎn)擊通知炉菲,應(yīng)用程序進(jìn)入前臺(tái)或者在前臺(tái)時(shí)調(diào)用堕战,如果程序殺死(也就是移除APP),點(diǎn)擊通知信息不執(zhí)行
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
}
例如:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
//在這里還可以設(shè)置進(jìn)入前臺(tái)的狀態(tài)(比如說(shuō)剛開始的狀態(tài)時(shí):進(jìn)入前臺(tái))
if (application.applicationState == UIApplicationStateInactive )
{
NSLog(@"我是從后臺(tái)進(jìn)來(lái)的");
}
else
{
NSLog(@"我是從前臺(tái)進(jìn)入的");
}
}
-
里面還可以嵌套一個(gè)if來(lái)判斷userinfo通知附件信息里面的一些內(nèi)容
例如-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { //在這里還可以設(shè)置進(jìn)入前臺(tái)的狀態(tài)(比如說(shuō)剛開始的狀態(tài)時(shí):進(jìn)入前臺(tái)) if (application.applicationState == UIApplicationStateInactive ) { if ([notification.userInfo[@"type"] isEqualToString:@"1"]) { NSLog(@"跳轉(zhuǎn)所需求的控制器");//type是我的userinfo的里面的信息 } } }
2拍霜、如果程序被殺死后還想點(diǎn)擊通知信息進(jìn)入相應(yīng)界面嘱丢,需要在下面方法里做相應(yīng)判斷
-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if(launchOptions){
UILocalNotification *localNote = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
}
}
-
例如 (寫到程序啟動(dòng)的方法里面)
//如果launchOptions是nil,就代表正常啟動(dòng)祠饺,如果不為空就代表點(diǎn)擊通知的啟動(dòng)
if (launchOptions) {
//得到通知的對(duì)象
UILocalNotification *local = launchOptions[UIApplicationLaunchOptionsAnnotationKey];
if ([local.userInfo[@"type"] isEqualToString:@"1"] ) {
NSLog(@"我是殺死之后進(jìn)來(lái)的");
}
}
3屿讽、在Appdelegate的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions向window添加試圖時(shí),要重寫window
-
重寫window只需要3步
1.創(chuàng)建窗口 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 2.設(shè)置窗口根控制器 self.window.rootViewController = [[ViewController alloc]init]; 3.顯示窗口 [self.window makeKeyAndVisible];
四遠(yuǎn)程通知
(一) 遠(yuǎn)程通知的概念
1.從遠(yuǎn)程服務(wù)器推送給客戶端的通知(需要聯(lián)網(wǎng))
2.又稱APNS(Apple Push Notification Services)
3.為什么需要遠(yuǎn)程推送通知
(1):傳統(tǒng)獲取數(shù)據(jù)的局限性
只要用戶關(guān)閉了app,就無(wú)法跟服務(wù)器溝通吠裆,無(wú)法從服務(wù)器上獲取新的數(shù)據(jù)內(nèi)容
(2)遠(yuǎn)程推送通知可以解決以上問(wèn)題:
不管用戶打開還是關(guān)閉app,只要聯(lián)網(wǎng)了,都能接到服務(wù)器推送的遠(yuǎn)程通知
(二)遠(yuǎn)程通知使用須知
所有蘋果設(shè)備烂完,在聯(lián)網(wǎng)狀態(tài)下试疙,都會(huì)與蘋果的服務(wù)器建立長(zhǎng)鏈接
1)鏈接
1.長(zhǎng)連接
只要聯(lián)網(wǎng)了,就一直建立鏈接抠蚣,服務(wù)器給你主動(dòng)發(fā)送信息祝旷,可以進(jìn)行時(shí)間校正
2.短鏈接
發(fā)送請(qǐng)求并響應(yīng)就會(huì)斷開鏈接,我只求發(fā)送請(qǐng)求,服務(wù)器才能給我傳數(shù)據(jù)怀跛,服務(wù)器無(wú)法主動(dòng)給我們發(fā)送信息
2)長(zhǎng)連接作用
時(shí)間校準(zhǔn)
系統(tǒng)升級(jí)
查找iPhone
3)長(zhǎng)鏈接的好處
數(shù)據(jù)傳輸速度快
數(shù)據(jù)保持最新狀態(tài)
(三)推送通知原理
1距贷、發(fā)送設(shè)備的UDID和應(yīng)用的Bundle Identifer給APNS服務(wù)器
2、經(jīng)蘋果加密生成一個(gè)deviceToken,通過(guò)devieceToken能找到某個(gè)設(shè)備上的某個(gè)應(yīng)用程序
3吻谋、發(fā)送當(dāng)前用戶張三的deviceToken和用戶的標(biāo)志(比如id或qq)給QQ服務(wù)器
4忠蝗、QQ服務(wù)器將發(fā)送過(guò)來(lái)的內(nèi)容存到數(shù)據(jù)庫(kù)
5、李四的手機(jī)給張三發(fā)信息--吃了么漓拾,實(shí)際是先發(fā)送到服務(wù)器
6阁最、去數(shù)據(jù)庫(kù)查詢張三的deviceToken
7、將內(nèi)容發(fā)送給蘋果的APNS
8骇两、APNS通過(guò)deviceToken找到張三現(xiàn)在的設(shè)備速种,并發(fā)送相應(yīng)信息
(四)、開發(fā)iOS程序的推送功能低千,iOS端需要做的事情
1配阵、向蘋果請(qǐng)求獲得deviceToken
2、得到蘋果返回的deviceToken
3示血、發(fā)送deviceToken給公司的服務(wù)器
4棋傍、監(jiān)聽用戶對(duì)通知的點(diǎn)擊
五、調(diào)試iOS遠(yuǎn)程推送功能矾芙,必備條件
1舍沙、真機(jī)
-
2、調(diào)試推送需要的證書文件剔宪,
1)aps_development.cer 某臺(tái)電腦就能調(diào)試app的推送服務(wù) 2)iPhone5_qq.mobileprovision 某臺(tái)電腦就能利用某臺(tái)設(shè)備調(diào)試某個(gè)程序
-
3拂铡、發(fā)布具有推送服務(wù)的app
1)aps_production.cer 如果發(fā)布的程序中包含了推送服務(wù),就必須安裝這個(gè)證書 2)qq.mobileprovison 某臺(tái)電腦就能發(fā)布某個(gè)程序