一、推送通知有5种不同的呈现效果
1、在屏幕顶部显示一块横幅(显示具体内容)
2、在屏幕中间弹出一个UIAlertView(显示具体内容)
3、在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
4、更新app图标的数字(说明新内容的数量)
5、播放音效(提醒作用)
二、如何发出本地推送通知
1、创建本地推送通知对象
UILocalNotification *ln = [[UILocalNotification alloc] init];
2、设置本地推送通知属性
(1)推送通知的触发时间(何时发出推送通知)
@property(nonatomic,copy) NSDate *fireDate;
(2)推送通知的具体内容
@property(nonatomic,copy) NSString *alertBody;
(3)在锁屏时显示的动作标题(完整标题:“滑动来” + alertAction)
@property(nonatomic,copy) NSString *alertAction;
(4)音效文件名
@property(nonatomic,copy) NSString *soundName;
(5)app图标数字
@property(nonatomic) NSInteger applicationIconBadgeNumber;
(6)每隔多久重复发一次推送通知
@property(nonatomic) NSCalendarUnit repeatInterval;
(7)点击推送通知打开app时显示的启动图片
@property(nonatomic,copy) NSString *alertLaunchImage;
(8)附加的额外信息
@property(nonatomic,copy) NSDictionary *userInfo;
(9)时区
@property(nonatomic,copy) NSTimeZone *timeZone;
(一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)
(10)在通知中心里显示的标题
@property(nonatomic,copy) NSString *title;
(11)显示滑动解锁的按钮:设置成no,则显示“滑动来查看”,不显示用户设定的内容
@property(nonatomic) BOOL *hasAction;
3、推送通知的发出
(1)调度本地推送通知(调度完毕后,推送通知会在特地时间fireDate发出)
[[UIApplication sharedApplication] scheduleLocalNotification:ln];
(2)获得被调度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray *scheduledLocalNotifications;
(已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除)
(3)取消调度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification *)notification;
- (void)cancelAllLocalNotifications;
(4)立即发出本地推送通知
- (void)presentLocalNotificationNow:(UILocalNotification *)notification;
三、点击本地推送通知
1、当用户点击本地推送通知,会自动打开app,这里有2种情况
(1) 状态:app并没有关闭,一直隐藏在后台
操作:让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
(2) 状态:app已经被关闭(进程已死)
操作:启动app,启动完毕会调用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
2、关于页面跳转的逻辑判断(要进行程序所处状态的逻辑判断)
(1)程序在前台运行时,不需要根据本地推送进行跳转操作
(2)程序在后台运行时,跳转到通知逻辑指定的页面
(3)程序关闭时,跳转到通知逻辑指定的页面
(4)程序第一次运行(本地推送还没有发生),是不需要加载推送通知逻辑的
四、关于注册通知(获得许可)
1、在iOS 8.0中,如果要使用本地通知,需要得到用户的许可
2、设置方式
(1)设置setting
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
(2)应用程序对象注册推送
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
(3)关于分类categories
通过分类可以给推送通知添加快捷回复,包括按钮和文本框
五、category的设置
1、在通知处显示按钮,可以点击进行快捷回复,默认会回到程序中。另外可以设置快捷回复的文本框,进行信息发送。
2、设置
(1)配置可变的category对象
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc]init];
(2)设置标识符
category.identifier = @"cate";
(3)为category 准备 action(动作按钮),这点类似 alertViewController
UIMutableUserNotificationAction*action = [[UIMutableUserNotificationAction alloc]init]; action.title = @“已阅读”; action.identifier = @"action1”; //让按钮的响应在后台处理,不用跳转到应用程序中去 action.activationMode = UIUserNotificationActivationModeBackground; //true时,用户在点击动作之前必须确认自己的身份 action.authenticationRequired = NO; //在通知中心显示不同背景颜色 action.destructive = NO;
(4)设置快捷回复的文本框,点击按钮出现输入文本框进行快捷回复
action.behavior = UIUserNotificationActionBehaviorTextInput;
(5)添加动作到分类
[category setActions:@[action1,action2] forContext:UIUserNotificationActionContextDefault];
(6) 在注册通知的时候,添加分类进去
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:[NSSet setWithObjects:category, nil]];
[[UIApplication sharedApplication]registerUserNotificationSettings:setting];
3、动作按钮的响应(application的代理方法)
(1)动作按钮的响应事件————不带文本框信息
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler if ([identifier isEqualToString:@"action1”]) { //点击了标记已读 NSLog(@"点击了标记已读"); } if ([identifier isEqualToString:@"action2”]) { //点击了删除 NSLog(@"点击了删除"); } //这里执行一下block completionHandler(); }
(2)动作按钮的响应事件————快捷回复带文本框信息
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler { if ([identifier isEqualToString:@"action2”]) { //点击了标记已读 //注意key NSLog(@"%@",responseInfo[UIUserNotificationActionResponseTypedTextKey]); } completionHandler(); }