本文匹配的 SDK版本:r2.1.5 之後。
查看最近更新瞭解最新的SDK更新狀況。
使用Xcode 6及以上版本可使用新版Push SDK,Xcode 5環境下須要運行舊版本SDK(1.7.4)ios
包名爲JPush-iOS-SDK-{版本號}api
選擇1:Cocoapods導入xcode
pod 'JPush'
pod 'JPush', '3.0.2'
選擇2:手動導入app
注意: 若是集成JPush 3.0.1及以上版本, 且同時集成極光其餘SDK(如:JMessage 3.0.0及以上版本)
1. Cocoapods導入,建議都更新爲線上最新版本,來避免Jcore版本不一致致使的衝突。
2. 手動導入,在工程中只需保留一個最新版本的jcore-ios-x.x.x.a靜態庫文件。less
若是你的工程須要支持小於7.0的iOS系統,請到Build Settings 關閉 bitCode 選項,不然將沒法正常編譯經過。dom
如使用Xcode8及以上環境開發,請開啓Application Target的Capabilities->Push Notifications選項,如圖:
ide
若是您使用的是2.1.9及以上的版本則不須要配置此步驟
若是用的是Xcode7或更新版本,須要在App項目的plist手動配置下key和值以支持http傳輸:fetch
選擇1:根據域名配置ui
如圖:debug
選擇2:全局配置
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
請將如下代碼添加到 AppDelegate.m 引用頭文件的位置。
// 引入JPush功能所需頭文件 #import "JPUSHService.h" // iOS10註冊APNs所需頭文件 #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif // 若是須要使用idfa功能所須要引入的頭文件(可選) #import <AdSupport/AdSupport.h>
爲AppDelegate添加Delegate。
參考代碼:
@interface AppDelegate ()<JPUSHRegisterDelegate> @end
2.1.0版本開始,API類名爲JPUSHService,再也不使用原先的APService。
請將如下代碼添加到
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//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];
請將如下代碼添加到
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(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:channel apsForProduction:isProduction advertisingIdentifier:advertisingId];
請在AppDelegate.m實現該回調方法並添加回調方法中的代碼
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { /// Required - 註冊 DeviceToken [JPUSHService registerDeviceToken:deviceToken]; }
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { //Optional NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); }
請在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]; }
如需使用JPush的自定義消息功能,請參考文檔來實現自定義消息的處理回調方法。
真機調試該項目,若是控制檯輸出如下日誌則表明您已經集成成功。
2016-08-19 17:12:12.745823 219b28[1443:286814] | JPUSH | I - [JPUSHLogin] ----- login result ----- uid:5460310207 registrationID:171976fa8a8620a14a4
若是調試運行中遇到問題請參考:iOS SDK 調試指南
r2.1.5版本增長一個上傳IDFA字符串的接口
+ (void)setupWithOption:(NSDictionary *)launchingOption appKey:(NSString *)appKey channel:(NSString *)channel apsForProduction:(BOOL)isProduction advertisingIdentifier:(NSString *)advertisingId;
若是不使用IDFA,仍可以使用接口
+ (void)setupWithOption:(NSDictionary *)launchingOption appKey:(NSString *)appKey channel:(NSString *)channel apsForProduction:(BOOL)isProduction;
建議開發者加上API裏面提供的如下類型的通知:
extern NSString *const kJPFNetworkIsConnectingNotification; // 正在鏈接中
extern NSString * const kJPFNetworkDidSetupNotification; // 創建鏈接
extern NSString * const kJPFNetworkDidCloseNotification; // 關閉鏈接
extern NSString * const kJPFNetworkDidRegisterNotification; // 註冊成功
extern NSString *const kJPFNetworkFailedRegisterNotification; //註冊失敗
extern NSString * const kJPFNetworkDidLoginNotification; // 登陸成功
舒適提示:
Registration id 須要添加註冊kJPFNetworkDidLoginNotification通知的方法裏獲取,也能夠調用[registrationIDCompletionHandler:]方法,經過completionHandler獲取
extern NSString * const kJPFNetworkDidReceiveMessageNotification; // 收到自定義消息(非APNs)
其中,kJPFNetworkDidReceiveMessageNotification傳遞的數據能夠經過NSNotification中的userInfo方法獲取,包括標題、內容、extras信息等