博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
本地通知
阅读量:6552 次
发布时间:2019-06-24

本文共 3248 字,大约阅读时间需要 10 分钟。

UILocalNotification *notification = [[UILocalNotification alloc] init];

// 设置触发通知的时间

NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:4];

NSLog(@"fireDate=%@",fireDate);

 

notification.fireDate = fireDate;

// 时区

notification.timeZone = [NSTimeZone defaultTimeZone];

// 设置重复的间隔

notification.repeatInterval = kCFCalendarUnitSecond;

 

// 通知内容

notification.alertBody =  @"美肤计划开始了!";

notification.applicationIconBadgeNumber = 1;

// 通知被触发时播放的声音

notification.soundName = UILocalNotificationDefaultSoundName;

// 通知参数

NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"" forKey:@"key"];

notification.userInfo = userDict;

 

// ios8后,需要添加这个注册,才能得到授权

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {

    UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type

                                                                             categories:nil];

    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

    // 通知重复提示的单位,可以是天、周、月

    notification.repeatInterval = NSCalendarUnitDay;

} else {

    // 通知重复提示的单位,可以是天、周、月

    notification.repeatInterval = NSCalendarUnitSecond;

}

// 执行通知注册

[[UIApplication sharedApplication] scheduleLocalNotification:notification];

 

 

在delegate中回调方法

// 本地通知回调函数,当应用程序在前台时调用

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    NSLog(@"noti:%@",notification);

    

    // 这里真实需要处理交互的地方

    // 获取通知所带的数据

    NSString *notMess = [notification.userInfo objectForKey:@"key"];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知(前台)"

                                                    message:notMess

                                                   delegate:nil

                                          cancelButtonTitle:@"OK"

                                          otherButtonTitles:nil];

    [alert show];

    // 更新显示的徽章个数

    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;

    badge--;

    badge = badge >= 0 ? badge : 0;

    [UIApplication sharedApplication].applicationIconBadgeNumber = badge;

    

    // 在不需要再推送时,可以取消推送

    [HomeViewController cancelLocalNotificationWithKey:@"key"];

}

 

//本地通知

// 取消某个本地推送通知

+ (void)cancelLocalNotificationWithKey:(NSString *)key {

    // 获取所有本地通知数组

    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];

                break;

            }

        }

    }

}

 

 

设置的时间到了以后,会自动在桌面弹出一个提示框,点显示后,就可以启动软件。然后在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if (localNotif)

    {

        NSLog(@"Recieved Notification %@",localNotif);

        NSDictionary* infoDic = localNotif.userInfo;

        NSLog(@"userInfo description=%@",[infoDic description]);

        NSString* codeStr = [infoDic objectForKey:CODE];

    }

}里,对lanchOptions进行处理,找到它里面的信息,就可以拿到设置时的需要处理的东西,就可以继续操作了。

 

如果此时你的客户端 软件仍在打开,则会调用

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif

{

    

}

一样的处理方法。

转载于:https://www.cnblogs.com/tian-sun/p/5019842.html

你可能感兴趣的文章
python实用小工具介绍
查看>>
常见下载节点
查看>>
ibatis快速入门(一)
查看>>
深度学习梯度消失或爆炸问题
查看>>
python-opencv boundingRect使用注意
查看>>
newlisp 注释生成文档
查看>>
MySQL float 与decimal 各中的区别。
查看>>
PHP中set_magic_quotes_runtime()和get_magic_quotes_gpc()
查看>>
The sound of silence引发的关于互联网以及教育的利弊思考
查看>>
普华永道全球CEO报告:巴西企业家对未来预期改善
查看>>
自制Kindle电子书转化的实用技巧
查看>>
PyCon 2018:Facebook如何在4年间全面转向Python3?
查看>>
Flutter 布局(三)- FittedBox、AspectRatio、ConstrainedBox详解
查看>>
OkHttp 知识梳理(3) OkHttp 之缓存基础
查看>>
React Native填坑之旅--Stateless组件
查看>>
技术沙龙|区块链商用落地的策略与技术坑-区块链扩展和Fabric商用(杭州)
查看>>
java读写文件大全
查看>>
Spring的常用注解
查看>>
我的友情链接
查看>>
java 防止 XSS 攻击的常用方法总结
查看>>