iOS 极光推送集成
2018-03-16 00:00
239 查看
最近项目集成推送功能,我把整体的集成步骤及推送功能实现
功能实现: @在登录状态下,才可推送消息成功,退出登录状态,不可推送消息
@应用程序在后台挂起状态下,可实现推送,进入相应界面
@应用程序在前台情况下,无论任何界面,可实现推送给,并进入相应界面--声音设置
@应用程序被杀死,但登录过状态下,还能收到消息
需要在登录时,设置alias,退出登录时,清除alias
#ifdef NSFoundationVersionNumber_iOS_9_x_Max// iOS10注册APNs所需头文件
#import <UserNotifications/UserNotifications.h>
#endif
//#import <AdSupport/AdSupport.h>// 如果需要使用idfa功能所需要引入的头文件(可选)
#define JPushAppKey @"9961aac66c9ee59685fb1d4e"//推送的appkey
#define JPushChannel @"App Store"
#ifdef DEBUG//0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
#define isProduction NO
#else
#define isProduction YES
#endif
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required 收到的推送消息
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
// 添加各种需求。。。。。
//组装并播放音效
SystemSoundID soundID = 1000;
//NSString *path = [[NSBundle mainBundle] pathForResource:@"video_new" ofType:@"caf"];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"video_new" withExtension:@"caf"];
if (url) {
OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)url,&soundID);
if (error != kAudioServicesNoError) {//获取的声音的时候,出现错误
soundID = 1000;
}
}
AudioServicesPlaySystemSound(soundID);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震动
}
completionHandler(UNNotificationPresentationOptionAlert);
// 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
}
//注册APNs成功并上报DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Required - 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
NSLog(@"√√√√√%@",[JPUSHService registrationID]);//同一设备 卸载重新安装登录都不同
//获得注册后的regist_id,此值一般传给后台做推送的标记用,先存储起来
_registerid = [JPUSHService registrationID];
//提交register_id给后台(此方法为后台提供)
if (ApplicationDelegate.isLogin) {
if ([_registerid length]) {
[self giveRegisterId:[JPUSHService registrationID]];
}
}
//设置别名,提交获得的register_id给后台
// 这是极光提供的方法,USER_INFO.userID是用户的id,你可以根据账号或者其他来设置,只要保证唯一便可
NSSet *set2 = [[NSSet alloc] initWithObjects:_registerid, nil];
[JPUSHService setTags:set2 alias:_registerid fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
NSLog(@"设置结果:%i 用户别名:%@",iResCode,@"USER_INFO.userID");
}];
}
[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
NSLog(@"rescode: %ld, \ntags: %@, \nalias: %@\n", (long)iResCode, @"tag" , iAlias);
} seq:0];
扩展:极光推送中的定向推送
极光推送中,不使用广播推送,那么怎样做到定向推送,是开发者和需求一定会出现的问题,极光推送中可以有两个唯一值:
(1)注册Jpush成功后生成的registrationID,这个registrationID是标记设备唯一性的,你发现,当你在启动多次,注册Jpush时,这个值是不变的;在同一个设备上,更换用户登录,这个值仍然不变;最后,你删除应用程序,再下载时启动注册Jpush,这个值还是不变。这就可以定向向某台设备做推送,如果你能给自己的服务器上传这个值,并且给这个值绑定一些东西,是不是可以做更多事情呢。
(2)alias:只要了解极光推送的都知道这是设置别名的,官方文档上说明了这个值不是唯一的,但是建议开发者把它作为用户的唯一标记。我觉得这个作为唯一值是最好的,当你想定向向某个用户做推送,或者召唤他回归我们的应用程序,这个值就太好了。你可以将它设置为userId,这个时候推送就能知道向哪个用户发了。
链接:https://www.jianshu.com/p/6cca682a2892
链接:https://www.jianshu.com/p/6a6166aadfe7
功能实现: @在登录状态下,才可推送消息成功,退出登录状态,不可推送消息
@应用程序在后台挂起状态下,可实现推送,进入相应界面
@应用程序在前台情况下,无论任何界面,可实现推送给,并进入相应界面--声音设置
@应用程序被杀死,但登录过状态下,还能收到消息
需要在登录时,设置alias,退出登录时,清除alias
1.在 JPush的管理Portal 上创建应用并上传APNs证书或通过 APNs Auth Key 鉴权
2.添加头文件到 AppDelegate.m中
#import "JPUSHService.h"// 引入JPush功能所需头文件#ifdef NSFoundationVersionNumber_iOS_9_x_Max// iOS10注册APNs所需头文件
#import <UserNotifications/UserNotifications.h>
#endif
//#import <AdSupport/AdSupport.h>// 如果需要使用idfa功能所需要引入的头文件(可选)
#define JPushAppKey @"9961aac66c9ee59685fb1d4e"//推送的appkey
#define JPushChannel @"App Store"
#ifdef DEBUG//0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
#define isProduction NO
#else
#define isProduction YES
#endif
3.初始化APNs(JPush的注册,初始化都放在此代理方法中实现,app未开启状态下的推送,也会走此代理方法).注册APNs成功并上报DeviceToken给极光服务器 . 设置别名,提交获得的register_id给后台
// iOS 10 Support 推送放放- 播放声音设置- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required 收到的推送消息
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
// 添加各种需求。。。。。
//组装并播放音效
SystemSoundID soundID = 1000;
//NSString *path = [[NSBundle mainBundle] pathForResource:@"video_new" ofType:@"caf"];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"video_new" withExtension:@"caf"];
if (url) {
OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)url,&soundID);
if (error != kAudioServicesNoError) {//获取的声音的时候,出现错误
soundID = 1000;
}
}
AudioServicesPlaySystemSound(soundID);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震动
}
completionHandler(UNNotificationPresentationOptionAlert);
// 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
}
//注册APNs成功并上报DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Required - 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
NSLog(@"√√√√√%@",[JPUSHService registrationID]);//同一设备 卸载重新安装登录都不同
//获得注册后的regist_id,此值一般传给后台做推送的标记用,先存储起来
_registerid = [JPUSHService registrationID];
//提交register_id给后台(此方法为后台提供)
if (ApplicationDelegate.isLogin) {
if ([_registerid length]) {
[self giveRegisterId:[JPUSHService registrationID]];
}
}
//设置别名,提交获得的register_id给后台
// 这是极光提供的方法,USER_INFO.userID是用户的id,你可以根据账号或者其他来设置,只要保证唯一便可
NSSet *set2 = [[NSSet alloc] initWithObjects:_registerid, nil];
[JPUSHService setTags:set2 alias:_registerid fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
NSLog(@"设置结果:%i 用户别名:%@",iResCode,@"USER_INFO.userID");
}];
}
4.在推出登录部分,清除别名,实现推出登录状态获取不到推送消息
//删除推送的alias[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
NSLog(@"rescode: %ld, \ntags: %@, \nalias: %@\n", (long)iResCode, @"tag" , iAlias);
} seq:0];
扩展:极光推送中的定向推送
极光推送中,不使用广播推送,那么怎样做到定向推送,是开发者和需求一定会出现的问题,极光推送中可以有两个唯一值:
(1)注册Jpush成功后生成的registrationID,这个registrationID是标记设备唯一性的,你发现,当你在启动多次,注册Jpush时,这个值是不变的;在同一个设备上,更换用户登录,这个值仍然不变;最后,你删除应用程序,再下载时启动注册Jpush,这个值还是不变。这就可以定向向某台设备做推送,如果你能给自己的服务器上传这个值,并且给这个值绑定一些东西,是不是可以做更多事情呢。
(2)alias:只要了解极光推送的都知道这是设置别名的,官方文档上说明了这个值不是唯一的,但是建议开发者把它作为用户的唯一标记。我觉得这个作为唯一值是最好的,当你想定向向某个用户做推送,或者召唤他回归我们的应用程序,这个值就太好了。你可以将它设置为userId,这个时候推送就能知道向哪个用户发了。
链接:https://www.jianshu.com/p/6cca682a2892
链接:https://www.jianshu.com/p/6a6166aadfe7
相关文章推荐
- iOS集成极光推送,绕过一些坑
- iOS集成极光推送,绕过一些坑
- iOS极光推送集成
- iOS极光推送集成注意事项
- 李洪强iOS之集成极光推送一iOS SDK概述
- iOS 集成极光推送(一)
- 李洪强iOS之集成极光推送二iOS 证书 设置指南
- iOS 集成极光推送教程
- iOS集成极光推送 生产环境收不到推送消息
- 李洪强iOS之集成极光推送三iOS集成指南
- iOS 集成极光推送(二)
- iOS集成极光推送
- iOS极光推送集成
- (转载)iOS 极光推送SDK 集成指南
- swift3.0 集成极光推送(v2.2)iOS10.0最新写法
- iOS集成极光推送 通知 和 自定义消息
- iOS极光推送集成
- iOS 最新版极光推送通知集成图文教程(JPush-3.0.7)
- ios极光推送快速集成教程
- 项目实战:iOS极光推送集成(30分钟搞定)