本文主要是介绍iOS10的推送框架UserNotifications以及UserNotificationsUI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
iOS10发布以来,相信各位开发者能踩的坑也应该踩得差不多了;但也许正是因为每次苹果都会更新比较多的东西,才会觉得搞iOS很有意思吧。(不知道大家会不会觉得楼主这种想法有点坑?)
推送是iOS10系统变动比较大的一个地方,对于这种大变动不瞅瞅一下着实不符合楼主的性格,那么楼主就在求知欲的推动下(毕竟还得给自己的项目进行适配不是..)就花了点时间对UserNotifications这个框架进行了一个整体的了解,希望在这里记录一下,希望能够帮助对这个框架有兴趣的小伙伴。
如果大家的项目中推送是使用了极光、友盟等第三方推送,那么请根据他们的官方文档以及最新的SDK对iOS10进行适配即可,跟着文档一步一步走也比较简单。但是如果想要真实的了解原框架的流程,建议还是使用原生推送吧,楼主本文博客下使用的就是原生推送。
如何配置原生推送,推荐有梦想的蜗牛 一步一步教你做ios推送,这位博主写的很详细,虽然开发者界面已经不是那样子了,但实质的东西还是没有变化的。如果按照推荐博文的配置(!一定要确认所有的配置都没有问题!),但依旧收不到远程推送,那么估计就和楼主一样“中奖”了,可能是PHP端交互出问题了,这个时候推荐大家使用PushMeBody来完成远程推送。(使用PushMesBody中的device token直接复制打印的device token即可,不需要去掉空格)
为了能够区分它与之前用法的异同,楼主还是尽可能的想通过比较的方法实现推送的相关功能。
所有coding都在 RITL/RITLPushNoticationDemo(如果有帮助,请Star表示支持一下,感谢)。
如果有什么问题,也请及时指出,共同进步,感谢。
推送的注册
注册的位置没有任何的变化,是在Appdelegate中的-application: didFinishLaunchingWithOptions:
方法里面进行注册,楼主为了简化它的代码,将注册功能封装成了一个RITLNotificationManager
类,所以该方法下只需一句话即可:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.//初始化个数[UIApplication sharedApplication].applicationIconBadgeNumber = 0;//注册所有的推送[[RITLNotificationManager sharedInstance]registerRemoteNotificationsApplication:self];return YES;
}
注册具体代码实现
RITLNotificationManager的声明(楼主在声明文件中使用了预编译进行方法的声明,实际的开发中建议不要这么写,将方法分开便是,不同的版本使用不同的方法即可)以及实现方法如下:
//RITLNotificationManager.h(实际Demo中它在"RITLOriginPushAppDelegate+RITLNotificationManager.h"文件下)/// 注册远程推送
#ifdef __IPHONE_10_0
- (void)registerRemoteNotificationsApplication:(id<UNUserNotificationCenterDelegate>)application;
#else
- (void)registerRemoteNotificationsApplication:(id)application;
#endif
//RITLOriginPushAppDelegate+RITLNotificationManager.m#ifdef __IPHONE_10_0
-(void)registerRemoteNotificationsApplication:(id<UNUserNotificationCenterDelegate>)application
#else
- (void)registerRemoteNotificationsApplication:(id)application
#endif
{
#ifdef __IPHONE_10_0//设置代理对象[UNUserNotificationCenter currentNotificationCenter].delegate = application;// 请求权限[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {if (granted == true)//如果准许,注册推送{[[UIApplication sharedApplication]registerForRemoteNotifications];} }];#else#ifdef __IPHONE_8_0 //适配iOS 8[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]];[[UIApplication sharedApplication]registerForRemoteNotifications];#else //适配iOS7[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
#endif#endif
}
注册完毕进行的回调
这一部分iOS10没有发生变化,还是和之前一样,分为注册成功以及注册失败两个协议方法,方法就在类别RITLOriginPushAppDelegate+RITLNotificationManager
:
// 注册推送成功
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{// NSLog(@"token = %@",deviceToken);// 将返回的token发送给服务器
}// 注册推送失败
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{NSLog(@"remoteNotice failture = %@",error.localizedDescription);
}
UserNotifications以前接收推送消息
在Demo中对AppDelegate新建了一个类别"RITLOriginPushAppDelegate+RITLOldNotification"
来完成对之前推送消息的接收以及处理:
//通过点击远程推送进入App执行的方法,不管是应用被杀死还是位于后台
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{//收到的信息NSLog(@"%@",[[userInfo valueForKey:@"aps"] valueForKey:@"alert"]);[self performSelector:NSSelectorFromString(@"__showAlert:") withObject:@"通过点击推送进入App" afterDelay:0];
}
// 在前台收到远程推送执行的方法,如果实现了iOS10的协议方法,该方法不执行,虽然没有标明废弃
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result)
这篇关于iOS10的推送框架UserNotifications以及UserNotificationsUI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!