您的位置:首页 > 其它

JPush 极光推送 (集成流程)

2015-05-07 14:01 561 查看
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=1343727 http://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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: