一、简介
现在有很多解决远程推送的三方库,比如百度推送、极光推送等,集成它们的API步骤都类似,下面我就给大家介绍一下JPush集成。
1.JPush是一套解决远程推送的三方库,支持android和iOS两个平台;它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量、开发复杂度。
2.更多的信息,可以参考JPush官方网站:https://www.jpush.cn
3.集成iOS SDK的步骤可以参考:
http://docs.jpush.cn/pages/viewpage.action?pageId=2621727
二、集成步骤
1.注册账号,创建应用
2.填写iOS app的必要信息
注意:生成的CER证书是与电脑关联的证书,在其他的电脑上是不能使用的,只能在注册的制定的电脑上使用;在极光推送的iOS开发证书和iOS生产证书必须是p12格式的交换证书
3.点击创建我的应用
4.将API开发包导入到引用程序中
将SDK包解压,在XCode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含APService.h、libPushSDK.a)添加到你的工程目录中。
5.导入必要的框架
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
libz.dylib
注意:虽然从XCode5开始用到系统自带的框架不用导入,但是如果在静态库中用得框架,还是必须要导入,不然就会报错。
6.创建并配置PushConfig.plist文件
在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,填入Portal为你的应用提供的APP_KEY等参数。
7.调用代码
导入
#import "APService.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Required
#if
__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
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;
}
// 获取到deviceToken就会调用
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Required
// 传递获取到得deviceToken给Jpush,Jpush会自动帮我们管理deviceToken
[APService registerDeviceToken:deviceToken];
}
/*
在iOS7以前, 只要程序在前台或者后台接收到远程推送过来的通知就会调用
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// Required
[APService handleRemoteNotification:userInfo];
}
// iOS7以后调用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// IOS 7 Support Required
[APService handleRemoteNotification:userInfo];
// 每次处理完推送过来的通知, 都"必须"告诉系统是否处理成功
// 1.方便程序在后台更新数据
// 2.系统会更具状态判断是否处理成功
completionHandler(UIBackgroundFetchResultNewData);
}
注意:
API里面提供了下面 5 种类型的通知:
// 建立连接
extern NSString* const kJPFNetworkDidSetupNotification;
// 关闭连接
extern NSString * const kJPFNetworkDidCloseNotification;
// 注册成功
extern NSString * const kJPFNetworkDidRegisterNotification;
// 登录成功
extern NSString * const kJPFNetworkDidLoginNotification;
// 收到消息(非APNS)
extern NSString * const kJPFNetworkDidReceiveMessageNotification;
其中,kJPFNetworkDidReceiveMessageNotification通知是有传递数据的,可以通过NSNotification中的userInfo方法获取,包括标题、内容、内容类型、扩展信息等
网友评论