JPush 极光推送 (集成流程)

JPush说明文档

JPush iOS 推送原理及问题

(参考:http://blog.jpush.cn/apns/)

JPush iOS 初步了解推送方式

(详解: http://docs.jpush.io/client/ios_sdk/

从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息。

红色部分是 APNs 推送,JPush 代理开发者的应用(需要基于开发者提供的应用证书),向苹果 APNs 服务器推送。由 APNs Server 推送到 iOS 设备上。

蓝色部分是 JPush 应用内推送部分,即 App 启动时,内嵌的 JPush SDK 会开启长连接到 JPush Server,从而 JPush Server 可以推送消息到 App 里。

APNs 通知

APNs 通知:是指通过向 Apple APNs 服务器发送通知,到达 iOS 设备,由 iOS 系统提供展现的推送。用户可以通过 IOS 系统的 “设置” >> “通知” 进行设置,开启或者关闭某一个 App 的推送能力。

JPush iOS SDK 不负责 APNs 通知的展现,只是向 JPush 服务器端上传 Device Token 信息,JPush 服务器端代理开发者向 Apple APNs 推送通知。

获取APNS 消息内容通过函数

• 如果 App状态为正在前台或者后台运行,那么此函数将被调用,并且可通过AppDelegate的applicationState是否为UIApplicationStateActive判断程序是否在前台运行。此种情况在此函数中处理:

? (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; // apn内容为userInfo

• 如果是使用 iOS 7 的 Remote Notification 特性那么处理函数需要使用

? (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler; // apn内容为userInfo

应用内消息

应用内消息:JPush iOS SDK 提供的应用内消息功能,在 App 在前台时能够收到推送下来的消息。App 可使用此功能来做消息下发动作。

此消息不经过 APNs 服务器,完全由 JPush 提供功能支持。

获取应用消息内容

在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) launchOptions 加入下面的代码:

NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];

实现回调方法 networkDidReceiveMessage

- (void)networkDidReceiveMessage:(NSNotification *)notification {

NSDictionary * userInfo = [notification userInfo];

NSString *content = [userInfo valueForKey:@"content"];

NSDictionary *extras = [userInfo valueForKey:@"extras"];

NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //自定义参数,key是自己定义的 }

JPush- iOS证书 设置指南

(请参考文档:http://docs.jpush.cn/pages/viewpage.action?pageId=1343727http://docs.jpush.cn/pages/viewpage.action?pageId=8820084)

1.创建应用程序ID

2.配置和下载证书

3.导出 .p12 证书文件

4.上传证书

JPush-SDK集成步骤

(请参考文档: http://docs.jpush.cn/pages/viewpage.action?pageId=2621727)

1.在JPush的管理Portal上 上传证书并创建应用。如果对APNs证书不太了解 请参考 iOS 证书设置指南

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

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

2.1 将SDK包解压,将解压后的lib子文件夹(包含APService.h、libPushSDK.a)添加到你的工程目录中。

3.必要的框架

• CFNetwork.framework

• CoreFoundation.framework

• CoreTelephony.framework

• SystemConfiguration.framework

• CoreGraphics.framework

• Foundation.framework

• UIKit.framework

• Security.framework

• libz.dylib

4.Build Settings

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

5.创建并配置PushConfig.plist文件

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

{

"APS_FOR_PRODUCTION" = "0";//开发为0  生产为1

"CHANNEL" = "Publish channel";

"APP_KEY" = "AppKey copied from JPush Portal application";

}

5.2 CHANNEL

指明应用程序包的下载渠道,为方便分渠道统计。根据你的需求自行定义即可。

5.3     APP_KEY

• 在管理Portal上创建应用时自动生成的(AppKey)用以标识该应用。请确保应用内配置的 AppKey 与第1步在 Portal 上创建应用时生成的 AppKey 一致,AppKey 可以在应用详情中查询。

5.4   APS_FOR_PRODUCTION

• 1.3.1版本新增,表示应用是否采用生产证书发布( Ad_Hoc 或 APP Store ),0 (默认值)表示采用的是开发者证书,1 表示采用生产证书发布应用。请注意此处配置与 Web Portal 应用环境设置匹配。

• 在1.2.2或之前版本的配置文件中,有 TEST_MODE 这个键,新版的SDK不再使用,可以将它删除。

6.添加代码

API

APIs 主要集中在 APService 接口类里。

// 以下四个接口是必须调用的

+ (void)setupWithOption:(NSDictionary *)launchingOption;  // 初始化

+ (void)registerForRemoteNotificationTypes:(NSUInteger)types

categories:(NSSet *)categories;  // 注册APNS类型

+ (void)registerDeviceToken:(NSData *)deviceToken;  // 向服务器上报Device Token

+ (void)handleRemoteNotification:(NSDictionary *)

remoteInfo;  // 处理收到的APNS消息,向服务器上报收到APNS消息

调用代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

// 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];

}

#else

//categories 必须为nil

[APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

UIRemoteNotificationTypeSound |

UIRemoteNotificationTypeAlert)

categories:nil];

#endif

// Required

[APService setupWithOption:launchOptions];

return YES;

}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

// Required

[APService registerDeviceToken:deviceToken];

}

- (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);

}

7.监听通知

API里面提供了下面 5 种类型的通知:

extern NSString * const kJPFNetworkDidSetupNotification;          // 建立连接

extern NSString * const kJPFNetworkDidCloseNotification;          // 关闭连接

extern NSString * const kJPFNetworkDidRegisterNotification;       // 注册成功

extern NSString * const kJPFNetworkDidLoginNotification;          // 登录成功

extern NSString * const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS)

8.继续下看

(常见问题 参考:http://docs.jpush.cn/pages/viewpage.action?pageId=7864782

8.1 如何获得AppKey ?

从我们自己创建得PushConfig.plist文件 获得

- (NSString*)getAppKey

{

NSURL *urlPushConfig = [[[NSBundle mainBundle] URLForResource:@"PushConfig" withExtension:@"plist"] copy];

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:urlPushConfig];

if (!dictionary)

{

return nil;

}

//appkey

NSString *strAppKey = [dictionary valueForKey:@"APP_KEY"];

if (!strAppKey)

{

return nil;

}

return [strAppKey lowercaseString];//将其中的大写字母 转 为小写

}

8.2  注册成功时  调用/** 获得注册ID

*  get RegistrationID

*/

+ (NSString *)registrationID;

时间: 2024-08-23 08:26:40

JPush 极光推送 (集成流程)的相关文章

atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99

atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消息的支持 2 1.4. 是否支持转义字符 2 2. 客户端身份识别机制 2 3. 绑定客户端的区别流程::jpush胜出 2 4. 文档风格比较::百度,jpush胜出 3 5. 编程sdk框架比较..个推,百度胜出 3 6. 编程风格的比较 3 6.1. 个推 3 6.2. 百度 4 6.3. J

Android JPush极光推送应用

JPush纠结了5-6个小时,一直报下面的错误,纠结! [AndroidUtil] AndroidManifest.xml missing required intent filter for PushReceiver: cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY 觉得明明是已经添加了cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY 主要问题是主包名没有弄好,才导致的错误!接下来感谢

Java.lang.UnsatisfiedLinkError android studio集成Jpush极光推送

今天学习了极光推送,想把它集成到自己的应用里面,我的开发环境是android studio 1.2,期间遇到了错误: Couldn't load jpush174 from loader dalvik.system.PathClassLoader findLibrary returned null,原因是由于android studio不能正确的解决libjpush174.so文件造成的,解决步骤如下: 1.首先按照官网教程配置环境,链接如下:http://docs.jpush.io/guide

IONIC集成jPush极光推送

一.简介: 极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供专业.高效的移动消息推送服务. 极光推送,英文简称 JPush,是一个面向普通开发者开放的,免费的第三方消息推送服务. 二.官网:https://www.jiguang.cn/ 首先注册一个账号,登陆平台,在控制台添加我们的应用信息 点击提交 会成一个AppKey和Master Secret这两个密钥主要用来配置服务端发送通知使用. 三.开整 官方的栗子:https://github.com/jpush/j

AndroidStudio离线打包MUI集成JPush极光推送并在java后端管理推送

1.AndroidStudio离线打包MUI 如何离线打包请参看上篇随笔<AndroidStudio离线打包MUI> 2.集成极光推送 官方文档:https://docs.jiguang.cn/jpush/client/Android/android_guide/ 建议采用 jcenter 自动集成 的方式,手动集成对新手来说容易出错 使用jcenter自动集成的开发者,不需要在项目中添加jar和so,jcenter会自动完成依赖:在AndroidManifest.xml中不需要添加任何JPu

JPush 极光推送 实战

极光推送的"自定义消息"很给力啊,他不是发送一条消息到状态栏,而是直接把消息内容传到APP中需要的地方,估计很多APP的验证码就是通过这种形式搞出来的. 简介 官网:https://www.jpush.cn/ 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度.提高应用的留存率. 主要功能 保持与服务器的长连接,以便消息能够即时推送到达客户端 接收通知与自定义消息,并向开发者App传递相关信息

JPush (极光推送) For Xamarin.Android

官方教程上讲的是 GCM (Google Cloud Messaging) , 不过 GFW 是 GCM 过不去的坎. 极光推送 JPush 是国内的一个不错的替代方案. JPush 提供的 API 易于理解, 使用也很简单, 但是要使用于 Xamarin 还是要费些周章: 要转制成 Binding Library. JPush 提供了一篇转制的示例: http://smilehyh.blog.163.com/blog/static/123343886201362110857402/ 按照过程走

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

这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送的官方API以及帮助文档都在这里:http://docs.jpush.cn/display/dev/Index 其中服务端的接口以及示例代码都在这里:http://docs.jpush.cn/display/dev/Server-SDKs 大家有兴趣的可以看看,因为这次我做的不是客户端APP,所以一

Android 极光推送集成

集成Jpush 1.用Android Studio创建一个Demo 2.创建激光推送开发者账号,要创建极光推送开发者帐号,请访问极光推送官方网站https://www.jiguang.cn/push 3.在Portal上创建应用 使用注册账号登陆,进入极光控制台后,点击"创建应用"按钮.创建帐号进入极光推送后,首先显示的是创建应用的界面.填上你的应用程序的名称,以及 Android包名这二项就可以了. 4.手动集成,导入相关文件 http://docs.jiguang.cn/jpush