iOS 本地通知

1.注册本地通知

//创建本地通知
- (void)requestAuthor
{
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
    // 设置通知的类型可以为弹窗提示,声音提示,应用图标数字提示
        UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
        // 授权通知
        [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //本地推送
    [self requestAuthor];
    return YES;
}
2.发送本地通知

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 1.创建通知
    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    // 2.设置通知的必选参数
    // 设置通知显示的内容
    localNotification.alertBody = @"本地通知测试";
    // 设置通知的发送时间,单位秒
    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];
    //解锁滑动时的事件
    localNotification.alertAction = @"别磨蹭了!";
    //收到通知时App icon的角标
    localNotification.applicationIconBadgeNumber = 1;
    //推送是带的声音提醒,设置默认的字段为UILocalNotificationDefaultSoundName
    localNotification.soundName = UILocalNotificationDefaultSoundName;
    // 3.发送通知(? : 根据项目需要使用)
    // 方式一: 根据通知的发送时间(fireDate)发送通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    
    // 方式二: 立即发送通知
    // [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
3.本地通知常用属性

fireDate:启动时间
timeZone:启动时间参考的时区
repeatInterval:重复推送时间(NSCalendarUnit类型),0代表不重复
repeatCalendar:重复推送时间(NSCalendar类型)
alertBody:通知内容
hasAction:是否显示锁屏时 slider 文字,默认为YES,以及提醒的按钮文字

alertAction:解锁滑动时的事件
alertLaunchImage:启动图片,设置此字段点击通知时会显示该图片
alertTitle:通知标题,适用iOS8.2之后
applicationIconBadgeNumber:收到通知时App icon的角标
soundName:推送是带的声音提醒,设置默认的字段为UILocalNotificationDefaultSoundName
userInfo:发送通知时附加的内容
category:此属性和注册通知类型时有关联,(有兴趣的同学自己了解,不详细叙述)适用iOS8.0之后

region:带有定位的推送相关属性,具体使用见下面【带有定位的本地推送】适用iOS8.0之后
regionTriggersOnce:带有定位的推送相关属性,具体使用见下面【带有定位的本地推送】适用iOS8.0之后

4.删除通知

(1)删除当前程序注册的所有通知,不重复的也会被取消
[[UIApplication sharedApplication] cancelAllLocalNotifications];
(2) 删除指定的通知,一般用于取消重复的通知或者还没有被调用的通知,先获取通知,再遍历根据条件去删除(条件是 UserInfo 的值,是发送通知时所携带的参数)

NSArray *notifiArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
for (UILocalNotification *local in notifiArray) {
    //将来可以根据UserInfo的值,来查看这个是否是你想要删除的通知
    if (local.userInfo) {
        //删除单个通知
        [[UIApplication sharedApplication]cancelLocalNotification:local];
    }
}
5.接受本地通知

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
6.后台到前台时,处理通知

 
 
// 处理退出后通知的点击,程序启动后获取通知对象,如果是首次启动还没有发送通知,那第一次通知对象为空,没必要去处理通知(如跳转到指定页面) if (launchOptions[ UIApplicationLaunchOptionsLocalNotificationKey]) { UILocalNotification *localNotifi = launchOptions[ UIApplicationLaunchOptionsLocalNotificationKey]; [ self changeLocalNotifi:localNotifi]; }
 
 
- ( void)changeLocalNotifi:( UILocalNotification *)localNotifi{ // 如果在前台直接返回 if ([ UIApplication sharedApplication].applicationState == UIApplicationStateActive) { return; } // 获取通知信息 NSString *selectIndex = localNotifi.userInfo[ @"selectIndex"]; // 获取根控制器TabBarController UITabBarController *rootController = ( UITabBarController *) self.window.rootViewController; // 跳转到指定控制器 rootController.selectedIndex = [selectIndex intValue]; }







猜你喜欢

转载自blog.csdn.net/weixin_40873814/article/details/78986827