以前一直迷惑,本地推送到底有什么用,后来仔细想了想,确实有用(废话,不然苹果爸爸干嘛开发这个?手动鄙视自己!)
本地通知服务 主要处理基于时间行为的通知。比如定时通知用户该起床撒尿了。
就是这么个用处!嗯,是这样吧?是的!
在iOS10苹果废弃了之前的UILocalNotification
,而采用了新的UserNotifications Framework
来推送通知。现在先说一下iOS10之前的本地推送流程!
iOS 10之前
注册通知
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
发送通知
1 | // 1.创建一个本地通知 |
这里要说一点,就是iOS系统限制了注册本地推送的数量,最大的注册量为64条。
接收推送
- 应用在前台或后台,未被杀死时。
1 | //程序处于前台或后台时调用 |
- 程序已被杀死时
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
iOS 10之后
先导入这个东西#import <UserNotifications/UserNotifications.h>
注册通知
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
发送通知
1 | // 使用 UNUserNotificationCenter 来管理通知 |
通知处理
实现UNUserNotificationCenterDelegate
代理方法:
- 第一个代理方法:
1 | -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{ |
这个方法中的那句话就是,当应用在前台的时候,收到本地通知,是用什么方式来展现。系统给了三种形式:
1 | typedef NS_OPTIONS(NSUInteger, UNNotificationPresentationOptions) { |
- 第二个代理方法:
这个方法是在后台或者程序被杀死的时候,点击通知栏调用的,在前台的时候不会被调用
1 | - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ |