快速集成極光推送

** Tips:** 不同版本極光推送SDK集成各有差異,各位童鞋在集成時一定要注意版本號,本人集成的是基于 極光SDK JPush SDK-3.0.1的版本.

注意:極光推送的遠程推送是免費的,但相應的用戶統計,終端統計等功能是不免費。如果你需要用戶統計,終端統計這些功能意味著需要付費才能使用。

先祭出極光SDK(內附極光官方Demo)

參考鏈接

極光推送官方文檔
開發證書配置
APNs 推送原理及問題
iOS 推送全解析,你不可不知的所有 Tips!

集成步驟

1.遠程推送原理
2.[Xcode8創建項目,配置自動創建App ID/證書/配置文件](#Xcode8創建項目,配置自動創建App ID/證書/配置文件)
3.[創建APNs 推送證書](#創建APNs 推送證書)
4.[在極光推送后臺創建應用,并上傳APNs 推送證書](#在極光推送后臺創建應用,并上傳APNs 推送證書)
5.項目中集成極光推送SDK
6.成功運行
7.極光推送后臺發送遠程推送測試

<a id = 遠程推送原理></a> 1.遠程推送原理

當iOS設備聯網的情況下,蘋果服務器和iOS設備建立了一個長鏈接,即便應用處于掛起和后臺的狀態,蘋果可以給iOS設備中的應用發送通知。

遠程推送原理
遠程推送原理

注:
1.iOS:iOS設備
2.APNS Server:蘋果服務器
3.Your App: 自己的應用
4.Your Server:自己的服務器

1.1 推送流程

  • iOS 應用注冊推送通知,iOS設備將設備的UDID和應用的Bundle ID到蘋果服務器。
  • 蘋果服務器將接收到的UDID和Bundle ID加密生成一個deviceToken,并返回給對應iOS應用。
  • iOS應用將接收到的deviceToken發送到自己的服務器,服務器并保存。
  • 自己的服務器需配置APNs 推送證書,當需要推送時,去后臺查詢推送目標設備的deviceToken,將消息和deviceToken一起發送給蘋果服務器。
  • 蘋果服務器通過deviceToken找到對應設備下的對應應用,推送消息。
注意:

1.我們的應用真機測試需要創建對應App ID/證書/配置文件, 這步可以用Xcode8 自動創建,而不需要到蘋果開發者平臺去創建。如果不是Xcode8,則需要去開發者平臺申請,并且在Xcode配置,保證真機測試即可。
2.我們自己的服務器需要配置 APNs 推送證書,同樣的分為開發證書和生產證書。需要到蘋果開發者平臺去申請。
3.如果不借助第三方推送平臺,我們需要完成推送流程中的1,3,4步。借助極光推送,那么我們只需要完成推送流程中的1,3步,但同樣需要我們申請APNs 推送證書,并且上傳到極光推送平臺。

<a id = "Xcode8創建項目,配置自動創建App ID/證書/配置文件"></a>2. Xcode8配置自動創建App ID/證書/配置文件

2.1 在Xcode8下,確保已經登錄付費蘋果開發者帳號。請開啟Application Target的Capabilities->Push Notifications選項。

開啟遠程推送
開啟遠程推送

2.2 *勾選自動管理App ID/證書/配置文件 *


勾選自動管理
勾選自動管理

2.3 檢查Xcode生產的App ID/證書/配置文件這步配置好了就可以真機運行了。

檢查Xcode生產的App ID/證書/配置文件
檢查Xcode生產的App ID/證書/配置文件

<a id = "創建APNs 推送證書"></a>3. 創建APNs 推送證書

3.1 登錄開發者網站,并點擊按鈕創建證書

創建推送證書
創建推送證書

3.2 選擇開發環境APNs 推送證書點擊右下角按鈕創建

創建開發環境APNs 推送證書
創建開發環境APNs 推送證書

3.3 選擇工程的App ID

選擇工程的App ID
選擇工程的App ID

3.4 上傳證書請求文件,不知道的童鞋可參照開發證書配置

上傳證書請求文件
上傳證書請求文件

附: 3.4.1 請求文件的創建流程


從證書頒發機構請求證書
從證書頒發機構請求證書

存儲到磁盤
存儲到磁盤

存儲
存儲

請求文件
請求文件

3.5 點擊下載證書,并雙擊安裝到鑰匙串.

安裝APNs 推送證書
安裝APNs 推送證書

3.6 打開鑰匙串,并參照下圖指示,找到對應的APNs 推送證書,并選擇右鍵導出.

鑰匙串導出證書
鑰匙串導出證書

3.7 設置證書名字,并選擇證書存放位置。

設置證書名字
設置證書名字

3.8.設置證書密碼,可不填。極光推送支持證書設置密碼,但像leanCloud
推送不支持證書設置密碼,各位童鞋可按照實際情況來。最后輸入電腦開機密碼,導出證書。

設置證書密碼
設置證書密碼

輸入電腦開機密碼導出證書
輸入電腦開機密碼導出證書

<a id = "在極光推送后臺創建應用,并上傳APNs 推送證書"></a> 4.在極光推送后臺創建應用,并上傳APNs 推送證書

4.1 登錄極光推送平臺,切換到控制臺,并創建應用。接下來在應用信息中上傳開發APNs 推送證書。生產環境APNs 推送證書配置類似,不做贅述.

上傳`APNs推送證書
上傳`APNs推送證書

4.2 核對應用的Bundle ID 等信息是否正確.

核對應用信息
核對應用信息

<a id = "項目中集成極光推送SDK"></a> 5. 項目中集成極光推送SDK

5.1 添加頭文件
請將以下代碼添加到 AppDelegate.m 引用頭文件的位置。

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

5.2 添加Delegate
為AppDelegate添加Delegate。
參考代碼:

@interface AppDelegate ()<JPUSHRegisterDelegate>

@end

5.3 添加初始化代碼

配置 key
static NSString *appKey = @"c3d* **** **** **** **** ***8";
//static NSString *channel = @" ";
static BOOL isProduction = FALSE;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [self setup_APNs];
    [self setup_JpushdidFinishLaunchingWithOptions:launchOptions];
    
    return YES;
}

5.3.1 添加初始化APNs代碼

//添加初始化APNs代碼
- (void)setup_APNs{
    //Required
    //notice: 3.0.0及以后版本注冊可以這樣寫,也可以繼續用之前的注冊方式
    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];
}

5.3.2 添加初始化JPush代碼

//添加初始化JPush代碼
- (void)setup_JpushdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Optional
    // 獲取IDFA
    // 如需使用IDFA功能請添加此代碼并在初始化方法的advertisingIdentifier參數中填寫對應值
    NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    
    // Required
    // init Push
    // notice: 2.1.5版本的SDK新增的注冊方法,改成可上報IDFA,如果沒有使用IDFA直接傳nil
    // 如需繼續使用pushConfig.plist文件聲明appKey等配置內容,請依舊使用[JPUSHService setupWithOption:launchOptions]方式初始化。
    [JPUSHService setupWithOption:launchOptions appKey:appKey
                          channel:nil
                 apsForProduction:isProduction
            advertisingIdentifier:advertisingId];
    
}
  • 部分參數說明:

1.appKey填寫管理Portal上創建應用后自動生成的AppKey值。請確保應用內配置的AppKeyPortal 上創建應用后生成的AppKey一致。
2.channel指明應用程序包的下載渠道,為方便分渠道統計,具體值由你自行定義,如:App Store
3.apsForProduction1.3.1版本新增,用于標識當前應用所使用的APNs證書環境。
0 (默認值)表示采用的是開發證書,1 表示采用生產證書發布應用。
注:此字段的值要與Build Settings的Code Signing配置的證書環境一致。
advertisingIdentifier詳見關于IDFA

5.3.3 注冊APNs成功并上報DeviceToken

- (void)application:(UIApplication *)application 
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

  /// Required - 注冊 DeviceToken
  [JPUSHService registerDeviceToken:deviceToken];
}

5.3.4 實現注冊APNs失敗接口(可選)

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

5.3.5 添加處理APNs通知回調方法
請在AppDelegate.m實現該回調方法并添加回調方法中的代碼

#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); // 需要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型可以選擇設置
}

// 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();  // 系統要求執行這個方法
}

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

  // Required, iOS 7 Support
  [JPUSHService handleRemoteNotification:userInfo];
  completionHandler(UIBackgroundFetchResultNewData);
}

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

  // Required,For systems with less than or equal to iOS6
  [JPUSHService handleRemoteNotification:userInfo];
}

<a id = "成功運行"></a> 6 成功運行

真機調試該項目,如果控制臺輸出以下日志則代表您已經集成成功。

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

如果調試運行中遇到問題請參考:iOS SDK 調試指南

<a id = "極光推送后臺發送遠程推送測試"></a>7.極光推送后臺發送遠程推送測試

7.1 登錄極光推送,切換到控制臺,并點擊對應的應用,點擊推送按鈕,設置推送內容,并發送通知

點擊推送按鈕,設置推送內容并發送通知
點擊推送按鈕,設置推送內容并發送通知

7.2 選擇推送環境iOS開發環境,目標人群,發送時間。再點擊可選設置設置消息的具體內容。

設置推送目標
設置推送目標

7.3 設置消息具體內容。遠程推送分為普通推送/后臺推送/靜默推送3種類型,并且類型由推送消息設置來決定。關于如何設置請參考iOS 推送全解析,你不可不知的所有 Tips!

設置消息具體內容
設置消息具體內容

7.4 iOS設備接收到遠程推送

iOS設備接收到遠程推送
iOS設備接收到遠程推送

7.5 推送歷史可以在這里看得到,但有延遲,可能遠程推送已接收到,推送歷史數據還沒有更新到最新。

推送歷史
推送歷史

Xcode8下集成極光遠程推送的簡單介紹,到這里就結束了。
祭出自己的JPushDemo

另外我想說,如果學習不是為了裝逼,那將毫無意義!

另外.....

我的愿望是.......

世界和平.........

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容