DevStore首页 > DEV资源 > 服务评测下载 > 极光推送iOS版V1.8.2服务评测

极光推送iOS版V1.8.2服务评测

查看服务>>
DevStore编辑 刘艳丽 | 2015-01-13 11:00    浏览量(10557)    纠错    评论(3)    极光推送服务详情>>

服务评测作者

  • 18 能力值
  • 0 源码
  • 8 评测
  • 0 资料

评测目录

集成测试

评测环境

3G网络下:

    测试对象

  JPush推送iOS SDK v1.8.2

    测试环境

  Mac OS X(10.10) + Xcode (6.1)

    测试设备

  iPhone 5S

    系统版本

  iOS 8.1

    设备网络

  3G

    测试方法

  间断性通过网站向手机推送消息

    测试时间

  2014-12-24 21:00

    测试时长

  15分钟

  推送间断时间

  30秒

  理论收到次数

  20

  实际收到次数

  20


WiFi网络下:

   测试设备

  iPhone 5S

   系统版本

  iOS 8.1

   设备网络

  wifi

   测试方法

  间断性通过网站向手机推送消息

   测试时间

  2014-12-24 21:30

   测试时长

  20分钟

  推送间断时间

  30秒

  理论收到次数

  30

  实际收到次数

  30


基本参数:

   如何收费

  免费

   推送内容

  通知、消息

   稳定性

  稳定

   及时性

  及时

   LBS推送

  支持

 提供服务端API

  提供

   集成难度

  简单

   差异化服务

  支持

   离线推送

  支持

   推送统计

  支持

对应用运行的影响

  无

集成过程

客户端集成

由于iOS推送服务的特殊性,建议开发者首先配置好推送证书之后再开始客户端集成的工作。

对于推动证书不熟悉的开发者可以参考以下连接:

http://docs.jpush.io/client/ios_tutorials/ - ios_1

列出以下配置证书流程,供不熟悉证书配置的开发者参考(开发环境下对应极光的生产环境):

1.在开发者网站注册AppID

注册AppID

注册AppID

按照其步骤,我们选中PushNotification.

选中PushNotification

完成之后表明,需要使用这个AppID的程序是带有推送功能的

2.此时我们需要创建一个推送证书,这个推送证书是为了保证推送服务器(这里就是极光服务器)和APNS服务器能够建立连接。

创建一个推送证书

创建一个推送证书

在选择了推送证书类型之后,我们需要使用刚刚创建的AppID来与之对应。

对应证书

这个证书能够使推送服务器(极光服务器)和APNS建立正确的连接,同时也可以确保APNS能够正确的把推送消息发送到应用。

3.创建Provision Profile文件

创建Provision即是将设备和AppID联系在一起

创建Provision Profile文件

在这里我们指定为Development条件下的Provision文件并选定第一步创建的AppID

选择iOS App Development

选择APP ID

生成Provision之后下载并导入,在工程中指定Provision文件,此时客户端的证书配置工作完成。

需要注意的是,在导出p12证书的时候需要设定密码,而且是开发条件下(对应生产环境)还是发布环境下需要开发者在极光控制台进行设置。并在项目正式上线之后注意上传相关的推送证书和设置应用状态。

整个集成过程如下:

注册JPush帐号->创建推送应用下载SDK->集成开发->测试应用->发布应用

1、注册极光账号

极光开发者账号的注册地址:https://www.jpush.cn/common/#signup

2、创建新应用

在成功注册帐号之后在首页点击进入控制台,关于配置应用我们将主要在这个页面进行。如图:

创建新应用

选择主按钮之后进入应用列表,在左侧列表下方选择创建应用。

创建应用

创建应用时,在创建页面填应用相关信息,点击页面下方的创建应用按钮即可完成创建工作。

注意:

1.在导出密码时需要设置证书密码,并将此证书密码填在创建应用页面的。上传证书之后极光会验证此证书的可用性,如果验证通过会再证书后面蓝色的『已验证』字样。同时开发者注意保存AppKey。

设置证书

2.上传证书之后发已验证是表明极光服务器可以使用此证书向APNS服务器通信,并不开发者的其他配置正确。开发者推送服务已经开通的标识是在AppDelegate.m的代理方法中收到用于推送的deviceToken。

集成步骤:

在此步骤之前确保应用在developer.apple和极光推送控制台均配置好应用。

--在苹果开发者网站注册相关证书和Provision文件

--在极光控制台创建应用及上传推送证书

前往http://www.jpush.cn/downloads/sdk/ios8下载极光最新的iOS SDK。在这个连接下下载到的SDK版本是1.8.2。也是目前最新的版本(2014/12/24)。同时极光为了兼容iOS7下的开发者,并未关闭iOS7相应版本的SDK下载。开发者可以通过以下连接下载并使用:

http://docs.jpush.cn/download/attachments/7864408/JPush-iOS-SDK-1.7.4.zip?version=1&modificationDate=1411121271000

3、JPush iOS SDK

打开下载的SDK里面共有三个文件夹,一个Demo展示,一个说明文档,另外一个lib就是我们需要向自己项目中添加的库文件。

添加库文件

而lib文件夹中仅有一个静态库的文件,和极光推送服务的头文件,凭借这两个文件,为应用添加推送功能。

4、集成开发

 1)新建一个工程

新建工程

注意:项目的Bundle Identifier需要与在苹果开发者网站上注册的AppId一致,否则无法正常集成推送服务。

2)添加JPush  SDK

把下载到的SDK文件夹中的lib文件夹导入到项目的目录中,

并添加以下系统依赖:

•CFNetwork.framework

•CoreFoundation.framework

•CoreTelephony.framework

•SystemConfiguration.framework

•CoreGraphics.framework

•Foundation.framework

•UIKit.framework

•Security.framework

•libz.dylib

添加系统依赖需要在Project->BuildPhases->LinkBinary中添加

添加系统依赖

添加完成之后如下图:

添加完成

这些是我们需要的系统库和三方库(JPush SDK)。

除此之外,集成极光推送还需要新建一个配置文件(plist),并命名为PushConfig.plist,在该plist文件中加入以下字段:

添加字段

其中APP_KEY字段即代表在极光控制台得到的应用密钥,而另外两个字段则分别代表”渠道”和”证书状态”.

在使用SDK之前我们需要做的准备工作到这里已经完成。

3)基本功能集成

1.注册推送服务

[APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                 UIRemoteNotificationTypeSound |
                                                 UIRemoteNotificationTypeAlert)                                    categories:nil];

极光推送对向APNS推送服务进行了封装,不用开发者手动得向APNS注册远程推送,而是调用SDK提供的API即可完成这些工作。

以及实现代理方法:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    //注册APNS成功,这里接收到从APNS发回的DeviceToken
    NSLog(@"--注册成功,获得Token %@",deviceToken);
    //得到deviceToken之后需要通过SDK上传到极光推送服务器
    [APService registerDeviceToken:deviceToken];
}
 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    //这里接收到由APNS发送的推送消息(当程序是在内存中加载的状态,或者是由远程推送激活的状态)
    //一旦实现了这个方法,将不会再走didReceiveRemoteNotification方法
    [APService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //接收到推送消息之后把这个推送先交给SDK帮我们处理
    [APService handleRemoteNotification:userInfo];
}

运行程序之后效果如下:

运行效果图

查看打印日志,发现我们已经获得DeviceToken,前面曾经提到,获得这个数据就标志着我们已经成功的注册APNS推送服务,也即表明APNS服务器可以与我们的设备进行通信了。

至此,初步集成完成。

主要功能

在JPush的控制台中选择相应的应用来测试推送消息

测试推送消息

即使是在网站的控制台,极光推送也提供了较为完善的推送设置,在程序中如果设置过别名、标签,那么在网站后台就会得到相应名称的推送选项。

推送设置

笔者在程序中分别以设备名称为设备名称为别名,“男”为标签,在控制台均有所显示。

手机屏幕顶端接收到通知:

手机屏幕顶端接收到通知

通知中心提示:

通知中心提示

功能特色

1、设置Tag

标签通常来标识一类用户,比如男性,女性。设置tag可以帮助开发者细分推送对象,提高推送的效果。

a.设置别名

//设置标签
        NSSet *set = [[NSSet alloc] initWithObjects:@"男",[[UIDevice currentDevice] model], nil];
        [APService setTags:set callbackSelector:@selector(setTagsSuccess) object:nil];

同一个用户可以有一个标签,也可以拥有多个标签。因此这里设置一个NSSet对象,作为用户的标签。

2、设置别名 

一般别名应该是针对唯一用户的,在开发则的用户系统中,可以用userId作为别名.

//设置别名
        //将当前的设备名称设置为别名
        NSString *alias = [[UIDevice currentDevice] model];
        [APService setAlias:alias callbackSelector:@selector(setAliasSucc) object:nil];

3、全面而方便的用户统计

极光推送服务一大特色就是通过集成sdk分析用户行为和应用的留存率,而且在网站后台提供了直观的统计图标,方便开发者和运营者查看。

//上报日志,告诉极光服务器开始使用这个页面
[APService startLogPageView:@"viewController"];
[APService stopLogPageView:@"viewController"];
//开启崩溃日志收集
    [APService crashLogON];

4、关于应用内消息

应用内消息即用户正在使用应用时(应用在前台执行),如果此时有推送消息,则极光推送服务将会通过极光服务器直接向设备发送消息,当然开发者也可以把这个远程消息设置成本地通知。最重要的一点时,如果收到这种消息,将不会再走系统已有的推送消息的代理方法,而是需要开发者监听应用内消息的通知,并在需要展示的地方展示消息、进行交互。

[notiCenter addObserver:self selector:@selector(JPReceiveErrorMessage:) name:kJPFServiceErrorNotification object:nil];
 
- (void)JPReceivedMessage:(NSNotification *)noti
{
    //收到由极光服务器发送的推送消息(应用内消息--不通过APNS)
    NSLog(@"--收到应用内消息:%@",noti);
    //在这里将应用内消息通过极光SDK转换成本地通知
    [APService setLocalNotification:[NSDate date]
                          alertBody:@"收到应用内消息"
                              badge:1
                        alertAction:@"打开"
                      identifierKey:@"notiKey"
                           userInfo:[noti userInfo]
                          soundName:nil
                             region:nil
                 regionTriggersOnce:YES
                           category:nil];
}

5、本地推送的完善

在本地收到远程推送之后,如果是一种不适合提醒用户的场景下,可以将远程推送的消息保存到本地,或者把远程推送转化成本地推送,对于用户而言,本地推送和远程推送是一样的,但是在合适的场景下提示用户,这无疑提高了用户体验,1.8.2版本下新增的接口—本地推送。上述的场景可以在JPushSDK的API中实现(iOS 8以后 APService 1.8.0以后可用)。

[APService setLocalNotification:[NSDate dateWithTimeIntervalSinceNow:10]
                              alertBody:@"Local Notification,this is the local notification"
                                  badge:-1
                            alertAction:nil
                          identifierKey:@"local_1"
                               userInfo:nil
                              soundName:nil];

DEMO展示

部分测试demo展示:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //自定义categories --iOS8新特性
        NSMutableSet *categories = [NSMutableSet set];
        UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
        category.identifier = @"identifier";
        UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
        action.identifier = @"test2";
        action.title = @"test";
        action.activationMode = UIUserNotificationActivationModeBackground;
        action.authenticationRequired = YES;
        //YES显示为红色,NO显示为蓝色
        action.destructive = NO;
        NSArray *actions = @[ action ];
        [category setActions:actions forContext:UIUserNotificationActionContextMinimal];
        [categories addObject:category];
        [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                       UIUserNotificationTypeSound |
                                                       UIUserNotificationTypeAlert)
                                           categories:categories];
    } else {
        //categories 必须为nil
        [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                       UIRemoteNotificationTypeSound |
                                                       UIRemoteNotificationTypeAlert)
                                           categories:nil];
    }
#else
    //categories 必须为nil
    [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                   UIRemoteNotificationTypeSound |
                                                   UIRemoteNotificationTypeAlert)
                                       categories:nil];
#endif

测试日志

接收到device token

接收到device token

开启debug模式之后的日志

开启debug模式之后的日志

遇到问题

1.在测试SDK时笔者发现有崩溃日志的上报,对此感兴趣,并希望详细了解,但是在相关文档中并未找到有价值的资料。询问技术支持之后得知,目前虽有接口,但是开发者并不能在极光控制台查看crash文件。只能在本地查看,也即此接口并不完善。

2.随着iOS系统版本的升级 ,推送服务也有了很大的变化,如果开发者需要对多重版本的系统进行适配则需要在程序中调用多个版本的API,建议参照极光文档的写法,避免出错。

3.关于iOS8新增的本地推送接口需要添加过期时间和region,对于过期时间一定要设置成将来的某个时间,二者在同一API中只能设置一个。

上手难易

极光推送是推送服务商中较大的一个,目前的用户量也相当庞大,其文档、注释、网站控制台都较为完善。极光SDK对推送服务进行高级封装,除了实现APNS推送以外还实现了基于TCP连接的应用内消息,在一定程度上提高了推送服务的可靠性。其SDK非常简洁,简化了集成过程,而通过阅读API的注释及相关文档,开发者可以很快的掌握SDK的使用。对于有一定开发经验的开发者是非常易于上手的。

开发文档

极光每次版本更新都会有相关的文档更新,而且有较为完善的集成指南,可以参考如下链接:

http://docs.jpush.cn/pages/viewpage.action?pageId=2621727

此服务评测版权归DevStore所有,禁止转载,申请升级为 特约评测员 才可进行测评立即申请

声明:DevStore评测内容都是基于专业评测人员/开发者通过真实的测试之后得出的数据,服务版本实时都在更新,所以评测并不一定是此服务的最新版本,但我们会秉承公正专业精准的态度,对开发者负责,同时欢迎大家监督和建议,如对评测内容有异议,请提交纠错,由专业的评测团队再次评测,我们会尽最大努力为大家提供更贴心的服务。

DevStore_全球首家第三方开发者服务商店,最精准的服务对比、最专业的服务评测、最及时的行业动态,为开发者挑选服务提供最全面的参考和专业分析,加入DevStore,从此告别熬夜加班,你也可以这么帅!搜索微信号:DevStore

评论(3)
282582714

282582714 2015-12-30 10:47:20

极光推送,希望能有与其他公司的横向比较
回复(0) 赞(1) 赞(2)
deblihuihui

deblihuihui 2015-02-25 10:43:58

极光推送是推送服务商中较大的一个,目前的用户量也相当庞大
回复(0) 赞(0) 赞(1)
lhy

lhy 2015-02-11 11:21:02

希望能够实现如果有推送信息时,先把信息放入本地的数据文件中存储,然后根据条件设置是否在通知中心显示!
回复(0) 赞(0) 赞(1)