2018iOS極光推送完整流程

第一步 先在開發(fā)者賬號創(chuàng)建app id,即創(chuàng)建應用程序ID

詳細步驟:

1蛉谜、登陸?蘋果開發(fā)者網(wǎng)站?進入開發(fā)者賬戶。

從開發(fā)者賬戶頁面左側(cè)入口進入“Certificates, IDs & Profiles” 頁面崇堵。

2型诚、創(chuàng)建 App ID,填寫 App ID 的 Name 和 Bundle ID(? ?注: 此處需要指定具體的 Bundle ID 不要使用通配符)鸳劳。

3狰贯、為 App 開啟 Push Notification 功能。如果是已經(jīng)創(chuàng)建的 App ID 也可以通過設(shè)置開啟 Push Notification 功能赏廓。

4涵紊、填寫好以上屬性后,點擊 “Continue”幔摸,確認 AppId 屬性的正確性摸柄,點擊 “Register”,注冊 AppId 成功既忆。

第二步 配置證書驱负,包括開發(fā)證書和生產(chǎn)證書兩個證書

簡述極光推送證書的基本生成流程,兩者都為導出的p12文件

開發(fā)證書的詳細步驟:

1患雇、開發(fā)證書的生成(注意選擇的Development)跃脊。

開發(fā)證書生成-01

2、點擊continue苛吱,來到選擇App ID界面酪术。

開發(fā)證書生成-02

3、說明讓上傳自己的CSR文件又谋,continue...

開發(fā)證書生成-03

4拼缝、上傳請求生成的CSR文件娱局,continue...

開發(fā)證書生成-04

5、打開系統(tǒng)自帶的 “鑰匙串訪問” 創(chuàng)建 Certificate Signing Request咧七。如下圖操作:

開發(fā)證書生成-05

6衰齐、填寫“用戶郵箱”和“常用名稱” ,并選擇“存儲到磁盤”继阻,證書文件后綴為.certSigningRequest 耻涛。

開發(fā)證書生成-06

7、回到瀏覽器中 CSR 上傳頁面瘟檩,上傳剛剛生成的后綴為 .certSigningRequest 的文件抹缕。

開發(fā)證書生成-07

8、生成證書成功后墨辛,點擊 “Download” 按鈕把證書下載下來卓研,是后綴為 .cer 的文件(第一個為“Download”得到的生產(chǎn)開發(fā)證書,第二個為“Download”得到的開發(fā)證書)睹簇。

開發(fā)證書生成-08

9奏赘、雙擊證書后,會在“KeychainAccess”中打開太惠,選擇左側(cè)“鑰匙串”列表中“登錄”磨淌,以及“種類”列表中“我的證書”,找到剛才下載的證書凿渊,并導出為 .p12 文件梁只。如下圖:

開發(fā)證書生成-09/1
開發(fā)證書生成-09/2

10、最后得到導出的證書(第二個)

開發(fā)證書生成-09/3

生產(chǎn)證書的詳細步驟:

1埃脏、注意這里的選擇方式和開發(fā)證書有略微的區(qū)別搪锣,選擇Production那一項就好 。

生產(chǎn)證書生成-01

2剂癌、以下的步驟略去淤翔,和開發(fā)的一樣,到最后下載一下文件佩谷,得到下面圖的兩個文件旁壮,雙擊在鑰匙串訪問中可見。

生產(chǎn)證書生成-02

3谐檀、生產(chǎn)和開發(fā)cer文件

生產(chǎn)證書生成-03

4抡谐、分別導出的開發(fā)證書和生產(chǎn)證書到桌面上(雙擊證書后,會在“KeychainAccess”中打開桐猬,選擇左側(cè)“鑰匙串”列表中“登錄”麦撵,以及“種類”列表中“我的證書”,找到剛才下載的證書,并導出為 .p12 文件)免胃。如下圖:

生產(chǎn)證書生成-04
生產(chǎn)證書生成-05

第三步?把導出的開發(fā)證書和生產(chǎn)證書分別上傳到極光平臺

1音五、在極光控制臺上,進入你應用的應用設(shè)置中 iOS 的鑒權(quán)方式選擇 “證書”羔沙,上傳剛才導出的 .p12 證書躺涝。極光會在后臺為你的應用進行鑒權(quán)。

上傳到極光平臺-01

第四步 集成極光推送SDK扼雏,配置工程

1坚嗜、導入SDK

選擇1:Cocoapods導入

通過Cocoapods下載地址:

pod 'JPush'

如果需要安裝指定版本則使用以下方式(以3.0.2版本為例):

pod 'JPush', '3.0.2'

選擇2:手動導入

在極光官網(wǎng)下載最新SDK,將SDK包解壓诗充,在Xcode中選擇“Add files to 'Your project name'...”苍蔬,將解壓后的lib子文件夾(包含JPUSHService.h、jpush-ios-x.x.x.a蝴蜓、jcore-ios-x.x.x.a)添加到你的工程目錄中碟绑。

添加Framework、CFNetwork.framework励翼、CoreFoundation.framework蜈敢、CoreTelephony.framework、SystemConfiguration.framework汽抚、CoreGraphics.framework、Foundation.framework伯病、UIKit.framework造烁、Security.framework、libz.tbd (Xcode7以下版本是libz.dylib)午笛、AdSupport.framework (獲取IDFA需要惭蟋;如果不使用IDFA,請不要添加)药磺、UserNotifications.framework (Xcode8及以上)告组、libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)(注意:?

如果集成JPush 3.0.1及以上版本, 且同時集成極光其他SDK(如:JMessage 3.0.0及以上版本) 1. Cocoapods導入癌佩,建議都更新為線上最新版本木缝,來避免Jcore版本不一致導致的沖突。 2. 手動導入围辙,在工程中只需保留一個最新版本的jcore-ios-x.x.x.a靜態(tài)庫文件我碟。)

導入SDK
導入依賴庫

3090071-8c949b2daaa8f044.png

Build Settings

如果你的工程需要支持小于7.0的iOS系統(tǒng),請到Build Settings 關(guān)閉 bitCode 選項姚建,否則將無法正常編譯通過矫俺。

設(shè)置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夾(默認為lib)與工程文件在同一級目錄下,則都設(shè)置為"$(SRCROOT)/{靜態(tài)庫所在文件夾名稱}"即可厘托。

Capabilities

如使用Xcode8及以上環(huán)境開發(fā)友雳,請開啟Application Target的Capabilities->Push Notifications選項,如圖:?

允許Xcode7支持Http傳輸方法

如果您使用的是2.1.9及以上的版本則不需要配置此步驟 如果用的是Xcode7或更新版本铅匹,需要在App項目的plist手動配置下key和值以支持http傳輸:

選擇1:根據(jù)域名配置

在項目的info.plist中添加一個Key:NSAppTransportSecurity沥阱,類型為字典類型。

然后給它添加一個NSExceptionDomains伊群,類型為字典類型考杉;

把需要的支持的域添加給NSExceptionDomains。其中jpush.cn作為Key舰始,類型為字典類型崇棠。

每個域下面需要設(shè)置2個屬性:NSIncludesSubdomains、NSExceptionAllowsInsecureHTTPLoads丸卷。 兩個屬性均為Boolean類型枕稀,值分別為YES、YES谜嫉。

如圖:

選擇2:全局配置

環(huán)境配置

第五步 工程代碼部分

1萎坷、 進入項目的appdelegate里面,首先導入頭文件和遵循代理

import "AppDelegate.h"

import "JPUSHService.h"

ifdef NSFoundationVersionNumber_iOS_9_x_Max

import

@interface AppDelegate ()

2沐兰、? 在didFinishLaunchingWithOptions方法中配置

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

{

[self jpushInitWith:launchOptions];

}

-(void)jpushInitWith:(NSDictionary)launchOptions

{

JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];

entity.types =? ? JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;

[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

//生成idfa 字段

NSString

advertisingId=[SimulateIDFA createSimulateIDFA];

DDLog(@"----ifda----%@",advertisingId);

if (advertisingId) {

[[NSUserDefaults standardUserDefaults] setObject:advertisingId forKey:@"advertisingId"];

}

NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];

[defaultCenter addObserver:self selector:@selector(networkDidLogin:) name:kJPFNetworkDidLoginNotification object:nil];

[JPUSHService setupWithOption:launchOptions appKey:appKey

channel:channel

apsForProduction:isProduction

advertisingIdentifier:advertisingId];

//設(shè)置紅色角標

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

[JPUSHService setBadge:0];

}

3哆档、? 實現(xiàn)通知和協(xié)議方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

//發(fā)送通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"showRedBadge" object:nil userInfo:userInfo];

// Required, iOS 7 Support[JPUSHService handleRemoteNotification:userInfo];? ? completionHandler(UIBackgroundFetchResultNewData);? }? - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {? ? ? DDLog(@"----userinfo---%@----",userInfo);// Required,For systems with less than or equal to iOS6[JPUSHService handleRemoteNotification:userInfo];? }? - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {//OptionalNSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);? ? }? ? - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken? {? ? ? ? [JPUSHService registerDeviceToken:deviceToken];? }#pragma mark- JPUSHRegisterDelegate// iOS 10 Support- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void(^)(NSInteger))completionHandler {// RequiredNSDictionary* userInfo = notification.request.content.userInfo;if([notification.request.trigger isKindOfClass:[UNPushNotificationTriggerclass]])? ? ? ? {? ? ? [JPUSHService handleRemoteNotification:userInfo];? }? ? completionHandler(UNNotificationPresentationOptionAlert);// 需要執(zhí)行這個方法,選擇是否提醒用戶住闯,有Badge瓜浸、Sound、Alert三種類型可以選擇設(shè)置}// iOS 10 Support- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler {// RequiredNSDictionary* userInfo = response.notification.request.content.userInfo;if([response.notification.request.trigger isKindOfClass:? [UNPushNotificationTriggerclass]]) {? ? [JPUSHService handleRemoteNotification:userInfo];? ? }? ? completionHandler();// 系統(tǒng)要求執(zhí)行這個方法}

4比原、pragma mark? 通知

- (void)networkDidReceiveMessage:(NSNotification*)notification {NSDictionary* userInfo = [notification userInfo];// NSString *content = [userInfo valueForKey:@"content"];// NSDictionary *extras = [userInfo valueForKey:@"extras"];// NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服務端傳遞的Extras附加字段插佛,key是自己定義的DDLog(@"----userInfo---%@",userInfo);//發(fā)送通知[[NSNotificationCenterdefaultCenter] postNotificationName:@"showRedBadge"object:niluserInfo:userInfo];} - (void)networkDidLogin:(NSNotification*)notification? {NSLog(@"已登錄");if([JPUSHService registrationID]) {//下面是我拿到registeID,發(fā)送給服務器的代碼,可以根據(jù)你需求來處理NSString*registerid = [JPUSHService registrationID];NSLog(@"APPDelegate開始上傳rgeisterID---%@",registerid);if(registerid)? ? {? ? ? [[NSUserDefaultsstandardUserDefaults] setObject:registerid forKey:@"registerid"];? ? }? ? ? ? ? }? }

第六步 推送測試


推送測試

相關(guān)文檔可點擊以下鏈接:

1量窘、https://blog.csdn.net/zhanglizhi111/article/details/79507549

2雇寇、https://blog.csdn.net/lqq200912408/article/details/54376208

3、https://blog.csdn.net/cc1991_/article/details/78782946

[iOS真機測試流程(完整版)](http://www.reibang.com/p/ae7110f2f7d9)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚌铜,一起剝皮案震驚了整個濱河市锨侯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厘线,老刑警劉巖识腿,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異造壮,居然都是意外死亡渡讼,警方通過查閱死者的電腦和手機骂束,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來成箫,“玉大人展箱,你說我怎么就攤上這事〉挪” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵皂贩,是天一觀的道長栖榨。 經(jīng)常有香客問我,道長鞍陨,這世上最難降的妖魔是什么幼驶? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任谍失,我火速辦了婚禮,結(jié)果婚禮上止潮,老公的妹妹穿的比我還像新娘窃判。我一直安慰自己,他們只是感情好沽翔,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布兢孝。 她就那樣靜靜地躺著,像睡著了一般仅偎。 火紅的嫁衣襯著肌膚如雪跨蟹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天橘沥,我揣著相機與錄音窗轩,去河邊找鬼。 笑死座咆,一個胖子當著我的面吹牛痢艺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播介陶,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼堤舒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哺呜?” 一聲冷哼從身側(cè)響起舌缤,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎某残,沒想到半個月后国撵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡玻墅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年介牙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澳厢。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡环础,死狀恐怖囚似,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喳整,我是刑警寧澤谆构,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站框都,受9級特大地震影響搬素,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魏保,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一熬尺、第九天 我趴在偏房一處隱蔽的房頂上張望愁溜。 院中可真熱鬧矾利,春花似錦甘耿、人聲如沸浩姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胆数。三九已至完慧,卻和暖如春刻蚯,著一層夾襖步出監(jiān)牢的瞬間绊含,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工炊汹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躬充,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓讨便,卻偏偏與公主長得像充甚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霸褒,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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