iOS SDK集成、證書設(shè)置什么的爆哑,極光官網(wǎng)上都有什猖,不再說了,參考極光文檔
docs.jiguang.cn/jpush/guideline/intro/
只說一下素邪,我在調(diào)試過程中遇到的問題:
1.設(shè)置別名和標(biāo)簽的問題葱色。
開始糾結(jié)困惑了一下,極光支持設(shè)置別名和標(biāo)簽娘香,在我理解看來別名只是一個(gè)別名苍狰,標(biāo)簽可以綁定更多信息,可以綁定你想綁定的任何用戶信息烘绽,方便后期根據(jù)標(biāo)簽淋昭,來批量下發(fā) Push 消息“步樱可為每個(gè)用戶打多個(gè)標(biāo)簽翔忽。
2.極光推送SDK版本問題。
極光推送SDK目前最新的版本為:JPush iOS SDK v3.0.7,更新日志歇式,https://docs.jiguang.cn/jpush/updates/驶悟,貌似只能下載最新的SDK,沒看到能下載之前的版本,另外有一點(diǎn)材失,最新的SDK痕鳍,Notification Service Extension無法在iOS9(XCode7)中使用,測試時(shí)請刪除對應(yīng)Target以防止不必要的誤導(dǎo)龙巨。
這是一點(diǎn)笼呆,重要的一點(diǎn),故看到這點(diǎn)旨别,放棄了最新版的SDK诗赌,依然使用了上一個(gè)版本JPUSH_VERSION_NUMBER 3.0.6,雖然極光官網(wǎng)給出了
升級提示
建議升級秸弛!铭若。
3.IOS9相關(guān)問題。
接下來就是遇到的IOS的問題递览,首先先說一下AppDelegate和JPUSHRegisterDelegate的幾個(gè)方法:
```
<1.>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
<2.>- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
<3.>- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
<4.>- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler
<5.>- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
```
<1.>會(huì)在app啟動(dòng)完成調(diào)用launchOptions保存了app啟動(dòng)的原因信息奥喻,如果app是因?yàn)辄c(diǎn)擊通知欄啟動(dòng)的,可以在launchOptions獲取到通知的具體內(nèi)容非迹。
NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
判斷remoteNotification是否為空环鲤,不為空則為通過點(diǎn)擊推送消息進(jìn)入應(yīng)用
<2.>會(huì)在接收到通知的時(shí)候調(diào)用,在最新的iOS 10中已經(jīng)廢棄憎兽,建議不再使用冷离,IOS9,IOS10&IOS11不會(huì)調(diào)用纯命。
<3.>說是iOS 7之后新增的方法西剥,如果App狀態(tài)為正在前臺(tái)或者點(diǎn)擊通知欄的通知消息,此回調(diào)函數(shù)將被調(diào)用亿汞。
<4.><5.>為極光SDK提供的代理方法瞭空,其中<4.>為"iOS10 前臺(tái)收到遠(yuǎn)程通知的回調(diào)方法。
<5.>為通知響應(yīng)對象-->點(diǎn)擊通知欄消息相應(yīng)方法疗我。
IOS10咆畏,IOS11在前后臺(tái)、未啟動(dòng)狀態(tài)都會(huì)調(diào)用這兩個(gè)方法吴裤,在其中做相應(yīng)處理即可旧找。
重點(diǎn)說一下,IOS9的問題:
我遇到的問題是IOS在前臺(tái)通知欄沒有任何提示麦牺,只能在<3>這個(gè)方法中獲取到钮蛛,開始做了相關(guān)處理
[self handleUserInfo:userInfo];// 根據(jù)消息內(nèi)容鞭缭,做相應(yīng)操作。
但是治標(biāo)不治本魏颓,奇葩的問題是在前臺(tái)收到推送消息岭辣,自動(dòng)進(jìn)入想要進(jìn)入的頁面,而不是我想要的點(diǎn)擊通知欄消息進(jìn)入甸饱,怎么辦呢沦童?只能想辦法解決了!柜候!! 呵呵
后與產(chǎn)品溝通做了一下處理搞动,直接貼代碼啦躏精。粗拙不堪渣刷,望莫介意,
```
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"推送消息內(nèi)容userInfo = %@,? %@", userInfo, [self logDic:userInfo]);
//判斷程序是否在前臺(tái)運(yùn)行
if ([[UIDevice currentDevice].systemVersion floatValue] < 10.0) {
// 解決IOS9前臺(tái)收不到通知的問題
if (application.applicationState ==UIApplicationStateActive) {
//如果應(yīng)用在前臺(tái)矗烛,在這里執(zhí)行
NSString *contentStr = [userInfo NotNSNullobjectForKey:@"alert"];
NSString *title = [userInfo NotNSNullobjectForKey:@"title"];
if (!title || title.length<=0) {
title = @"收到推送消息";
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:contentStr delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:@"查看", nil];
[alert uxy_handlerClickedButton:^(UIAlertView *alertView, NSInteger btnIndex) {
if (btnIndex==1) {
// 確定查看
[self handleUserInfo:userInfo];
}
}];
[alert show];
}else{
[self handleUserInfo:userInfo];
}
}
// IOS 7 Support Required,處理收到的APNS信息
//如果應(yīng)用在后臺(tái)辅柴,在這里執(zhí)行
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
```
在前臺(tái)做一種alert處理,其它狀態(tài)做另一種處理(因?yàn)槠渌鼱顟B(tài)是正常的可以通過通知欄進(jìn)入)瞭吃。
另外碌嘀,如果實(shí)在是必須要通知欄的效果,不妨看一下這篇文章
www.cnblogs.com/oc-bowen/p/5851916.html
(悄悄的說一下歪架,這是極光技術(shù)支持提供的股冗,因?yàn)樯婕暗搅硪粋€(gè)問題,在另一篇文章中和蚪,說一下)