iOS 本地通知

如果用户长时间没有使用我们的APP,我们就需要提醒用户来使用。这个本地通知就可以做到。

先说明一下我的解决思路:在AppDelegate里面写

1,当用户退出app时创建一个通知,一定时间后调用,比如10秒。

//进入后台响应的方法 
- (void)applicationDidEnterBackground:(UIApplication *)application
{

    // 初始化本地通知对象
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    if (notification) {
        // 设置通知的提醒时间
        NSDate *currentDate   = [NSDate date];
        notification.timeZone = [NSTimeZone defaultTimeZone]; // 使用本地时区
        notification.fireDate = [currentDate dateByAddingTimeInterval:10];
    
        
        // 设置提醒的文字内容
        notification.alertBody   = @"您一周都没有关注宝宝了,快来看看!";
        notification.alertAction = NSLocalizedString(@"关心宝宝", nil);
        
        // 通知提示音 使用默认的
        notification.soundName= UILocalNotificationDefaultSoundName;
        
        // 设置应用程序右上角的提醒个数
        notification.applicationIconBadgeNumber++;
        
        // 设定通知的userInfo,用来标识该通知
        
        NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:@"notification",@"nfkey",nil];
        [notification setUserInfo:dict];
        // 将通知添加到系统中
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    }

    
}

2,在收到通知,点击进入应用的时候取消通知,讲外面显示的数字赋值为0,application.applicationIconBadgeNumber=0;

didReceiveLocalNotification是app在前台运行,通知时间到了,调用的方法。如果程序在后台运行,时间到了以后是不会走这个方法的。

applicationDidBecomeActive是app在后台运行,通知时间到了,你从通知栏进入,或者直接点app图标进入时,会走的方法。

- (void)applicationDidBecomeActive:(UIApplication *)application {
    
    
    application.applicationIconBadgeNumber=0;
    
 
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

    application.applicationIconBadgeNumber=0;
    //取消通知
    for (UILocalNotification *noti in [application scheduledLocalNotifications]) {
        NSString *notiID = [noti.userInfo objectForKey:@"nfkey"];
        
        if ([notiID isEqualToString:@"notification"]) {
            [application cancelLocalNotification:noti];
        
        }
    }
}

3,当用户在没收到通知进入应用的时候取消通知。原因:当你第一次退出程序,就会创建一个通知a,10秒后推送,如果在这10秒内,重新登录退出又会创建 新的通知b,那么我们会连续收到两个通知。为了避免重复,在通知a时间还没有到情况下登录app我们就取消通知a,退出时创建通知b。

- (void)applicationWillEnterForeground:(UIApplication *)application
{
  //取消所有通知
    [application cancelAllLocalNotifications];
    
}

如果想要重复调用这个通知,

// 设置重复间隔

notification.repeatInterval = kCFCalendarUnitDay;

参考:http://www.2cto.com/kf/201403/285612.html

http://www.cnblogs.com/lan0725/p/3195263.html

demo下载:https://github.com/wangdachui/WTUILocalNotification

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏娱乐心理测试

SDWebImage源码解读(一)

SDWebImage 是目前最流行、使用最广泛的第三方图片处理框架,它不仅能够异步加载网络图片,还提供了一套图片缓存管理机制(内存缓存+磁盘缓存),功能非常强大...

573
来自专栏滕先生的博客

iOS 本地推送概念步骤:属性:点击通知跳到指定控制器界面快捷回复功能(iOS 8以后可用), category 属性的使用方法

3406
来自专栏向治洪

React Native之打包

用React Native开发好APP之后,如何将APP发布到市场以供用户使用呢?不管是Android还是ios等原生app走的都是:签名打包—>发布到各sto...

3216
来自专栏pangguoming

在AngularJS应用中实现认证授权

在AngularJS应用中实现认证授权 在每一个严肃的应用中,认证和授权都是非常重要的一个部分。单页应用也不例外。应用并不会将所有的数据和功能都 暴露给所有的用...

4327
来自专栏陈满iOS

iOS复习中有关SDWebImage可能知识点总结(1)

例如,SD为UIImageView提供的UIImageView+WebCache.m分类,有这些API:

1122
来自专栏程序员同行者

zabbix告警“Zabbix poller processes more than 75% busy”

2293
来自专栏极客慕白的成长之路

Atom主题插件美化教程

对应的Themes就是可更换的主题。在这一共分为两块,UI Theme和Syntax Theme,一个是UI的,一个是文件语法的,这里可以选择相应的主题。

2292
来自专栏青玉伏案

iOS开发之远程推送

  说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号...

22410
来自专栏青玉伏案

iOS开发之使用XMPPFramework实现即时通信(三)

  你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)和iOS开发之使用XMPPFramewo...

1926
来自专栏前端儿

前端代码乱糟糟?是时候引入代码质量检查工具了

为了统一团队的代码规范,除了一纸规范说明之外,还需要引入工具进行限制。虽说工具并不能完全实现规范中的规则,但至少能够在一定程度上缓解代码不统一的局面。

3301

扫码关注云+社区

领取腾讯云代金券