iOS 10 極光推送的一些整理

首先用cocoapods導(dǎo)入 pod 'JPush'

然后在AppDelegate引用

// 引入JPush功能所需頭文件
#import "JPUSHService.h"
// iOS10注冊(cè)APNs所需頭文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// 如果需要使用idfa功能所需要引入的頭文件(可選)
#import <AdSupport/AdSupport.h>

設(shè)置代理<JPUSHRegisterDelegate>

然后注冊(cè)JPush

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

//程序殺死狀態(tài)下從外部進(jìn)入app 獲取到遠(yuǎn)程推送消息 跳轉(zhuǎn)指定頁(yè)面的做法
if (launchOptions) {
// 獲取推送通知定義的userinfo
NSDictionary * remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (remoteNotification) {
roomid = remoteNotification[@"roomId"];
nickName = remoteNotification[@"senderNickName"];
[self setupMainViewController];
}else{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
//notice: 3.0.0及以后版本注冊(cè)可以這樣寫,也可以繼續(xù)用之前的注冊(cè)方式
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types=JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
// 可以添加自定義categories
// NSSet<UNNotificationCategory *> *categories for iOS10 or later
// NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
}
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
// Optional
// 獲取IDFA
// 如需使用IDFA功能請(qǐng)?zhí)砑哟舜a并在初始化方法的advertisingIdentifier參數(shù)中填寫對(duì)應(yīng)值
NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
// Required // init Push // notice: 2.1.5版本的SDK新增的注冊(cè)方法授翻,改成可上報(bào)IDFA或悲,如果沒有使用IDFA直接傳nil
// 如需繼續(xù)使用pushConfig.plist文件聲明appKey等配置內(nèi)容镐作,請(qǐng)依舊使用[JPUSHService setupWithOption:launchOptions]方式初始化。
[JPUSHService setupWithOption:launchOptions appKey:@"appKey" channel:@"AppStore" apsForProduction:0 advertisingIdentifier:advertisingId];
return YES;
}

pragma mark - iOS10 收到通知(本地和遠(yuǎn)端) UNUserNotificationCenterDelegate

//App處于前臺(tái)接收通知時(shí) 只會(huì)是app處于前臺(tái)狀態(tài) 前臺(tái)狀態(tài) and 前臺(tái)狀態(tài)下才會(huì)走隆箩,后臺(tái)模式下是不會(huì)走這里的
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
//收到推送的請(qǐng)求
UNNotificationRequest *request = notification.request;
//收到推送的內(nèi)容
UNNotificationContent *content = request.content;
//收到用戶的基本信息
NSDictionary *userInfo = content.userInfo;
//收到推送消息的角標(biāo)
NSNumber *badge = content.badge;
//收到推送消息body
NSString *body = content.body;
//推送消息的聲音
UNNotificationSound *sound = content.sound;
// 推送消息的副標(biāo)題
NSString *subtitle = content.subtitle;
// 推送消息的標(biāo)題
NSString *title = content.title;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//此處省略一萬行需求代碼该贾。。捌臊。杨蛋。。理澎。
// NSLog(@"iOS10 收到遠(yuǎn)程通知:%@",userInfo);
}else {
// 判斷為本地通知
//此處省略一萬行需求代碼逞力。。糠爬。寇荧。。执隧。
NSLog(@"iOS10 收到本地通知:{\\\\nbody:%@揩抡,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@镀琉,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo); }

// 需要執(zhí)行這個(gè)方法峦嗤,選擇是否提醒用戶,有Badge屋摔、Sound烁设、Alert三種類型可以設(shè)置
completionHandler(UNNotificationPresentationOptionBadge| UNNotificationPresentationOptionSound| UNNotificationPresentationOptionAlert); }

App通知的點(diǎn)擊事件 下面這個(gè)代理方法,

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
//收到推送的請(qǐng)求
UNNotificationRequest *request = response.notification.request;
//收到推送的內(nèi)容
UNNotificationContent *content = request.content;
//收到用戶的基本信息
NSDictionary *userInfo = content.userInfo;
//收到推送消息的角標(biāo)
NSNumber *badge = content.badge;
//收到推送消息body
NSString *body = content.body;
//推送消息的聲音
UNNotificationSound *sound = content.sound;
// 推送消息的副標(biāo)題
NSString *subtitle = content.subtitle;
// 推送消息的標(biāo)題
NSString *title = content.title;
if([response.notification.request.trigger isKindOfClass:
[UNPushNotificationTrigger class]]) {
NSLog(@"iOS10 收到遠(yuǎn)程通知:%@",userInfo);
//此處省略一萬行需求代碼钓试。装黑。。弓熏。恋谭。。
}else {
// 判斷為本地通知
//此處省略一萬行需求代碼硝烂。箕别。。滞谢。串稀。。
NSLog(@"iOS10 收到本地通知:{\\\\nbody:%@狮杨,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@母截,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo);
}
completionHandler(); // 系統(tǒng)要求執(zhí)行這個(gè)方法
}

pragma mark -iOS 10之前收到通知

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"iOS6及以下系統(tǒng)橄教,收到通知:%@", userInfo);
[JPUSHService handleRemoteNotification:userInfo];
//此處省略一萬行需求代碼清寇。喘漏。。华烟。翩迈。。
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"iOS7及以上系統(tǒng)盔夜,收到通知:%@", userInfo);
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
//此處省略一萬行需求代碼负饲。。喂链。返十。。椭微。
}

appKey 在極光獲取
channel 指明應(yīng)用程序包的下載渠道,為方便分渠道統(tǒng)計(jì),具體值由你自行定義
apsForProduction 0 (默認(rèn)值)表示采用的是開發(fā)證書洞坑,1 表示采用生產(chǎn)證書發(fā)布應(yīng)用
advertisingIdentifier 廣告標(biāo)識(shí)符吧好像 記不太清了 用處不大

注冊(cè)APNs成功并上報(bào)DeviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Required - 注冊(cè) DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
//這里應(yīng)該將獲取的registrationID 和服務(wù)器存儲(chǔ)的用戶綁定 來實(shí)現(xiàn)定點(diǎn)推送
[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { NSLog(@"%@", registrationID); }];
}

實(shí)現(xiàn)注冊(cè)APNs失敗接口(可選)

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}

添加處理APNs通知回調(diào)方法

#pragma mark- JPUSHRegisterDelegate
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert);
// 需要執(zhí)行這個(gè)方法,選擇是否提醒用戶蝇率,有Badge迟杂、Sound、Alert三種類型可以選擇設(shè)置
}

// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系統(tǒng)要求執(zhí)行這個(gè)方法
}

#pragma mark -iOS 10之前收到通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"iOS6及以下系統(tǒng)瓢剿,收到通知:%@", userInfo);
[JPUSHService handleRemoteNotification:userInfo];
//此處省略一萬行需求代碼逢慌。悠轩。间狂。。火架。鉴象。
}

注冊(cè)

成功運(yùn)行

真機(jī)調(diào)試該項(xiàng)目,如果控制臺(tái)輸出以下日志則代表您已經(jīng)集成成功何鸡。

2016-08-19 17:12:12.745823 219b28[1443:286814] | JPUSH | I - [JPUSHLogin]
----- login result -----
uid:5460310207
registrationID:171976fa8a8620a14a4

配置證書

Snip20170923_1.png

創(chuàng)建 App ID纺弊,填寫 App ID 的 NAME 和 Bundle ID(如果 ID 已經(jīng)存在可以直接跳過此步驟)。


Snip20170923_2.png
Snip20170923_3.png

為 App 開啟 Push Notification 功能骡男。如果是已經(jīng)創(chuàng)建的 App ID 也可以通過設(shè)置開啟 Push Notification 功能淆游。

Snip20170923_6.png
Snip20170923_7.png

如果你之前沒有創(chuàng)建過 Push 證書或者是要重新創(chuàng)建一個(gè)新的,請(qǐng)?jiān)谧C書列表下面新建隔盛。

Snip20170923_9.png

新建證書需要注意選擇 APNs 證書種類犹菱。如圖 APNs 證書有開發(fā)(Development)和生產(chǎn)(Production)兩種。

注:開發(fā)證書用于開發(fā)調(diào)試使用吮炕;生產(chǎn)證書既能用于開發(fā)調(diào)試腊脱,也可用于產(chǎn)品發(fā)布。此處我們選擇生產(chǎn)證書為例龙亲。

Snip20170923_10.png

點(diǎn)擊 "Continue", 之后選擇該證書準(zhǔn)備綁定的 AppID陕凹。

Snip20170923_11.png

擊 “Continue”悍抑,會(huì)進(jìn)入 CSR 說明界面。
再點(diǎn) “Continue” 會(huì)讓你上傳 CSR 文件杜耙。( CSR 文件會(huì)在下一步創(chuàng)建)

Snip20170923_12.png

打開系統(tǒng)自帶的 KeychainAccess 創(chuàng)建 Certificate Signing Request搜骡。如下圖操作:

Snip20170923_14.png

填寫“用戶郵箱”和“常用名稱” ,并選擇“存儲(chǔ)到磁盤”佑女,證書文件后綴為 .certSigningRequest 浆兰。

Snip20170923_15.png

回到瀏覽器中 CSR 上傳頁(yè)面,上傳剛剛生成的后綴為 .certSigningRequest 的文件珊豹。
生成證書成功后簸呈,點(diǎn)擊 “Download” 按鈕把證書下載下來,是后綴為 .cer 的文件店茶。

Snip20170923_16.png

雙擊證書后蜕便,會(huì)在“KeychainAccess”中打開,選擇左側(cè)“鑰匙串”列表中“登錄”贩幻,以及“種類”列表中“我的證書”轿腺,找到剛才下載的證書,并導(dǎo)出為 .p12 文件丛楚。如下圖:

Snip20170923_17.png
Snip20170923_18.png

在極光控制臺(tái)上族壳,進(jìn)入你應(yīng)用的應(yīng)用設(shè)置中 iOS 的鑒權(quán)方式選擇 “證書”,上傳剛才導(dǎo)出的 .p12 證書趣些。極光會(huì)在后臺(tái)為你的應(yīng)用進(jìn)行鑒權(quán)仿荆。

Snip20170923_19.png

注意事項(xiàng)

開發(fā)環(huán)境測(cè)試

在對(duì) JPush iOS 開發(fā)環(huán)境進(jìn)行測(cè)試前,請(qǐng)確保 3 個(gè)統(tǒng)一:
App 是開發(fā)環(huán)境打包(開發(fā)證書 Development)
上傳了開發(fā)證書并驗(yàn)證通過

發(fā)布環(huán)境測(cè)試

在對(duì) JPush iOS 生產(chǎn)環(huán)境進(jìn)行測(cè)試前坏平,請(qǐng)確保 3 個(gè)統(tǒng)一:
App 是 ad-hoc 打包或者App Store 版本(發(fā)布證書 Production)
上傳了發(fā)布證書并驗(yàn)證通過

可能存在的其他問題

收到消息不夠穩(wěn)定
JPush iOS 是對(duì)原生官方 APNs 推送的一個(gè)補(bǔ)充拢操,是對(duì)其的封裝,以幫助開發(fā)人員更輕松地使用 APNs 舶替。
由于APNs 本身不承諾保證消息到達(dá)令境,客戶端網(wǎng)絡(luò)與服務(wù)器端的連通性,對(duì) APNs 是否及時(shí)接收到消息具有很大的影響顾瞪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舔庶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陈醒,更是在濱河造成了極大的恐慌惕橙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孵延,死亡現(xiàn)場(chǎng)離奇詭異吕漂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尘应,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門惶凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吼虎,“玉大人,你說我怎么就攤上這事苍鲜∷蓟遥” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵混滔,是天一觀的道長(zhǎng)洒疚。 經(jīng)常有香客問我,道長(zhǎng)坯屿,這世上最難降的妖魔是什么油湖? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮领跛,結(jié)果婚禮上乏德,老公的妹妹穿的比我還像新娘。我一直安慰自己吠昭,他們只是感情好喊括,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矢棚,像睡著了一般郑什。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒲肋,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天蘑拯,我揣著相機(jī)與錄音,去河邊找鬼肉津。 笑死强胰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妹沙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼熟吏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼距糖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牵寺,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤悍引,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后帽氓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趣斤,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年黎休,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浓领。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玉凯。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖联贩,靈堂內(nèi)的尸體忽然破棺而出漫仆,到底是詐尸還是另有隱情,我是刑警寧澤泪幌,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布盲厌,位于F島的核電站,受9級(jí)特大地震影響祸泪,放射性物質(zhì)發(fā)生泄漏吗浩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一没隘、第九天 我趴在偏房一處隱蔽的房頂上張望拓萌。 院中可真熱鬧然爆,春花似錦掠械、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)炕倘。三九已至,卻和暖如春翰撑,著一層夾襖步出監(jiān)牢的瞬間罩旋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工眶诈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涨醋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓逝撬,卻偏偏與公主長(zhǎng)得像浴骂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宪潮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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