iOS10 极光推送(远程) 小结
来源:互联网 发布:网络对讲报警机 编辑:程序博客网 时间:2024/05/16 15:50
主要是针对iOS10不同的地方
1 首先要下载2.1.9以及Xcode8的环境 包地址 地址
2 配置Xcode8的服务
3 域名配置
3-1局部配置 这个是看极光的文档 因为2017年之后苹果强制https,所以还是要尽早换比较好
3-2 全局配置
4 需要导入的系统库
UserNotifications.framework
AdSupport.frameWork
Security.frameWork
SystemConfiguration.frameWork
CoreTelephony.frameWork
CoreFoundation.frameWork
CFNetWork.frameWork
UIKit.frameWork
Foundation.frameWork
CoreGraphics.frameWork
libz.tbd
5 导入头文件
#import "JPUSHService.h"
#import <UserNotifications/UserNotifications.h>
加入代理 JPUSHRegisterDelegate (iOS10所需要的)
6 导入sdk之后就是要初始化极光推送的代码
我是简单的封装了一下launchOptions
#pragma mark - 创建极光推送-(void)createJPushFromLaunchOptions:(NSDictionary *)launchOptions{ //注册推送 if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { //可以添加自定义categories#ifdef NSFoundationVersionNumber_iOS_9_x_Max JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init]; entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound; [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];#endif } else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //可以添加自定义categories [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else { //categories 必须为nil [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; } //1 初始化 [JPUSHService setupWithOption:launchOptions appKey:JIGUANGKEY channel:@"" apsForProduction:APSFORPRODUCTION]; //设置推送日志 [JPUSHService setDebugMode]; //2.1.9版本新增获取registration id block接口。 [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { if(resCode == 0){ NSLog(@"registrationID获取成功:%@",registrationID); } else{ NSLog(@"registrationID获取失败,code:%d",resCode); } }];}其中的appKey是app申请极光的
apsForProducation 是发布环境 开发环境的时候就用NO 发布的环境就用YES 上线的时候不要忘了设置 我是用的宏定义 便于处理
然后是注册APNs并向服务器上报
//注册来自远程的推送- (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { //3 向服务器上报Device Token [JPUSHService registerDeviceToken:deviceToken];}注册失败的时候 这个是可选的
//注册来自远程的推送失败- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ NSLog(@"error:%@",error);}
iOS10中对于推送的响应有两种
前台得到的的通知对象
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler;
后台得到的的通知对象(当用户点击通知栏的时候)
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler;
#ifdef NSFoundationVersionNumber_iOS_9_x_Max#pragma mark- JPUSHRegisterDelegate- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler { NSDictionary * userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; //你的逻辑 if ([UIApplication sharedApplication].applicationIconBadgeNumber != 0) { //最后把Iconbadge归0 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; } NSLog(@"iOS10 收到远程通知:%@",userInfo); } completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);}- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { NSDictionary * userInfo = response.notification.request.content.userInfo; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; //你的逻辑 if ([UIApplication sharedApplication].applicationIconBadgeNumber != 0) { //最后把Iconbadge归0 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; } NSLog(@"iOS10 收到远程通知:%@",userInfo); } completionHandler(); // 系统要求执行这个方法}#endif以上就是我集成推送的过程 其中的逻辑按照需求处理即可
其中遇到的细节
1.在iOS10 Xcode8的环境下
对于自定义推送声音的时候
需要删除当前app重新安装,才能接收到
经过网上的资料查询是因为Xcode重新覆盖安装app的时候没有加载本地的音频文件
https://forums.developer.apple.com/thread/49512
2.当注册指定用户推送的时候
[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { if(resCode == 0){ NSLog(@"registrationID获取成功:%@",registrationID); [JPUSHService setAlias:@"12345" callbackSelector:nil object:nil]; } else{ NSLog(@"registrationID获取失败,code:%d",resCode); } }];
因为以上的方法是异步的,所以app启动的时候不一定同步获取registrationID,需要等一段时间,
一定要确保你的registrationID获取到才能成功注册指定用户推送。
相关文档链接
http://docs.jiguang.cn/jpush/resources/#ios-sdk
- iOS10 极光推送(远程) 小结
- iOS10注册极光推送
- iOS10注册极光推送
- iOS10 注册极光推送
- iOS10 注册极光推送(干货)
- iOS10 注册极光推送(干货)
- iOS10注册极光推送(干货)
- iOS10 注册极光推送(干货)
- 极光推送适配iOS10
- 极光推送小结
- 极光远程推送
- iOS10 远程推送适配
- iOS_远程推送(iOS10)_UNNotificationServiceExtension
- iOS_远程推送(iOS10)_UNNotificationContentExtension
- iOS-极光推送开发小结
- iOS-极光推送开发小结
- iOS10 远程推送和本地推送
- iOS远程推送之使用极光推送
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- spring发布和接收定制的事件(spring事件传播)
- your project contains error(s),please fix them before running your application.错误总结
- 用NodeJS完成简单的身份验证
- schedule(schedule_selector(),float)
- iOS10 极光推送(远程) 小结
- 《JAVA与模式》之备忘录模式
- HDU 5901 Count primes
- 在table中tr的display:block显示布局错乱问题
- (0) java的产生和特性简介
- JSP
- Android搜索历史记录按权重显示
- BZOJ 4416: [Shoi2013]阶乘字符串【状压DP
- 线程通信(wait()、notify()、notifyAll() 方法)