iOS 10 JPush

蘋(píng)果在iOS10上對(duì)apns推送做了修改, 極光也是很給力的, 在第一時(shí)間就對(duì)sdk進(jìn)行了更新, 下面對(duì)iOS10注冊(cè)極光推送進(jìn)行一下記錄.

首先, 在極光的開(kāi)發(fā)者服務(wù)里注冊(cè)應(yīng)用獲取appKey, 在apple Developer配置推送證書(shū)...等等等這些廢話就不說(shuō)了.

兼容iOS10的是極光2.1.9版本的sdk.

1. 導(dǎo)入SDK

2. 導(dǎo)入SDK依賴的系統(tǒng)框架

CFNetwork.framework

CoreFoundation.frameworkCoreTelephony.frameworkSystemConfiguration.frameworkCoreGraphics.frameworkFoundation.frameworkUIKit.frameworkSecurity.framework

Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

Adsupport.framework (獲取IDFA需要;如果不使用IDFA,請(qǐng)不要添加)

UserNotifications.framework(Xcode8及以上)

3. 設(shè)置Build Setting中, Search Paths的User Header Search Paths

4.如果用的是Xcode8及以上環(huán)境開(kāi)發(fā)需要開(kāi)啟Application Target的Capabilities->Push Notifications選項(xiàng)

這兩個(gè)一定要都是對(duì)號(hào) , ?這個(gè)選項(xiàng)不開(kāi)啟在iOS10后不會(huì)注冊(cè)成功

添加這個(gè)選項(xiàng)會(huì)在項(xiàng)目中多這樣一個(gè)文件

5. 不要忘記Xcode7以上需要支持http傳輸方式

下面是需要寫(xiě)的代碼部分:

6. 在AppDelegate.m中, 引入頭文件

[objc]view plaincopy

//?極光推送

#import?"JPUSHService.h"

#import?

#ifdef?NSFoundationVersionNumber_iOS_9_x_Max

#import??//?這里是iOS10需要用到的框架

#endif

7. 設(shè)置注冊(cè)極光推送需要的一些參數(shù)

[objc]view plaincopy

staticNSString*constJPUSHAPPKEY?=@"xxxxxxxxxxxxxxxxx";//?極光appKey

staticNSString*constchannel?=@"Publish?channel";//?固定的

#ifdef?DEBUG?//?開(kāi)發(fā)

staticBOOLconstisProduction?=?FALSE;//?極光FALSE為開(kāi)發(fā)環(huán)境

#else?//?生產(chǎn)

staticBOOLconstisProduction?=?TRUE;//?極光TRUE為生產(chǎn)環(huán)境

#endif

8. 這里是AppDelegate.m中的代碼, 分了幾大塊, 全部粘到下面, 直接復(fù)制可用(只需要下面這些代碼就可以實(shí)現(xiàn)通知)

[objc]view plaincopy

//

//??AppDelegate.m

//??iOS10_JPUSH

//

//??Created?by?周昊?on?16/9/18.

//??Copyright???2016年?周昊.?All?rights?reserved.

//

#import?"AppDelegate.h"

//?極光推送

#import?"JPUSHService.h"

#import?

#ifdef?NSFoundationVersionNumber_iOS_9_x_Max

#import??//?這里是iOS10需要用到的框架

#endif

staticNSString*constJPUSHAPPKEY?=@"xxxxxxxxxxxxxxxxx";//?極光appKey

staticNSString*constchannel?=@"Publish?channel";//?固定的

#ifdef?DEBUG?//?開(kāi)發(fā)

staticBOOLconstisProduction?=?FALSE;//?極光FALSE為開(kāi)發(fā)環(huán)境

#else?//?生產(chǎn)

staticBOOLconstisProduction?=?TRUE;//?極光TRUE為生產(chǎn)環(huán)境

#endif

@interfaceAppDelegate?()//?最新版的sdk需要實(shí)現(xiàn)這個(gè)代理方法

@end

@implementationAppDelegate

-?(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions?{

//?注冊(cè)apns通知

if([[UIDevicecurrentDevice].systemVersionfloatValue]?>=10.0)//?iOS10

{

#ifdef?NSFoundationVersionNumber_iOS_9_x_Max

JPUSHRegisterEntity*?entity?=?[[JPUSHRegisterEntityalloc]init];

entity.types=?UNAuthorizationOptionAlert|UNAuthorizationOptionBadge?|?UNAuthorizationOptionSound;

[JPUSHServiceregisterForRemoteNotificationConfig:entitydelegate:self];

#endif

}

elseif([[UIDevicecurrentDevice].systemVersionfloatValue]?>=8.0)//?iOS8,?iOS9

{

//可以添加自定義categories

[JPUSHServiceregisterForRemoteNotificationTypes:(UIUserNotificationTypeBadge?|?UIUserNotificationTypeSound?|?UIUserNotificationTypeAlert)categories:nil];

}

else//?iOS7

{

//categories?必須為nil

[JPUSHServiceregisterForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge?|?UIRemoteNotificationTypeSound?|?UIRemoteNotificationTypeAlert)categories:nil];

}

/*

*??launchingOption?啟動(dòng)參數(shù).

*??appKey?一個(gè)JPush?應(yīng)用必須的,唯一的標(biāo)識(shí).

*??channel?發(fā)布渠道.?可選.

*??isProduction?是否生產(chǎn)環(huán)境.?如果為開(kāi)發(fā)狀態(tài),設(shè)置為?NO;?如果為生產(chǎn)狀態(tài),應(yīng)改為?YES.

*??advertisingIdentifier?廣告標(biāo)識(shí)符(IDFA)?如果不需要使用IDFA医舆,傳nil.

*?此接口必須在?App?啟動(dòng)時(shí)調(diào)用,?否則?JPush?SDK?將無(wú)法正常工作.

*/

//?廣告標(biāo)識(shí)符

NSString*advertisingId?=?[[[ASIdentifierManagersharedManager]advertisingIdentifier]UUIDString];

//?如不需要使用IDFA俘侠,advertisingIdentifier?可為nil

//?注冊(cè)極光推送

[JPUSHServicesetupWithOption:launchOptionsappKey:JPUSHAPPKEYchannel:channelapsForProduction:isProductionadvertisingIdentifier:advertisingId];

//2.1.9版本新增獲取registration?id?block接口。

[JPUSHServiceregistrationIDCompletionHandler:^(intresCode,NSString*registrationID)?{

if(resCode?==0)

{

//?iOS10獲取registrationID放到這里了,?可以存到緩存里,?用來(lái)標(biāo)識(shí)用戶單獨(dú)發(fā)送推送

NSLog(@"registrationID獲取成功:%@",registrationID);

[[NSUserDefaultsstandardUserDefaults]setObject:registrationIDforKey:@"registrationID"];

[[NSUserDefaultsstandardUserDefaults]synchronize];

}

else

{

NSLog(@"registrationID獲取失敗蔬将,code:%d",resCode);

}

}];

returnYES;

}

//?---------------------------------------------------------------------------------

-?(void)applicationWillResignActive:(UIApplication*)application?{

}

-?(void)applicationDidEnterBackground:(UIApplication*)application?{

[[UIApplicationsharedApplication]setApplicationIconBadgeNumber:0];

}

-?(void)applicationWillEnterForeground:(UIApplication*)application?{

[applicationsetApplicationIconBadgeNumber:0];

[applicationcancelAllLocalNotifications];

}

-?(void)applicationDidBecomeActive:(UIApplication*)application?{

}

-?(void)applicationWillTerminate:(UIApplication*)application?{

}

//?---------------------------------------------------------------------------------

#pragma?mark?-?注冊(cè)推送回調(diào)獲取?DeviceToken

#pragma?mark?--?成功

-?(void)application:(UIApplication*)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

{

//?注冊(cè)成功

//?極光:?Required?-?注冊(cè)?DeviceToken

[JPUSHServiceregisterDeviceToken:deviceToken];

}

#pragma?mark?--?失敗

-?(void)application:(UIApplication*)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError*)error

{

//?注冊(cè)失敗

NSLog(@"did?Fail?To?Register?For?Remote?Notifications?With?Error:?%@",?error);

}

//?---------------------------------------------------------------------------------

//?這部分是官方demo里面給的,?也沒(méi)實(shí)現(xiàn)什么功能,?放著以備不時(shí)之需

#if?__IPHONE_OS_VERSION_MAX_ALLOWED?>?__IPHONE_7_1

-?(void)application:(UIApplication*)applicationdidRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings

{

}

//?Called?when?your?app?has?been?activated?by?the?user?selecting?an?action?from

//?a?local?notification.

//?A?nil?action?identifier?indicates?the?default?action.

//?You?should?call?the?completion?handler?as?soon?as?you've?finished?handling

//?the?action.

-?(void)application:(UIApplication*)applicationhandleActionWithIdentifier:(NSString*)identifierforLocalNotification:(UILocalNotification*)notificationcompletionHandler:(void(^)())completionHandler

{

}

//?Called?when?your?app?has?been?activated?by?the?user?selecting?an?action?from

//?a?remote?notification.

//?A?nil?action?identifier?indicates?the?default?action.

//?You?should?call?the?completion?handler?as?soon?as?you've?finished?handling

//?the?action.

-?(void)application:(UIApplication*)applicationhandleActionWithIdentifier:(NSString*)identifierforRemoteNotification:(NSDictionary*)userInfocompletionHandler:(void(^)())completionHandler

{

}

#endif

//?---------------------------------------------------------------------------------

-?(void)application:(UIApplication*)applicationdidReceiveLocalNotification:(UILocalNotification*)notification

{

[JPUSHServiceshowLocalNotificationAtFront:notificationidentifierKey:nil];

}

//?---------------------------------------------------------------------------------

#pragma?mark?-?iOS7:?收到推送消息調(diào)用

-?(void)application:(UIApplication*)applicationdidReceiveRemoteNotification:(NSDictionary*)userInfofetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler?{

//?iOS7之后調(diào)用這個(gè)

[JPUSHServicehandleRemoteNotification:userInfo];

NSLog(@"iOS7及以上系統(tǒng)爷速,收到通知");

if([[UIDevicecurrentDevice].systemVersionfloatValue]?<10.0||?application.applicationState>0)

{

//?程序在前臺(tái)或通過(guò)點(diǎn)擊推送進(jìn)來(lái)的會(huì)彈這個(gè)alert

NSString*message?=?[NSStringstringWithFormat:@"iOS7-8-9收到的推送%@",?[userInfo[@"aps"]objectForKey:@"alert"]];

UIAlertView*alert?=?[[UIAlertViewalloc]initWithTitle:@"提示"message:messagedelegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil,nilnil];

[alertshow];

}

completionHandler(UIBackgroundFetchResultNewData);

}

//?---------------------------------------------------------------------------------

#pragma?mark?-?iOS10:?收到推送消息調(diào)用(iOS10是通過(guò)Delegate實(shí)現(xiàn)的回調(diào))

#pragma?mark-?JPUSHRegisterDelegate

#ifdef?NSFoundationVersionNumber_iOS_9_x_Max

//?當(dāng)程序在前臺(tái)時(shí),?收到推送彈出的通知

-?(void)jpushNotificationCenter:(UNUserNotificationCenter*)centerwillPresentNotification:(UNNotification*)notificationwithCompletionHandler:(void(^)(NSInteger))completionHandler?{

NSDictionary*?userInfo?=?notification.request.content.userInfo;

if([notification.request.triggerisKindOfClass:[UNPushNotificationTriggerclass]])

{

[JPUSHServicehandleRemoteNotification:userInfo];

NSString*message?=?[NSStringstringWithFormat:@"will%@",?[userInfo[@"aps"]objectForKey:@"alert"]];

NSLog(@"iOS10程序在前臺(tái)時(shí)收到的推送:?%@",?message);

UIAlertView*alert?=?[[UIAlertViewalloc]initWithTitle:@"提示"message:messagedelegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil,nilnil];

[alertshow];

}

completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);//?需要執(zhí)行這個(gè)方法,選擇是否提醒用戶霞怀,有Badge惫东、Sound、Alert三種類(lèi)型可以設(shè)置

}

//?程序關(guān)閉后,?通過(guò)點(diǎn)擊推送彈出的通知

-?(void)jpushNotificationCenter:(UNUserNotificationCenter*)centerdidReceiveNotificationResponse:(UNNotificationResponse*)responsewithCompletionHandler:(void(^)())completionHandler?{

NSDictionary*?userInfo?=?response.notification.request.content.userInfo;

if([response.notification.request.triggerisKindOfClass:[UNPushNotificationTriggerclass]])

{

[JPUSHServicehandleRemoteNotification:userInfo];

NSString*message?=?[NSStringstringWithFormat:@"did%@",?[userInfo[@"aps"]objectForKey:@"alert"]];

NSLog(@"iOS10程序關(guān)閉后通過(guò)點(diǎn)擊推送進(jìn)入程序彈出的通知:?%@",?message);

UIAlertView*alert?=?[[UIAlertViewalloc]initWithTitle:@"提示"message:messagedelegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil,nilnil];

[alertshow];

}

completionHandler();//?系統(tǒng)要求執(zhí)行這個(gè)方法

}

#endif

@end

注: 極光的AppKey要自己到極光的官網(wǎng)申請(qǐng)哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毙石,一起剝皮案震驚了整個(gè)濱河市廉沮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徐矩,老刑警劉巖滞时,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異滤灯,居然都是意外死亡坪稽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)鳞骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窒百,“玉大人,你說(shuō)我怎么就攤上這事豫尽「萆遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵美旧,是天一觀的道長(zhǎng)渤滞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)陈症,這世上最難降的妖魔是什么蔼水? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮录肯,結(jié)果婚禮上趴腋,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好优炬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布颁井。 她就那樣靜靜地躺著,像睡著了一般蠢护。 火紅的嫁衣襯著肌膚如雪雅宾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天葵硕,我揣著相機(jī)與錄音眉抬,去河邊找鬼。 笑死懈凹,一個(gè)胖子當(dāng)著我的面吹牛蜀变,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播介评,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼库北,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了们陆?” 一聲冷哼從身側(cè)響起寒瓦,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坪仇,沒(méi)想到半個(gè)月后杂腰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烟很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年颈墅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜡镶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雾袱。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖官还,靈堂內(nèi)的尸體忽然破棺而出芹橡,到底是詐尸還是另有隱情,我是刑警寧澤望伦,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布林说,位于F島的核電站,受9級(jí)特大地震影響屯伞,放射性物質(zhì)發(fā)生泄漏腿箩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一劣摇、第九天 我趴在偏房一處隱蔽的房頂上張望珠移。 院中可真熱鬧,春花似錦、人聲如沸钧惧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浓瞪。三九已至懈玻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乾颁,已是汗流浹背涂乌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留英岭,地道東北人骂倘。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像巴席,于是被迫代替她去往敵國(guó)和親历涝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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