iOS 本地推送
概念
1.推送通知有5种不同的呈现效果
在屏幕顶部显示一块横幅(显示具体内容)
在屏幕中间弹出一个UIAlertView(显示具体内容)
在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
更新app图标的数字(说明新内容的数量)
播放音效(提醒作用)
2.用户也可以决定是否要开启以下4个功能:
显示App图标数字
播放音效
锁屏显示
显示在“通知中心”
3、注意:
发送推送通知时,如果程序正在前台执行,那么推送通知就不会被呈现出来,但是微信在前台的时候也能推送消息,方法是:创建一个view,仿造系统消息通知的样式向下出现,点击后回到根控制器再进行跳转(注意压栈)
点击通知会打开该通知的app
不管程序打开还是关闭,推送都能如期发出
步骤:
1.创建本地通知对象
UILocalNotification *localNotifi = [UILocalNotification new];
2、设置属性
3、调度本地通知 (将本地通知加入本地通知调度池,iOS 7 到这一步完毕,不需要授权)
[[UIApplication sharedApplication] scheduleLocalNotification:localNotifi];
4、 注册通知权限(多个通知只需一次, 建议放在AppDelegate 的
didFinishLaunchingWithOptions方法中) ,iOS8以后必须需要用户授权才可以发送通知
授权效果
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
参数:
settingsForTypes 通知需要更改的东西,可以修改多个地方,
UIUserNotificationType 枚举:
UIUserNotificationTypeNone = 0,
UIUserNotificationTypeBadge = 1 << 0,
//图标标记UIUserNotificationTypeSound = 1 << 1, //声音
UIUserNotificationTypeAlert = 1 << 2, //提醒
categories:用于添加下拉快速回复功能,下面有介绍
5、删除通知(如果设置了 repeatInterval 重复属性,注意手动删除通知对象)
两种方式:
(1)删除当前程序注册的所有通知,不重复的也会被取消
[[UIApplication sharedApplication] cancelAllLocalNotifications];
(2) 删除指定的通知,一般用于取消重复的通知或者还没有被调用的通知,先获取通知,再遍历根据条件去删除(条件是 UserInfo 的值,是发送通知时所携带的参数)
NSArray *notifiArray = [[UIApplication sharedApplication] scheduledLocalNotifications];for (UILocalNotification *local in notifiArray) {
//将来可以根据UserInfo的值,来查看这个是否是你想要删除的通知
if (local.userInfo) { //删除单个通知
[[UIApplication sharedApplication]cancelLocalNotification:local];
}
}
UIApplication 方法
1、调度本地推送通知(调度完毕后,推送通知会在特定的时间fireDate发出)
[[UIApplication sharedApplication] scheduleLocalNotification:localNotifi];
2、获取被调度的所有本地推送通知
注意:已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除
@property(nullable,nonatomic,copy) NSArray *scheduledLocalNotifications;
3、取消调度本地推送通知
- (void)cancelAllLocalNotifications;
- (void)cancelLocalNotification:(UILocalNotification *)notification;
4、立即发出本地推送通知
[[UIApplication sharedApplication]presentLocalNotificationNow:localNotifi];