昨天花了一下午的時間研究了下極光推送,也前也是沒做過,不知道從何下手!才開始的時候一看官方的SDK感覺好難,不過經過一系列的搗鼓之後,手機收到了推送信息,感覺其實並沒有那麼難! 1.配置開發證書(得有開發者賬號,個人,企業的都可以) 開發環境測試 在對 JPush iOS 開發環境進行測試前,請確保
昨天花了一下午的時間研究了下極光推送,也前也是沒做過,不知道從何下手!才開始的時候一看官方的SDK感覺好難,不過經過一系列的搗鼓之後,手機收到了推送信息,感覺其實並沒有那麼難!
1.配置開發證書(得有開發者賬號,個人,企業的都可以)
開發環境測試
在對 JPush iOS 開發環境進行測試前,請確保 3 個統一:
- App 是開發環境打包(開發證書 Development)
- 上傳了開發證書並驗證通過
- Portal 上的應用設置為開發環境
發佈環境測試
在對 JPush iOS 生產環境進行測試前,請確保 3 個統一:
- App 是 ad-hoc 打包或者App Store 版本(發佈證書 Production)
- 上傳了發佈證書並驗證通過
- Portal 上的應用設置為生產環境
iOS 證書 設置指南
創建應用程式ID
- 登陸 iOS Dev Center 選擇進入iOS Provisioning Portal。
- 在 iOS Provisioning Portal中,點擊App IDs進入App ID列表。
- 創建 App ID,如果 ID 已經存在可以直接跳過此步驟
- 為 App 開啟 Push Notification 功能。如果是已經創建的 App ID 也可以通過設置開啟 Push Notification 功能。
根據實際情況完善 App ID 信息並提交,註意此處需要指定具體的 Bundle ID 不要使用通配符。
配置和下載證書
- 如果你之前沒有創建過 Push 證書或者是要重新創建一個新的,請在證書列表下麵新建。
- 新建證書需要註意選擇證書種類(開發證書用於開發和調試使用,生產證書用於 App Store 發佈)
- 點擊 Continue 後選擇證書對應的應用ID,然後繼續會出現“About Creating a Certificate Signing Request (CSR)”。
- 根據它的說明創建打開KeychainAccess 創建 Certificate Signing Request。
- 填寫“User Email Address”和“Common Name” 後選擇 Saved to disk 進行保存 。
- 繼續返回Apple developer 網站點擊 Continue ,上傳剛剛生成的 .certSigningRequest 文件生成 APNs Push Certificate。
- 下載並雙擊打開證書,證書打開時會啟動“鑰匙串訪問”工具。
- 在“鑰匙串訪問”中你的證書會顯示在“我的證書”中,註意選擇“My Certificates” 和"login"
導出 .p12 證書文件
註意要選“login”和“My Certificates” 導出證書時要選中證書文件,不要展開private key。
- 將文件保存為Personal Information Exchange (.p12)格式。
- 將文件保存為Personal Information Exchange (.p12)格式。
上傳證書
在 JPush 管理 Portal 上,針對某應用程式,上傳上面步驟得到 .p12 證書文件。這是 iOS SDK 能夠接收到 JPush 推送消息的必要步驟。
Provisioning Profile的創建
- 創建Provisioning Profile的前提,已在Apple Developer網站創建待發佈應用所使用的Bundle ID的App ID,且為該App ID創建了APNs證書,如下圖:
-
創建App ID、APN證書和p12證書的導出的具體步驟請看 :iOS 證書 設置指南
-
在蘋果開發者賬號的Provisioning Profile頁面點擊下圖按鈕,創建Provisioning Profile
- 選擇此Provisioning Profile的環境後點擊[Continue]:
- 選擇要創建Provisioning Profile的App ID後點擊[Continue]:
- 選擇所屬的開發者證書,(這裡創建了多個開發者證書,建議只創建一個,方便管理)為了方便,選擇了[Select All],再點擊[Continue]進入下一步:
- 為該Provisioning Profile選擇將要安裝的設備(一般選擇[Select All]),點擊[Continue]:
- 給該Provisioning Profile填寫Profile Name,點擊[generate]完成創建。
- 填寫完Profile Name後點擊[generate]完成創建,之後點擊[DownLoad]下載Provisioning Profile
- 雙擊下載下來的Provisioning Profile,添加到xcode。
2. Xcode的證書配置教程
參照iOS SDK 集成指南集成JPush SDK 和上傳了推送用到的p12證書後在編譯運行前需要先配置一下證書,步驟如下:
- 打開xxx-info.plist的Bundle identifier項把上傳到JPush 控制台的bundle id填寫進去:
- 點擊項目,選擇目標TARGETS後進入Build Setting 界面,搜索“Code signing”,按照下圖配置
客戶端設置
開啟Remote notifications
需要在Xcode 中修改應用的 Capabilities 開啟Remote notifications,請參考下圖:
3.SDK集成步驟
集成壓縮包內容
包名為JPush-iOS-SDK-{版本號}
- lib文件夾:包含頭文件 JPUSHService.h,靜態庫文件jpush-ios-x.x.x.a ,支持的iOS版本為 5.0 及以上版本。(請註意:模擬器不支持APNs)
- pdf文件:集成指南
- demo文件夾:示例
開發環境
- 使用Xcode 6及以上版本可以使用新版Push SDK,XCode 5環境下需要運行舊版本SDK(1.7.4)
1、在JPush Portal上創建應用
- 在 JPush的管理Portal 上創建應用並上傳APNs證書。如果對APNs證書不太瞭解 請參考: iOS 證書設置指南
- 創建成功後自動生成 AppKey 用以標識該應用。
2、導入API開發包到應用程式項目
- 將SDK包解壓,在XCode中選擇“Add files to 'Your project name'...”,將解壓後的lib子文件夾(包含JPUSHService.h、jpush-ios-x.x.x.a)添加到你的工程目錄中。
3、必要的框架
- CFNetwork.framework
- CoreFoundation.framework
- CoreTelephony.framework
- SystemConfiguration.framework
- CoreGraphics.framework
- Foundation.framework
- UIKit.framework
- Security.framework
- Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib
4、Build Settings
如果你的工程需要支持小於7.0的iOS系統,請到Build Settings 關閉 bitCode 選項,否則將無法正常編譯通過。
- 設置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夾(預設為lib)與工程文件在同一級目錄下,則都設置為"$(SRCROOT)/{靜態庫所在文件夾名稱}"即可。
5、創建並配置PushConfig.plist文件
2.1.0 版本開始,新增了帶參數的setupWithOption初始化方法,可通過此方法等參數傳入AppKey等信息。1.8.8及之前版本的 JPush SDK只能通過PushConfig.plist配置AppKey等信息。
在你的工程中創建一個新的Property List文件,並將其命名為PushConfig.plist,文件所含欄位如下:
- CHANNEL
- 指明應用程式包的下載渠道,為方便分渠道統計,具體值由你自行定義,如:App Store。
- APP_KEY
- 填寫管理Portal上創建應用後自動生成的AppKey值。請確保應用內配置的 AppKey 與第1步在 Portal 上創建應用後生成的 AppKey 一致。
- APS_FOR_PRODUCTION
- 1.3.1版本新增,用於標識當前應用所使用的APNs證書環境。
- 0 (預設值)表示採用的是開發證書,1 表示採用生產證書發佈應用。
- 註:此欄位的值要與Build Settings的Code Signing配置的證書環境一致。
- 在1.2.2或之前版本的配置文件中,有 TEST_MODE 這個鍵,新版的SDK不再使用,可以將它刪除。
PushConfig.plist文件示例圖:
6、添加代碼
2.1.0版本開始,API類名為JPUSHService,不再使用原先的APService。
允許XCode7支持Http傳輸方法
如果用的是Xcode7時,需要在App項目的plist手動加入以下key和值以支持http傳輸:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
集成所需API
APIs 主要集中在 JPUSHService 介面類里。
-
初始化JPush方法分為兩個:
- 1.8.8及以下版本使用的是已過期的初始化方法。升級到2.1.0的老用戶仍可繼續使用舊的初始化方法。
- 2.1.0版本開始提供帶appkey等參數的新初始化方法。使用此方法無需再添加PushConfig.plist配置JPush的AppKey等欄位。
4.項目代碼:
AppDelegate.h裡面的代碼:
#import<UIKit/UIKit.h>
staticNSString *appKey = @"4fd48a0712a3fde75eb1c7423";//申請應用成功以後官方會提供給你
staticNSString *channel = @"Publish channel";
staticBOOL isProduction = FALSE;
@interface AppDelegate :UIResponder <UIApplicationDelegate>
@property (strong,nonatomic) UIWindow *window;
@end
#import"AppDelegate.m"中的代碼
#import "AppDelegate.h"
#import "JPUSHService.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window.backgroundColor = [UIColorwhiteColor];
[self.windowmakeKeyAndVisible];
if ([[UIDevicecurrentDevice].systemVersionfloatValue] >= 8.0) {
//可以添加自定義categories
[JPUSHServiceregisterForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
//categories 必須為nil
[JPUSHServiceregisterForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}
[JPUSHServicesetupWithOption:launchOptions appKey:appKey
channel:channelapsForProduction:NO];
returnYES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Required
[JPUSHServiceregisterDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// Required,For systems with less than or equal to iOS6
[JPUSHServicehandleRemoteNotification:userInfo];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// IOS 7 Support Required
[JPUSHServicehandleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end
4.真機測試:
登陸到極光推送官網: 點擊控制台:
選擇應用,也就是你創建測試的項目:我的項目是aa.TestPush
選中以後點擊進入到下麵這裡:
點擊上面的推送:
點擊左邊的發送通知,也可以選擇自定義消息(這裡我選擇的發送通知):
這裡我隨便寫點什麼用我手機測試:
點擊立即發送:
手機上的顯示: