首先要在AppDelegate申请授权
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// iOS8后, 主动申请用户授权
// 配置需要使用的本地通知的类型
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
// 注册本地通知 (申请用户授权)
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
return YES;
}
然后
#import "ViewController.h"
NSString * TestLocalNotificationKey = @"TestLocalNotificationKey";
@interface ViewController ()
@end
@implementation ViewController
// 添加通知按钮响应事件
- (IBAction)addNotificationBtnAction:(id)sender
{
// [self baseUsage];
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.userInfo = @{TestLocalNotificationKey : @"LocalNotification 测试, QQ图标"};
notification.alertBody = @"美女: 人家好想你啊, 今晚来不?";
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:3];
// 设置通知标题, 在通知中心与AppleWatch上可以查看
notification.alertTitle = @"AppleWatch";
// 了解即可, 配置重复触发本地通知的时间间隙, 小于分钟的值无效,
// 默认值为0, 只触发一次, 被调度后就会从通知调度池中移除
// 重复触发的本地通知, 被调度后不会从通知调度池中移除
notification.repeatInterval = NSCalendarUnitMinute;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
// 移除指定通知事件
- (IBAction)cancelSpecifyNotificationAction:(id)sender
{
// 取消调度池中指定本地通知, 使用userInfo来判断
// 获取通知调度池中所有的本地通知
NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
// 遍历通知调度池中所有的本地通知
for (UILocalNotification *notification in notifications) {
// 遍历每个本地通知的userInfo中所有key值
[notification.userInfo enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
if ([key isEqualToString:TestLocalNotificationKey]) {
// 如果本地通知的Key值匹配, 则取消该本地通知的调度
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}
}];
}
}
// 移除所有通知事件
- (IBAction)cancelAllNotificationAction:(id)sender
{
// 取消通知调度池中所有的本地通知
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 获取当前通知调度池中的本地通知
NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
NSLog(@"LocalNotifations : %@", notifications);
}
- (void)baseUsage
{
/**
iOS7 会自动弹出用户授权窗口
iOS8 需要App主动去申请本地通知授权, (一般在AppDelegate中申请授权)
*/
// UILocalNotification 表示本地通知, 可以在指定时间进行通知( 提示信息, 声音, 图标边缘数字提示)
// 1. 创建本地通知对象
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
// 2. 配置通知的内容与方式 (需要先注册相关通知方式的授权)
// 2.1 设置通知内容
localNotification.alertBody = @"滴滴拉屎: 发现周边户主闲置的厕所";
// 2.2 设置通知时间
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
// 2.3 设置提示音 (模拟器没有默认提示音)
// UILocalNotificationDefaultSoundName系统默认提示音 / 存放在MainBundle中音效文件的名称
localNotification.soundName = UILocalNotificationDefaultSoundName;
// 2.4 设置用户图标边缘的数字
localNotification.applicationIconBadgeNumber = 1;
// 3. 将通知对象添加到通知调度池
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
@end