iOS9和iOS10推送區(qū)別

收到消息數(shù)據(jù)格式區(qū)別

//iOS9消息格式如下
 //{
 //    aps =     {
 //        alert = "\U65b0\U6d88\U606f\U6765\U4e86\U3002";
 //        sound = default;
 //    };
 //    d = us60289150408047357911;
 //    p = 0;
 //    pustId = 45267;
 //    pustType = 5;
 //}
 
 iOS10消息格式如下
 //{
 //    aps =     {
 //        alert =         {
 //            body = sdfsfsdf;
 //            subtitle = xxxx;
 //            title = xxx;
 //        };
 //        sound = default;
 //    };
 //    d = us29253150408072030511;
 //    p = 0;
 //    pustId = 45267;
 //    pustType = 5;
 //}

要根據(jù)具體數(shù)據(jù)格式進(jìn)行解析眉枕,以適配iOS10+焚志。

收到遠(yuǎn)程推送消息幾種情況處理

前臺接收消息情況

前臺接收消息即app處于打開正在運(yùn)行的時(shí)候嘱腥,此時(shí)录别,app收到遠(yuǎn)程推送時(shí)候
在iOS9系統(tǒng)下調(diào)用

- (void)application:(UIApplication *)application didReceiveRemoteNotification
:(NSDictionary *)userInfo

iOS10系統(tǒng)下調(diào)用

//iOS10新增:處理前臺收到通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    NSDictionary * userInfo = notification.request.content.userInfo;
    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        //應(yīng)用處于前臺時(shí)的遠(yuǎn)程推送接受
    }else{
        //應(yīng)用處于前臺時(shí)的本地推送接受
    }
    //當(dāng)應(yīng)用處于前臺時(shí)提示設(shè)置朽色,需要哪個(gè)可以設(shè)置哪一個(gè)
    completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);
}

后臺接收消息情況

后臺接收消息,指app按下home鍵進(jìn)入后臺或者設(shè)備進(jìn)入鎖定狀態(tài)组题,此時(shí)接收到遠(yuǎn)程推送消息
iOS9系統(tǒng)下調(diào)用:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

iOS10系統(tǒng)下調(diào)用:

//iOS10新增:處理后臺點(diǎn)擊通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        //應(yīng)用處于后臺時(shí)的遠(yuǎn)程推送接受       
    }else{
        //應(yīng)用處于后臺時(shí)的本地推送接受
    }
}

app未啟動(dòng)的情況

在iOS9系統(tǒng)下葫男,app接收遠(yuǎn)程推送消息調(diào)用Appdelegate中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

其中launchOptions中可以獲取推送消息內(nèi)容,然后根據(jù)消息內(nèi)容進(jìn)行處理崔列。

在iOS10系統(tǒng)下梢褐,app接收遠(yuǎn)程推送消息分為兩步

  1. 先調(diào)用
//iOS10新增:處理后臺點(diǎn)擊通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        //應(yīng)用處于后臺時(shí)的遠(yuǎn)程推送接受
        //必須加這句代碼       
    }else{
        //應(yīng)用處于后臺時(shí)的本地推送接受
    }
}

2.然后走AppDelegate中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

其中,launchOption中包含推送消息內(nèi)容赵讯。

總結(jié)

  • iOS9和iOS10由于收到消息內(nèi)容格式不一樣需要分開區(qū)別處理盈咳。

  • 在iOS9系統(tǒng)下:app啟動(dòng)情況(包括前臺和后臺)都在

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

中處理推送消息,在app未啟動(dòng)情況下瘦癌,在AppDelegate中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

處理遠(yuǎn)程消息猪贪。

  • 在iOS10系統(tǒng)下:app在前臺收到遠(yuǎn)程推送跷敬,在
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler

方法中處理推送消息讯私。
在后臺或者未啟動(dòng)收到遠(yuǎn)程推送消息,在

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler

方法中處理推送消息西傀。

注意

  • 不論iOS9或者iOS10斤寇,launchOptions一般就是消息推送的內(nèi)容。(如果是點(diǎn)擊3D Touch點(diǎn)擊iCon進(jìn)入App拥褂,這個(gè)launchOptions就是3D Touch的相關(guān)數(shù)據(jù)字典)娘锁。如果是iOS10,最好判斷下饺鹃,不處理莫秆,因?yàn)閕OS10的代理方法userNotificationCenter: didReceiveNotificationResponse: withCompletionHandler:會處理。

普及一下悔详,launchOptions參數(shù):
1.App直接啟動(dòng)镊屎,launchOptions為null
2.從他應(yīng)用程序通過openURL:啟動(dòng),則UIApplicationLaunchOptionsURLKey
對應(yīng)的對象為啟動(dòng)URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey
對應(yīng)啟動(dòng)的源應(yīng)用程序的bundle ID (NSString)茄螃;
3.從本地通知啟動(dòng)缝驳,則UIApplicationLaunchOptionsLocalNotificationKey對應(yīng)的
是本地通知對象(UILocalNotification);
4.從遠(yuǎn)程通知啟動(dòng)用狱,則UIApplicationLaunchOptionsRemoteNotificationKey
對應(yīng)的遠(yuǎn)程消息通知信息userInfo(NSDictionary)运怖;
5.從點(diǎn)擊3D Touch iCon啟動(dòng)摇展,則UIApplicationLaunchOptionsShortcutItemKey
對應(yīng)的是點(diǎn)擊的iCon的信息吗购。

  • 在前臺收到推送消息,在iOS10系統(tǒng)的設(shè)備推送消息欄會收到一條推送消息同時(shí)應(yīng)用中也會進(jìn)行推送消息處理砸狞,也就是說你點(diǎn)擊消息欄捻勉,還會進(jìn)行一次推送消息處理。而iOS9系統(tǒng)下消息欄不會有推送消息記錄刀森,只有應(yīng)用中會收到推送消息進(jìn)行處理踱启。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市研底,隨后出現(xiàn)的幾起案子埠偿,更是在濱河造成了極大的恐慌,老刑警劉巖榜晦,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冠蒋,死亡現(xiàn)場離奇詭異,居然都是意外死亡乾胶,警方通過查閱死者的電腦和手機(jī)抖剿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來识窿,“玉大人斩郎,你說我怎么就攤上這事∮髌担” “怎么了缩宜?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甥温。 經(jīng)常有香客問我锻煌,道長,這世上最難降的妖魔是什么姻蚓? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任宋梧,我火速辦了婚禮,結(jié)果婚禮上史简,老公的妹妹穿的比我還像新娘乃秀。我一直安慰自己肛著,他們只是感情好凶硅,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布挺峡。 她就那樣靜靜地躺著,像睡著了一般省骂。 火紅的嫁衣襯著肌膚如雪刀脏。 梳的紋絲不亂的頭發(fā)上局荚,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音愈污,去河邊找鬼耀态。 笑死,一個(gè)胖子當(dāng)著我的面吹牛暂雹,可吹牛的內(nèi)容都是我干的首装。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼杭跪,長吁一口氣:“原來是場噩夢啊……” “哼仙逻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涧尿,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤系奉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后姑廉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缺亮,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年桥言,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萌踱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡限书,死狀恐怖虫蝶,靈堂內(nèi)的尸體忽然破棺而出章咧,到底是詐尸還是另有隱情倦西,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布赁严,位于F島的核電站扰柠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疼约。R本人自食惡果不足惜卤档,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望程剥。 院中可真熱鬧劝枣,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稳诚,卻和暖如春哗脖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扳还。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工才避, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氨距。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓桑逝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俏让。 傳聞我的和親對象是個(gè)殘疾皇子肢娘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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