JPush的集成步骤及相关原理

Posted Dream-seekerGirl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPush的集成步骤及相关原理相关的知识,希望对你有一定的参考价值。

第三方推送:极光推送的集成

苹果官方的APNS推送,想必大家并不陌生,它有一些不足之处就是:到达率低,推送效率慢,开发维护运营比较高;对于它的这些不足之处,才产生了受大家欢迎的第三方推送:极光推送;极光推送和苹果官方推送相比有如下几点好处:

1. 减少开发及维护成本:

· 应用开发者不需要去开发维护自己的推送服务器与APN的对接。

· 集成了JPushios SDK后不必自己维护更新设备令牌。

· 通过JPush的门户网站直接推送,也可以调用JPushHTTP协议的API来完成,开发工作量大大减少。

2.减少运营成本:

· 极光推送支持一次推送,同时向安卓,iOS的,WinPhone三个平台。支持统一的API与推送界面。

· 极光推送提供标签、别名绑定机制,以及提供了非常细分的用户分群方式,运营起来非常简单、直观。

3. 提供应用内推送:

· 除了使得的APN推送更简单,也另外提供应用内消息推送。这在类似于聊天的场景里很有必要。

因此,极光推送也受各大企业欢迎和使用,接下来我们就来看一下,极光推送的步骤,以及应用内推送的一些简单操作。


以下是极光推送的集成步骤:

第一步:创建应用程序ID

登陆iOS Dev Center选择进入

Certificates, Identifiers & Profiles




Certificates, Identifiers & Profiles中,点击App IDs进入App ID列表


创建 App ID,如果 ID 已经存在可以直接跳过此步骤


为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。


根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。



第二步:配置和下载证书(以供传到Jpush后台的push证书)

如果你之前没有创建过 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 证书文件



导出.p12文件以供上传到极光后台。


第三步:上传证书

Jpush后台管理针对某应用程序,上传上面步骤得到 .p12 证书文件。这是 iOS SDK 能够接收到 JPush 推送消息的必要步骤。

第四步:创建与Xcode中安装的证书以及对应的配置文件(Provisioning Profile)

  • 假设创建了一个App ID:cn.jpush.examlpe,并为此App ID配置开发环境的Push Notifications:


创建开发者证书以及发布证书在这里我就不多做介绍了,和上面的传入极光后台证书的制作过程类似,以下讲解的主要是制作与证书对应的配置文件


选择要创建Provisioning Profile的App ID后点击[Continue]:


选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了[Select All],再点击[Continue]进入下一步:


为该Provisioning Profile选择将要安装的设备(一般选择[Select All]),点击[Continue]:


给该Provisioning Profile填写Profile Name,点击[generate]完成创建。


点击[DownLoad]下载Provisioning Profile,并双击配置文件即可。

第四步:Xcode的证书配置过程

打开xxx-info.plist的Bundle identifier项把上传到JPush 控制台的bundle id填写进去:



Xcode7.2还需要改一个地方:

点击项目,进入Build Setting 界面,向下滑动,去到Code Signing 配置证书:


第五步:客户端设置开启Remote notifications

需要在Xcode 中修改应用的 Capabilities 开启Remote notifications,请参考下图:


第六步:集成极光推送的SDK

创建成功后自动生成 AppKey 用以标识该应用。


导入API开发包到应用程序项目

将SDK包解压,在XCode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含APService.h、libPushSDK.a)添加到你的工程目录中。

必要的框架

  • CFNetwork.framework
  • CoreFoundation.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • CoreGraphics.framework
  • Foundation.framework
  • UIKit.framework
  • Security.framework
  • Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

Build Settings

  • 设置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夹(默认为lib)与工程文件在同一级目录下,则都设置为"$(SRCROOT)/[文件夹名称]"即可。

创建并配置PushConfig.plist文件

在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,填入Portal为你的应用提供的APP_KEY等参数。


 "APS_FOR_PRODUCTION" = "0";
 "CHANNEL" = "Publish channel";
 "APP_KEY" = "AppKey copied from JPush Portal application";

  • CHANNEL
    • 指明应用程序包的下载渠道,为方便分渠道统计。根据你的需求自行定义即可。
  • APP_KEY
    • 在管理Portal上创建应用时自动生成的(AppKey)用以标识该应用。请确保应用内配置的 AppKey 与第1步在 Portal 上创建应用时生成的 AppKey 一致,AppKey 可以在应用详情中查询。


添加代码:

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进行定点推送,以及用户关机时,保留多久推送时间等等
应用内推送需要注册通知:
//获取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]);


OK,极光推送,应用内推送基本介绍完毕,具体需要要根据项目而定哦!

以上是关于JPush的集成步骤及相关原理的主要内容,如果未能解决你的问题,请参考以下文章

:集成JPUSH

用 jpush-react-native 插件快速集成推送功能(Android 篇)

Hybrid app开发之Ionic+Cordova+Angular 系列篇——IOS端Jpush集成

极光推送 JPush 简介 集成

android消息推送怎么实现?

极光推送总结: