IOS开发—本地推送

来源:互联网 发布:appium python client 编辑:程序博客网 时间:2024/05/19 11:20

思路介绍

主要考虑以下点

  1. 如何设置推送(包括推送内容、推送时间、推送周期等)
  2. 如何接收推送 考虑3种情况
    1. app在前台运行
    2. app未关闭,在后台运行
    3. app关闭
  3. 接收到推送后如何响应(主要的用户交互在这里)
  4. 如何移除本地推送

代码说明

注册本地通知

/*! *  注册本地通知 */+ (void)registerLocalNotification{    //初始化本地通知    UILocalNotification *localNotification = [[UILocalNotification alloc]init];    //触发通知时间    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:6]; //6s后触发通知    //时区    localNotification.timeZone = [NSTimeZone defaultTimeZone];    //触发通知后弹出警告框中显示的内容    localNotification.alertBody = @"这是一个本地通知";    //触发通知时的声音(这里使用系统的声音)    localNotification.soundName = UILocalNotificationDefaultSoundName;    //设置在app icon右上角显示的未读标识    NSInteger badgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber;    localNotification.applicationIconBadgeNumber = badgeNumber+1;    //设置通知的用户信息(可以用于移除通知,也可以传其他的值到获取通知的方法中)    localNotification.userInfo = @{@"key":@"notification1"};    //ios8后,需要先注册通知类型,才能得到授权    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {        UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];        //触发通知的频率(是一个枚举变量,可以设置每分、每时、每天等)        localNotification.repeatInterval = NSCalendarUnitDay;    } else {        //触发通知的频率(是一个枚举变量,可以设置每分、每时、每天等)        localNotification.repeatInterval = NSDayCalendarUnit;    }    //执行通知计划    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];}

不同情况下本地推送的接收及响应

/*! *  接收到本地通知时的回调(有两种情况会在这里接收到通知推送。一、app在前台运行;二、app在后台运行,用户点击通知栏通知切回前台。注意:如果app在后台运行,用户接收到推送的通知,不是点击通知,而是点击app图标切回到app,是不会触发这个回调的) */- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{    NSLog(@"----------------%@",notification);    //接收到通知后的交互    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];    [alert show];    //更新未读标识    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;    NSLog(@"%zi",badge);    badge--;    badge = badge >= 0 ? badge : 0;    [UIApplication sharedApplication].applicationIconBadgeNumber = badge;    //根据需要移除通知    [ViewController removeLocalNotificationForName:@"notification1"];    // do something else}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.    //当app在关闭情况下接收到本地推送通知时,点击通知栏对应的通知启动app会调用此方法,此时通过langchOptions参数可以获取到记载了本地通知的相关信息。如果是通过点击app图标启动app,也会调用这个方法,但是launchOptions通过UIApplicationLaunchOptionsLocalNotificationKey关键字获取到的本地通知信息为空。    UILocalNotification *localNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey];    if (localNotification) {        //获取本地通知详细信息        NSDictionary *userInfo = localNotification.userInfo;        //通过信息判断为哪条本地通知, 做出相应回应        NSString *key = [userInfo objectForKey:@"key"];        if ([key isEqualToString:@"notification1"]) {            //更新未读标识            NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;            badge--;            badge = badge >= 0 ? badge : 0;            [UIApplication sharedApplication].applicationIconBadgeNumber = badge;            //接收到通知后的交互            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Mark" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];            [alert show];            //根据需要移除通知            [ViewController removeLocalNotificationForName:@"notification1"];            // do something else        }    }    return YES;}

移除本地推送

/*! *  移除本地通知 *  [[UIApplication sharedApplication] cancelAllLocalNotifications]; 可以移除所有本地推送 * *  @param notificationName 本地通知自定义的名字标识 */+ (void)removeLocalNotificationForName:(NSString *)notificationName{    if (!notificationName) {        return;    }    //获取所有本地通知    NSArray *arrayNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;    //遍历所有通知 根据名字标识移除指定通知    for (UILocalNotification *localNotification in arrayNotifications) {        NSDictionary *dic = localNotification.userInfo;        if ([[dic objectForKey:@"key"] isEqualToString:notificationName]) {            [[UIApplication sharedApplication] cancelLocalNotification:localNotification];            NSLog(@"通知 %@ 已移除",notificationName);        }    }}

参考文档:
ios推送:本地通知UILocalNotification
本地推送通知UILocalNotification
iOS本地推送(本地通知)

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 专票税率开高了怎么办 专票税率开错了怎么办 发票姓名写错了怎么办 首付发票姓名写错怎么办 一般纳税人税率开错了怎么办 电子税票开错了怎么办 税率是6%开成3%怎么办 医院收费收错了怎么办 发票少打一个字怎么办 增值税发票抬头错了一个字怎么办 暂估入账跨年了怎么办 电子发票写错了怎么办 发票纳税人识别号写错了怎么办 电子发票忘填邮箱怎么办 公司名跟发票抬头不一样怎么办 买空调不给发票怎么办 卖苹果手机没有发票怎么办 刷机字库刷坏了怎么办 维棠不能播放视频怎么办 m3u8卡顿的厉害怎么办 下载了PDF不能用怎么办 pdf格式在电脑打不开怎么办 电脑上arm格式打不开怎么办 极米桌面无响应怎么办 jpg格式的文件打印模糊怎么办 苹果迅雷mp4格式看不了怎么办 太阳镜镜片磨花了怎么办 ∪盘插上电脑读不出怎么办 网站被路由器屏蔽了怎么办 电脑无法进入路由器设置页面怎么办 笔记本电脑无线网卡坏了怎么办 笔记本内置无线网卡坏了怎么办 笔记本无线网卡坏了怎么办 wif连上不能上网怎么办 手机wifi有个感叹号怎么办 分手不删qq微信怎么办 优盘提示被锁了怎么办 电视无线网卡插上没反应怎么办 光猫没有wan口怎么办 usb无线网卡坏了怎么办 wifi接收器电脑不识别怎么办