· 应用开发者不需要去开发维护自己的推送服务器与APN的对接。
· 集成了JPush的iOS SDK后不必自己维护更新设备令牌。
· 通过JPush的门户网站直接推送,也可以调用JPush的HTTP协议的API来完成,开发工作量大大减少。
2.减少运营成本:
· 极光推送支持一次推送,同时向安卓,iOS的,WinPhone三个平台。支持统一的API与推送界面。
· 极光推送提供标签、别名绑定机制,以及提供了非常细分的用户分群方式,运营起来非常简单、直观。
3. 提供应用内推送:
· 除了使得的APN推送更简单,也另外提供应用内消息推送。这在类似于聊天的场景里很有必要。
Certificates, Identifiers & Profiles
Certificates, Identifiers & Profiles中,点击App IDs进入App ID列表
为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。
如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。
填写“User Email Address”和“Common Name” 后选择 Saved to disk 进行保存
导出 .p12 证书文件
导出.p12文件以供上传到极光后台。
创建开发者证书以及发布证书在这里我就不多做介绍了,和上面的传入极光后台证书的制作过程类似,以下讲解的主要是制作与证书对应的配置文件
选择要创建Provisioning Profile的App ID后点击[Continue]:
选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了[Select All],再点击[Continue]进入下一步:
为该Provisioning Profile选择将要安装的设备(一般选择[Select All]),点击[Continue]:
给该Provisioning Profile填写Profile Name,点击[generate]完成创建。
点击[DownLoad]下载Provisioning Profile,并双击配置文件即可。
点击项目,进入Build Setting 界面,向下滑动,去到Code Signing 配置证书:
创建成功后自动生成 AppKey 用以标识该应用。
导入API开发包到应用程序项目
将SDK包解压,在XCode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含APService.h、libPushSDK.a)添加到你的工程目录中。
必要的框架
Build Settings
创建并配置PushConfig.plist文件
在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,填入Portal为你的应用提供的APP_KEY等参数。
{ "APS_FOR_PRODUCTION" = "0"; "CHANNEL" = "Publish channel"; "APP_KEY" = "AppKey copied from JPush Portal application"; }
添加代码:
API
APIs 主要集中在 APService 接口类里。
#pragma - mark 基本功能 // 以下四个接口是必须调用的 + (void)setupWithOption:(NSDictionary *)launchingOption; // 初始化 + (void)registerForRemoteNotificationTypes:(NSUInteger)types categories:(NSSet *)categories; // 注册APNS类型 + (void)registerDeviceToken:(NSData *)deviceToken; // 向服务器上报Device Token + (void)handleRemoteNotification:(NSDictionary *) remoteInfo; // 处理收到的APNS消息,向服务器上报收到APNS消息
调用代码
监听系统事件,相应地调用 JPush SDK 提供的 API 来实现功能。
以下 3 个事件监听与调用 JPush SDK API 都是必须的。请直接复制如下代码块里,注释为 "Required" 的行,到你的应用程序代理类里相应的监听方法里。
#pragma mark - 第一步:初始化Jpush -(void)initJPushWithFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //第一步 Required [APService setupWithOption:launchOptions]; } #pragma mark - 第二步:注册推送通知 -(void)registerJPush { // Required if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //可以添加自定义categories [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else { //categories 必须为nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; } } #pragma mark - 第三步:把苹果服务器返回回来的token,交给jPush,换取RegisterId - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // Required [APService registerDeviceToken:deviceToken]; } #pragma mark - 第四步:处理收到的推送信息 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required [APService handleRemoteNotification:userInfo]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // IOS 7 Support Required [APService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); }
监听通知
API里面提供了下面 5 种类型的通知:
extern NSString * const kJPFNetworkDidSetupNotification; // 建立连接
extern NSString * const kJPFNetworkDidCloseNotification; // 关闭连接
extern NSString * const kJPFNetworkDidRegisterNotification; // 注册成功
extern NSString * const kJPFNetworkDidLoginNotification; // 登录成功
extern NSString * const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS)
其中,kJPFNetworkDidReceiveMessageNotification通知是有传递数据的,可以通过NSNotification中的userInfo方法获取,包括标题、内容、内容类型、扩展信息等
OK,集成极光推送的步骤就这么多了,是不是很easy,哈哈,大家努力集成吧。
//获取registerID [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(getRegisterIdFromJPush:) name:kJPFNetworkDidLoginNotification object:nil]; //根据registerid获取推送的相关内容 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(registerIdPushSuccess:) name:kJPFNetworkDidReceiveMessageNotification object:nil]; //极光推送应用内推送 #pragma mark - 获取registerId -(void)getRegisterIdFromJPush:(NSNotification *)notification { NSString * registerId = [APService registrationID]; NSLog(@"registerId = %@",registerId); } #pragma mark - 根据registerId进行推送看是否推送成功 - (void)registerIdPushSuccess:(NSNotification *)notification { NSLog(@"%@",[notification userInfo]); }