2016.02.01 00:18*字?jǐn)?shù) 1921閱讀 7038評論 1喜歡 35
這里是指推送通知跟NSNotification有區(qū)別:
1搀继、NSNotification是系統(tǒng)內(nèi)部發(fā)出通知,一般用于內(nèi)部事件的監(jiān)聽翠语,或者狀態(tài)的改變等等叽躯,是不可見的
2、本地通知與遠程通知是可見的肌括,主要用于告知用戶或者發(fā)送一些App的內(nèi)容更新点骑,推送一些相關(guān)的消息,讓用戶知道App內(nèi)部發(fā)生了什么事情。
Paste_Image.png
iOS常用通知
1黑滴、本地推送通知:(Local Notification)
2憨募、遠程推送通知:(Remote Notification)
iOS通知呈現(xiàn)效果(5)
1.設(shè)置音效,(提醒作用)
2.設(shè)置橫幅袁辈,
3.設(shè)置彈窗菜谣,
4.鎖屏下也可以呈現(xiàn),
5.App圖標(biāo)的數(shù)字 (即新內(nèi)容的數(shù)量)
至于顯示橫幅或者彈窗晚缩,取決于用戶的設(shè)置
iOS手機設(shè)置中:通知中心-選擇應(yīng)用-選擇應(yīng)用下的通知模式-OK葛菇!
Paste_Image.png
通知的注意點
1、App在前臺運行的時候橡羞,通知不會展示出來
2眯停、點擊通知,默認(rèn)會自動打開推送通知的App
3卿泽、不管App是否打開莺债,通知都可以如期發(fā)出
1、本地推送通知:
不需要聯(lián)網(wǎng)就可以發(fā)出的通知
使用場景:
提醒用戶完成一些任務(wù)签夭,比如:定時提醒齐邦,生活備注,看電影等等
推送通知屬性:
// 枚舉值-發(fā)出通知的時間(有局限性)@property(nonatomic) NSCalendarUnit repeatInterval;// 自定義-發(fā)出通知的時間(可以自由設(shè)定時間)@property(nonatomic,copy) NSCalendar *repeatCalendar;// 區(qū)域-創(chuàng)建只需要創(chuàng)建一個中心點與半徑就可以了@property(nonatomic,copy) CLRegion *region// 進入?yún)^(qū)域發(fā)出一個通知第租,設(shè)置yes,只會發(fā)出一個通知措拇,設(shè)置NO就會每次進入這個區(qū)域都發(fā)送@property(nonatomic,assign) BOOL regionTriggersOnce NO// 設(shè)置通知的內(nèi)容@property(nonatomic,copy) NSString *alertBody;// 決定alertAction是否生效@property(nonatomic) BOOL hasAction;// 設(shè)置滑塊的文字@property(nonatomic,copy) NSString *alertAction;// 設(shè)置點擊通知的啟動圖片(一般設(shè)置App啟動圖片后,這里可以隨便寫)@property(nonatomic,copy) NSString *alertLaunchImage;// 設(shè)置alertTitle慎宾,就是通知內(nèi)容上面的文字@property(nonatomic,copy) NSString *alertTitle// 設(shè)置彈出的聲音@property(nonatomic,copy) NSString *soundName;// 設(shè)置App的消息條數(shù)@property(nonatomic) NSInteger applicationIconBadgeNumber;// 設(shè)置通知一些額外數(shù)據(jù)@property(nonatomic,copy) NSDictionary *userInfo;
如何發(fā)出本地通知:
// 1.創(chuàng)建本地通知UILocalNotification*localNote = [[UILocalNotificationalloc] init];// 2.設(shè)置本地通知的內(nèi)容// 2.1.設(shè)置通知發(fā)出的時間localNote.fireDate = [NSDatedateWithTimeIntervalSinceNow:3.0];// 2.2.設(shè)置通知的內(nèi)容localNote.alertBody =@"在干嗎?";// 2.3.設(shè)置滑塊的文字(鎖屏狀態(tài)下:滑動來“解鎖”)localNote.alertAction =@"解鎖";// 2.4.決定alertAction是否生效localNote.hasAction =NO;// 2.5.設(shè)置點擊通知的啟動圖片localNote.alertLaunchImage =@"123Abc";// 2.6.設(shè)置alertTitlelocalNote.alertTitle =@"你有一條新通知";// 2.7.設(shè)置有通知時的音效localNote.soundName =@"buyao.wav";// 2.8.設(shè)置應(yīng)用程序圖標(biāo)右上角的數(shù)字localNote.applicationIconBadgeNumber =999;// 2.9.設(shè)置額外信息localNote.userInfo = @{@"type": @1};// 3.調(diào)用通知[[UIApplicationsharedApplication] scheduleLocalNotification:localNote];}
使用注意:
iOS7丐吓,不需要用戶授權(quán)就可發(fā)出通知,而iOS8以后趟据,必須用戶授權(quán)才可以發(fā)出通知
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {// 設(shè)置應(yīng)用程序的圖標(biāo)右上角的數(shù)字[application setApplicationIconBadgeNumber:0];if([[UIDevicecurrentDevice].systemVersion doubleValue] >=8.0) {UIUserNotificationSettings*settings = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSoundcategories:nil];? ? ? ? [application registerUserNotificationSettings:settings];? ? }// 界面的跳轉(zhuǎn)(針對應(yīng)用程序被殺死的狀態(tài)下的跳轉(zhuǎn))// 殺死狀態(tài)下的券犁,界面跳轉(zhuǎn)并不會執(zhí)行下面的方法- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification,// 所以我們在寫本地通知的時候汹碱,要在這個與下面方法中寫粘衬,但要判斷,是通過哪種類型通知來打開的if(launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {// 跳轉(zhuǎn)代碼UILabel*redView = [[UILabelalloc] init];? ? ? ? redView.frame =CGRectMake(0,0,200,300);? ? ? ? redView.numberOfLines =0;? ? ? ? redView.font = [UIFontsystemFontOfSize:12.0];? ? ? ? redView.backgroundColor = [UIColorredColor];? ? ? ? redView.text = [NSStringstringWithFormat:@"%@", launchOptions];? ? ? ? [self.window.rootViewController.view addSubview:redView];? ? }returnYES;}
監(jiān)聽通知咳促,如果用戶打開通知稚新,可以讓用戶進入一些特定的界面
/*
應(yīng)用程序在進入前臺,或者在前臺的時候都會執(zhí)行該方法
*/- (void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification{// 必須要監(jiān)聽--應(yīng)用程序在后臺的時候進行的跳轉(zhuǎn)if(application.applicationState ==UIApplicationStateInactive) {NSLog(@"進行界面的跳轉(zhuǎn)");// 如果在上面的通知方法中設(shè)置了一些,可以在這里打印額外信息的內(nèi)容跪腹,就做到監(jiān)聽褂删,也就可以根據(jù)額外信息,做出相應(yīng)的判斷NSLog(@"%@", notification.userInfo);//UIView*redView = [[UIViewalloc] init];? ? ? ? redView.frame =CGRectMake(0,0,100,100);? ? ? ? redView.backgroundColor = [UIColorredColor];? ? ? ? [self.window.rootViewController.view addSubview:redView];? ? }}
2尺迂、遠程推送通知:
從遠程服務(wù)器推送給客戶端的通知(需要聯(lián)網(wǎng))
遠程推送服務(wù)---就是APNs
模擬器無法調(diào)試遠程推送
為什么需要遠程推送通知:
解決獲取傳統(tǒng)數(shù)據(jù)的局限性笤妙,讓數(shù)據(jù)實時更新
使用場景:
聊天功能(一般非即時聊天)冒掌、推送一下App的內(nèi)部新功能噪裕、版本下載等
注:所有的蘋果設(shè)備蹲盘,在聯(lián)網(wǎng)狀態(tài)下,都會與蘋果的服務(wù)器建立-長連接
長連接的作用:
時間效準(zhǔn)膳音、系統(tǒng)升級召衔、查找我的iphone、遠程通知
好處:
數(shù)據(jù)傳輸快祭陷、數(shù)據(jù)保持最新狀態(tài)
Paste_Image.png
Paste_Image.png
Paste_Image.png
我在面試中一般也比較喜歡問面試者這個問題苍凛。能解釋清楚肯定就有貨真價實的開發(fā)經(jīng)驗
使用遠程推送
1、獲取蘋果獲得deviceToken-獲取手機UDID+應(yīng)用的唯一標(biāo)識(bundel ID)
2兵志、得到蘋果返回的deviceToken
3醇蝴、發(fā)送deviceToken給公司的服務(wù)器
4、監(jiān)聽用戶對通知的點擊
如何調(diào)試遠程推送功能
1想罕、真機
2悠栓、調(diào)試推送需要的證書文件
證書自己配置。按价。惭适。
3、發(fā)布具有推送服務(wù)的App
包含推送的cer證書+某個具有發(fā)布資格的電腦楼镐,就可以發(fā)布
如何推送
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {if([[UIDevicecurrentDevice].systemVersion doubleValue] >=8.0) {//iOS8UIUserNotificationSettings*settings = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSoundcategories:nil];? ? ? ? [application registerUserNotificationSettings:settings];? ? ? ? [application registerForRemoteNotifications];? ? }else{// iOS7[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeNewsstandContentAvailability|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert];? ? }// 根據(jù)遠程通知通過UIApplicationLaunchOptionsRemoteNotificationKey打開的情況來進行if(launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {// 跳轉(zhuǎn)// 添加一個紅色的View}returnYES;}
// 獲取DeviceToken-(void)application:(UIApplication*)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{// 將DeviceToken傳給服務(wù)器NSLog(@"%@", deviceToken.description);}
// 正常接到遠程通知的時候會調(diào)用這個方法-(void)application:(UIApplication*)applicationdidReceiveRemoteNotification:(NSDictionary*)userInfo{NSLog(@"%@", userInfo);// 正常打開推送后癞志,}
// 后臺操作(根據(jù)收到推送,讓程序自己執(zhí)行一些操作框产,不管用戶是否點擊推送)- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler{NSLog(@"---------");UIView*redV = [[UIViewalloc] init];? ? redView.backgroundColor = [UIColorredColor];? ? redView.frame =CGRectMake(100,100,100,100);? ? [self.window.rootViewController.view addSubview:redV];// 1.打開后臺模式 2.告訴系統(tǒng)是否有新內(nèi)容的更新 3.發(fā)送的通知有固定的格式("content-available":"1")// 2.告訴系統(tǒng)有新內(nèi)容completionHandler(UIBackgroundFetchResultNewData);}
1凄杯、打開后臺模式
Paste_Image.png
2、告訴系統(tǒng)有新內(nèi)容
completionHandler(UIBackgroundFetchResultNewData);
3秉宿、發(fā)送通知有固定格式
("content-available":"1")
找的這張圖:也有相應(yīng)的模擬推送代碼盾舌,需要的可以聯(lián)系我
Paste_Image.png
一般開發(fā)中直接使用(jpush)激光推送就可以快速完成App的推送功能。具體按照官方文檔來進行.(有空會寫一篇專門針對激光推送的文稿)
? 著作權(quán)歸作者所有
寫了 80940 字蘸鲸,被 287 人關(guān)注妖谴,獲得了 240 個喜歡
追尋夢想,成就自己酌摇。虛擬現(xiàn)實群:134688909(此群已滿) 二群494141729(正在火...
如果覺得我的文章對您有用膝舅,請隨意打賞。您的支持將鼓勵我繼續(xù)創(chuàng)作窑多!
贊賞支持
登錄后發(fā)表評論
1條評論只看作者
2樓 · 2016.10.26 21:08
很棒誒
被以下專題收入仍稀,發(fā)現(xiàn)更多相似內(nèi)容
疑惑