关于JPush

极光推送是国内的服务厂商提供的一站式push服务(同时支持iOS、android),后面也加入了即时通讯的能力供app使用。致力于打造简单、可靠、价格有竞争力的服务(简单功能全免费,高级版才收费),让应用开发商可以聚焦业务开发,push相关的技术实现全部通过极光推送来解决,仅需调用极光推送的api即可。正因为如此,开发者小伙伴们对其的评价相当不错。笔者的app新增了从服务器往移动客户端下发简单消息的需求,多方权衡下,我们准备尝试jpush的服务来解决问题(这里仅介绍iOS端的集成过程)。

集成步骤

step1:去极光推送注册账号:https://www.jpush.cn/,并注册应用。

step2:上传apns证书到极光,apns证书的生成步骤参考:

http://docs.jpush.io/client/ios_tutorials/#ios_1
仔细阅读该文档,上传成功后控制台的应用详情里面会显示“已验证”,说明证书有效。

step3:对你的app工程重新配置,使用新的支持apns的provision文件(若此前应用已支持apns,可以不用换),否则后面无法正常获得device token.

step4:集成其sdk,包括一个.a和一个.h文件,最新版本大约是2.1,其sdk中也包含了demo,注意在2.1版本之前需要创建一个plist文件用于保存秘钥信息等,在最新版本不需要此文件。

sdk下载地址:https://www.jpush.cn/common/products#product-download

step5:主要代码修改如下:

appdelegate.h:

static NSString *appKey = @"Your_app_key";
static NSString *channel = @"Your_channel_identifier";
static BOOL isProduction = NO;

appdelegate.m:

#import "JPUSHService.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound |UIUserNotificationTypeAlert)categories:nil];[JPUSHService setupWithOption:launchOptions appKey:appKeychannel:channel apsForProduction:isProduction];// your codesreturn YES;
}- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]);[JPUSHService registerDeviceToken:deviceToken];
}- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{NSLog(@"didReceiveRemoteNotification :%@", userInfo);[JPUSHService handleRemoteNotification:userInfo];
}
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:
(void (^)(UIBackgroundFetchResult))completionHandler
{NSLog(@"didReceiveRemoteNotification fetchCompletionHandler:%@", userInfo);[JPUSHService handleRemoteNotification:userInfo];completionHandler(UIBackgroundFetchResultNewData);
}- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification
{//[JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];
}

监听自定义消息相关的通知(建议在你应用中创建一个单例的manager中专门管理):

        NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];[defaultCenter addObserver:selfselector:@selector(networkDidSetup:)name:kJPFNetworkDidSetupNotificationobject:nil];[defaultCenter addObserver:selfselector:@selector(networkDidClose:)name:kJPFNetworkDidCloseNotificationobject:nil];[defaultCenter addObserver:selfselector:@selector(networkDidRegister:)name:kJPFNetworkDidRegisterNotificationobject:nil];[defaultCenter addObserver:selfselector:@selector(networkDidLogin:)name:kJPFNetworkDidLoginNotificationobject:nil];[defaultCenter addObserver:selfselector:@selector(networkDidReceiveMessage:)name:kJPFNetworkDidReceiveMessageNotificationobject:nil];[defaultCenter addObserver:selfselector:@selector(serviceError:)name:kJPFServiceErrorNotificationobject:nil];
// handler
- (void)networkDidSetup:(NSNotification *)notification
{NSLog(@"networkDidSetup %@, alias=%@", [notification userInfo], [NSString stringWithFormat:@"iOS_%@", GSignInConfig.userID]);//针对设备给极光服务器反馈了别名,app服务端可以用别名来针对性推送消息[JPUSHService setTags:nilalias:[NSString stringWithFormat:@"iOS_%@", GSignInConfig.userID]callbackSelector:niltarget:nil];
}- (void)networkDidClose:(NSNotification *)notification
{NSLog(@"networkDidClose %@", [notification userInfo]);
}- (void)networkDidRegister:(NSNotification *)notification
{NSLog(@"networkDidRegister %@", [notification userInfo]);
}- (void)networkDidLogin:(NSNotification *)notification
{NSLog(@"networkDidLogin %@", [notification userInfo]);
}- (void)networkDidReceiveMessage:(NSNotification *)notification
{NSLog(@"networkDidReceiveMessage notification = %@", notification);
}- (void)serviceError:(NSNotification *)notification
{NSDictionary *userInfo = [notification userInfo];NSString *error = [userInfo valueForKey:@"error"];NSLog(@"serviceError %@", error);
}

api参考:http://docs.jpush.io/client/ios_api/#api-ios

step6:在控制台发送消息,对其进行测试。

https://www.jpush.cn/push/apps/61466f6a310571060af61a13/push/message/
在此处可以发送自定义消息和push消息,其中自定义消息只在前台接收,通过长连接发送。笔者这里只使用自定义消息,用于应用在前台时服务器向应用下发消息,实时性比较好。

错误排查

http://docs.jpush.io/client/ios_tutorials/
参考上面链接的思维导图,结合demo(将demo的bundle id修改成你工程的bundle id,并配置你自己的mobile provision文件来对比测试),一般就可以解决常见问题。

总结

经过笔者几个小时的实战,即在应用内集成了Jpush的服务,应该说还是相当效率的。Jpush在速度、可靠性、文档等各方面表现都很不错,对开发者很友好。有此类需求的开发者小伙伴们可以优先考虑JPush的方案。

JPush(极光推送)实战总结相关推荐

  1. Laravel 集成 JPush 极光推送指北

    2019独角兽企业重金招聘Python工程师标准>>> 我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就 ...

  2. php集成jpush教程,Laravel 集成 JPush 极光推送指北

    我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就不用看了). Laravel 使用 Composer 来管理代码依赖.所以 ...

  3. JPush极光推送Java服务器端API

    菜鸟的春天 JPush极光推送Java服务器端API // 对android和ios设备发送 JPushClient jpush = new JPushClient(masterSecret, app ...

  4. 解决Android Studio配置JPush极光推送错误方案

    1.在JPush极光推送官方下载 JPush SDK(jpush-android-release-2.1.7.zip) 2.解压下载好的压缩包解压并复制libs/jpush-android-2.1.7 ...

  5. Android Jpush极光推送

    平时我们开发手机客户端总是少不了与服务器进行交流,那当我们服务器数据有更新时候,客户端是怎么知道的呢,我们以前一般用两种方法: 1,客户端每隔一段时间向服务器发请求,检测数据是否发生变化,当发生变化的 ...

  6. iOS第三方集成之jpush极光推送

    iOS第三方集成之jpush极光推送 现在很多app都带推送功能,极光推送是很受大家欢迎的第三方推送,本文将为iOS初学者和初次设计开发推送的攻城狮们提供以下自己的使用心得. 大家可以边参考官方文档, ...

  7. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...

  8. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  9. JPush (极光推送) For Xamarin.Android

    http://www.cnblogs.com/xling/p/JPush-for-Xamarin-Android.html 官方教程上讲的是 GCM (Google Cloud Messaging) ...

  10. ionic集成jPush极光推送

    一.简介: 极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供专业.高效的移动消息推送服务. 极光推送,英文简称 JPush,是一个面向普通开发者开放的,免费的第三方消息推 ...

最新文章

  1. NavigationController 已经洗干净了, 就等你来
  2. 粗谈LINUX下的文件系统管理
  3. WebSocket简单使用
  4. 虚拟运营商人工服务器,四大必想之事:倒闭、价格、网络
  5. python安装盒怎么打开_安装MySQL-python报错
  6. 实用新型专利申请文件撰写示例
  7. react项目 上线配置流程
  8. matlab矩阵最大值最小值均值,Matlab 处理数据—最小值、最大值、均值、方差
  9. [黑群晖经典教程] 一步一步建立自己的黑群晖
  10. iOS小技能: UIKit
  11. 绘制盐沼植被图的混合方法-文献阅读
  12. MSDC 4.3 接口规范(28)
  13. lodop打印html包含图片,使用lodop.js打印控件打印table并分页等
  14. 7-1 过河 (15分) Java实现
  15. 新版Qq为什么不受欢迎?
  16. 视频关键帧inceptionV3Xception特征提取
  17. python 工作流workflow_Workflow笔记1——工作流介绍
  18. 《场景式500主题会话10000单词完全掌握》[PDF]
  19. 139邮箱java版下载_139邮箱手机版下载-139邮箱手机客户端下载 8.9.1-领航下载站
  20. HTML自定义三栏,HTML+CSS三栏式布局(7种)

热门文章

  1. Excel | 替换特定大小的单元格值(如:小于5000的值)为指定值
  2. K8s 多节点部署流程
  3. (附超声射频数据)matlab实现b超原始信号数据生成图像
  4. 【电商】电商后台设计—购物车
  5. DHV展示故事经典 案例 卖猪借宿
  6. HTML_canvas
  7. 华纳媒体将持有拉美和加勒比海西班牙语地区HBO品牌服务的全部所有权,包括所有HBO、MAX、Cinemax和HBO Go服务
  8. 布尔代数中表达式的展开及因式分解的技巧
  9. 解决VMware下安装Ubuntu 16.04 不支持1920X1080分辨率的问题
  10. 基于51单片机的简易电容值测量仪proteus仿真设计