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

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

现在很多app都带推送功能,极光推送是很受大家欢迎的第三方推送,本文将为iOS初学者和初次设计开发推送的攻城狮们提供以下自己的使用心得。
大家可以边参考官方文档,边看我整理的内容。
一、推送前期准备
1.用开发者账号申请好具备推送功能的相关证书(真机调试证书和发布证书,此时记得保存好4个文件,aps_development.cer文件aps_production.cer文件以及这两者对应的描述文件,就是.mobileprovision后缀的两个齿轮图标的文件);
此处解释说明一下:推送在iOS中分为开发环境和生产环境,开发环境你可以理解为推送给没上线的app或者说是在测试中的app,该环境对应的一般是真机调试证书;生产环境就是你的app已经上架了,并且它是由带推送功能的证书发布的,我们通过生产环境推送给安装了你app的用户,它对应的是发布证书。
2.去jpush官网注册一个账号,并下载jpush的SDK(目前版本是1.8.8了);
3.登录jpush账号,注册一个你的应用,这时候会生成一个appKey,这个是很重要的东西!!!后面会用到!!!这时候我们发现要我们上传两种APNs证书文件:一种开发环境,一种生产环境。此时就需要我们第1步的东西了,我们用钥匙串分别打开第一步保存的两个.cer文件,记住,不能点开钥匙串中二者前面的小三角形箭头!!!然后右键,选择导出“。。。。。。”,这时候我们就会分别导出对应的.p12文件,这个就是这里需要的APNS证书文件,发布的p12对应上传到生产环境,真机的p12对应上传到开发环境,密码无所谓,点击保存。这时候他会自动校验你两个证书是否有效,无效会报错的!成功验证后我们发现,连bundle id都不用我门填,自动填充了!!

这些就是前期准备工作

二、集成到工程中
1.将下载的sdk拖入我们的工程,就两个东西,一个是APService.h,一个是libPushSDK-1.8.8.a。证书选择要正确,确保是我们前期工作中生成的证书!
!!!特别注意:我们需要导入必须得库,不然会报错!
必须依赖库:CoreGraphics.framework、CFNetwork.framework、CoreFoundation.framework、CoreTelephony.framework、SystemConfiguration.framework、Security.framework、libz.tbd、Foundation.framework、UIKit.framework
运行后会弹框问我们是否接收推送,若无肯定是没有集成好!
PS:如果使用cocoapods导入极光的话,这一步的操作可以忽略,cocoapods会自动关联依赖库,cocoapods的使用请见我的博客!极光推送的cocoapods语句为:pod “JPush”
2。新建一个plist文件,起名就叫PushConfig.plist,不能叫其他任何名字,差一个都不行,否则会报找不到配置文件的错!!!切记!!!在该plist文件中加入三个string类型的值,分别是:APS_FOR_PRODUCTION,该值暂时写0或faulse(此值的意思是区分app是接收开发环境的推送消息还是生产环境的推送消息,当我们上线的时候,切记切记一定要将此值改为true或者1!!!否则你上线的app收不到任何推送消息!!!)
第二个key是CHANNEL,这是死值,无论什么环境都写Publish channel;
第三个是APP_KEY,这个就是准备工作说的那个appkey,不能写错!!!
3.在appdelegate.m中做如下操作:
注册推送:
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {
// Override point for customization after application launch.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor clearColor];

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];
self.window.rootViewController = nav;

//初始化极光推送
[self initJPushWithOptions:launchOptions];

[self.window makeKeyAndVisible];
return YES;

}
//初始化极光推送
- (void)initJPushWithOptions:(NSDictionary *)launchOptins{

//注册APNS类型

if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1

if (PNCisIOS8Later) {//ios 8
    [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                   UIUserNotificationTypeSound |
                                                   UIUserNotificationTypeAlert)
                                       categories:nil];
} else {//ios 7.1
    [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                   UIRemoteNotificationTypeSound |
                                                   UIRemoteNotificationTypeAlert)
                                       categories:nil];
}

else //ios 7.1以下

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

endif

//初始化
[APService setupWithOption:launchOptins];

}
上报我们的deviceToken:
- (void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData )deviceToken{
[APService registerDeviceToken:deviceToken];
NSString *str = [APService registrationID];

}
对收到推送的处理也是在appdelegate.m中进行的,现在不写这个,我们继续注册
4.注册tag值、alias等:
极光推送有若干中推送方式,一是推送全部,意思就是无论是安卓还是iOS都给你推送去;二是根据iOS的tag值取推送,tag可以标记一个群体,比如说你给北大的所有学生标记tag为beida,当然,这不是字符串,是一个NSSet类型的,你给清华的所有学生标记为Qinghua,他们都下载了叫“中南海”的app,现在这个app想给北大的学生推元月6号放假的消息,给清华的学生推元月7号放假的消息,那我们就可以根据事先设定好的tag值去分推,基本上就是这个意思;第三是根据alias(别名)推,这个在实际应用中一般可以用来标记某个用户或者某一小部分用户,给特定的一个人或者一小部分人推消息,接着上个比喻,我想给清华的韩梅梅推消息,告诉她寒假要值班到元月10号才可以回家,或者我想推送给一个寝室的6个人一个消息,那我们就可以实现让她或他们注册号alias,然后我就能进行个推了,alias主要就是这个作用;还有根据registrationID的,这个就是单独的一个设备了,推送到指定的一个设备上。
我demo中是点击按钮就发送注册信息的,点击按钮的事件触发如下:
//点击按钮时候向jpush注册
- (void)registerJpush{
//向jpush注册tag值和alias(别名)
NSString *strTags = [NSString stringWithCString:”PPP” encoding:NSUTF8StringEncoding];
NSSet *tagSet = [[NSSet alloc] initWithObjects:strTags ,nil];
[APService setTags:tagSet alias:@”1060456561” callbackSelector:@selector(tagsAliasCallback:tags:alias:) target:self];

}
//此方法用来检测有没有注册成功
- (void)tagsAliasCallback:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias{

NSLog(@"iResCode:%d,tags:%@,alias:%@",iResCode,tags,alias);

}
实现方法主要目的是用来查看到底有没有注册成功,若成功注册,那么返回的iResCode就是0!否则其他的返回值可以根据官方文档去查找错误原因!
5.收到消息的处理
这个之前说了,要写在appdelegate.m中。主要代码如下:
- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo{
[APService handleRemoteNotification:userInfo];
}
- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
//向服务器上报收到的消息
[APService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
我们可以在这两个方法中对接受到得userInfo进行处理,这个userInfo就是jpush推送来的消息内容,其基本构成如下(拿一个简单的推送)
Printing description of userInfo:
{
“_j_msgid” = 1575147327;
aps = {
alert = b882a106550640a207c82dc8;
badge = 1;
sound = default;
};
}
aps这个字典就是我们收到的推送内容,alert就是具体内容消息!

基本上推送就是这样实现的,时间紧迫,没有粘贴图片,也没有完整阐述玩推送所有内容,这只是简单地集成而已,后期我将继续完善!
有不对的地方请指正,我qq1060456561.

你可能感兴趣的:(iOS第三方集成笔记)