iOS本地通知

众所周知,iOS中的通知推送分为:本地和远程两种。本地推送主要用于日历闹钟等提醒类应用中,APNS远程推送以后专门写一篇介绍,本文暂时按下不表。今天的主角是:UILocalNotification

启动通知

创建一个本地通知:

    //本地通知
    UILocalNotification *localNoti = [[UILocalNotification alloc] init];
    //时区
    localNoti.timeZone = [NSTimeZone defaultTimeZone];
    //触发时间
    localNoti.fireDate = [NSDate dateWithTimeIntervalSinceNow:10.0];
    //重复间隔
    localNoti.repeatInterval = kCFCalendarUnitSecond;
    //通知内容
    localNoti.alertBody = @"欢迎来到英雄联盟";
    //通知声音
    localNoti.soundName = UILocalNotificationDefaultSoundName;
    //通知徽标
    [UIApplication sharedApplication].applicationIconBadgeNumber += 1;
    //通知参数
    localNoti.userInfo = [NSDictionary dictionaryWithObject:@"传递信息内容" forKey:@"通知的Key"];
    //发送通知:
    [[UIApplication sharedApplication] scheduleLocalNotification:localNoti];

想要通知有效,需要在 application: didFinishLaunchingWithOptions:注册通知


//注册通知:
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        
        UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
        
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }

效果图如下:

IMG_0127.jpg
IMG_0128.jpg
IMG_0129.jpg

收到通知后的处理可以写在方法 *application:(UIApplication )application didReceiveLocalNotification: 里面:


UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"本地通知" message:[notification.userInfo allValues].firstObject preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cacel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"取消");
    }];
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"确认");
    }];
    [alert addAction:cacel];
    [alert addAction:action];
    
    [self.window.rootViewController presentViewController:alert animated:YES completion:nil];

取消通知

取消一个本地通知:


// 获取所有本地通知数组
    NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
    
    for (UILocalNotification *notification in localNotifications) {
        NSDictionary *userInfo = notification.userInfo;
        if (userInfo) {
            // 根据设置通知参数时指定的key来获取通知参数
            NSString *info = userInfo[key];
            
            // 如果找到需要取消的通知,则取消
            if (info != nil) {
                [[UIApplication sharedApplication] cancelLocalNotification:notification];
                //图标的数字清零
                ([UIApplication sharedApplication].applicationIconBadgeNumber >= 1) ?([UIApplication sharedApplication].applicationIconBadgeNumber -= 1):0 ;
                break;
            }
        }
    }

最后

Demo_Git地址

推荐阅读更多精彩内容

  • iOS 本地通知和远程推送 推送通知的应用,可以推送最新的消息给用户,获得更多的关注。推送分为本地推送和远程推送两...
    李小六_阅读 877评论 0 6
  • 一、苹果中的几种通知 1、广播通知(NSNotificationCenter) 1)实现一个对象对多个对象的通信 ...
    爱__LOVE阅读 320评论 0 1
  • 应用程序必须进行适当配置,才可以接受本地或远程通知。配置过程在iOS和OS X略有不同,但基本原理是相同的。在启动...
    shenzhenboy阅读 722评论 1 2
  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 3,458评论 12 16
  • 亲爱的王漂亮同学: Hello,其实我想要把我想说的话写成信或者是一个很长很长的短信发给你,但是,请原谅,我只能在...
    辰起又辰落阅读 38评论 0 0