iOS開發(fā)--本地通知與遠程通知

作者雷潮關(guān)注

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的推送功能。具體按照官方文檔來進行.(有空會寫一篇專門針對激光推送的文稿)

iOS開發(fā)

? 著作權(quán)歸作者所有

舉報文章

關(guān)注雷潮

寫了 80940 字蘸鲸,被 287 人關(guān)注妖谴,獲得了 240 個喜歡

追尋夢想,成就自己酌摇。虛擬現(xiàn)實群:134688909(此群已滿) 二群494141729(正在火...

如果覺得我的文章對您有用膝舅,請隨意打賞。您的支持將鼓勵我繼續(xù)創(chuàng)作窑多!

贊賞支持

喜歡

35

更多分享

登錄后發(fā)表評論

1條評論只看作者

按喜歡排序按時間正序按時間倒序

小泥巴超人

2樓 · 2016.10.26 21:08

很棒誒

回復(fù)

被以下專題收入仍稀,發(fā)現(xiàn)更多相似內(nèi)容

iOS即時通訊

iOS開發(fā)技術(shù)分享

iOS 通知

疑惑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市埂息,隨后出現(xiàn)的幾起案子技潘,更是在濱河造成了極大的恐慌遥巴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件享幽,死亡現(xiàn)場離奇詭異铲掐,居然都是意外死亡,警方通過查閱死者的電腦和手機值桩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門摆霉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奔坟,你說我怎么就攤上這事携栋。” “怎么了咳秉?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵婉支,是天一觀的道長。 經(jīng)常有香客問我澜建,道長向挖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任霎奢,我火速辦了婚禮户誓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幕侠。我一直安慰自己帝美,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布晤硕。 她就那樣靜靜地躺著悼潭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舞箍。 梳的紋絲不亂的頭發(fā)上舰褪,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音疏橄,去河邊找鬼占拍。 笑死,一個胖子當(dāng)著我的面吹牛捎迫,可吹牛的內(nèi)容都是我干的晃酒。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼窄绒,長吁一口氣:“原來是場噩夢啊……” “哼贝次!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彰导,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蛔翅,失蹤者是張志新(化名)和其女友劉穎敲茄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體山析,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡堰燎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盖腿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爽待。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡损同,死狀恐怖翩腐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膏燃,我是刑警寧澤茂卦,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站组哩,受9級特大地震影響等龙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伶贰,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一蛛砰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧黍衙,春花似錦泥畅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至方椎,卻和暖如春聂抢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棠众。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工琳疏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闸拿。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓空盼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胸墙。 傳聞我的和親對象是個殘疾皇子我注,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容