ios开发之 本地通知

在iOS开发中,通知也叫消息机制。消息机制包括两种,一种是本地通知,另一种是远程通知。本文我们着重理解本地通知,远程通知会在iOS开发之 远程推送 一文做出详解。

本地通知是由APP直接发送到当前设备上的,不用网络。常见应用:闹钟,日历待办事项提醒,应用转至后台运行提示,关注的新闻资讯更新等等。
//添加本地通知

-(void)addLocalNotification{
    //定义本地通知对象
    UILocalNotification *notification = [[UILocalNotification alloc]init];
    //通知触发时间,10s之后
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1.0];
    //设置重复通知间隔 0代表不重复
    notification.repeatInterval = kCFCalendarUnitSecond;
    //设置时区
    notification.timeZone = [NSTimeZone defaultTimeZone];
    //设置标题
    notification.alertTitle = @"我是第一个应用通知";
    //通知主体
    notification.alertBody = @"我就是要通知的内容";
    //应用程序右上角显示的未读消息数
    notification.applicationIconBadgeNumber = 1;
    //待机界面的滑动动作提示
    notification.alertAction = @"打开应用";
    //通过点击通知打开应用时的启动图片,这里使用程序启动图片
    notification.alertLaunchImage = @"Default";
    //收到通知时播放的声音,默认消息声音
    notification.soundName=UILocalNotificationDefaultSoundName;
    //notification.soundName=@"msg.caf";//通知声音(需要真机才能听到声音)
    
    //设置用户信息
    notification.userInfo = @{@"id":@1,@"user":@"XF"};
    
    //调用通知
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];  
}

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

- (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;
    
    // 在不需要再推送时,可以取消推送
    //[self removeNotification:@"key"];
}

pragma mark - 移除本地通知,在不需要此通知时记得移除

注意:
1.本地通知再重复的时间间隔内最多存在64条,当超过这个数量,就会被系统忽略,也就不起作用了
2.本地通知不是存在沙盒中,所以不管卸载APP还是,Bundle ID 不变,通知就不会变。

-(void)removeNotification:(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;
            }
        }
    }
}

AppDelegate.m中

- (void)applicationWillEnterForeground:(UIApplication *)application {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//进入前台取消应用消息图标
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,522评论 7 249
  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 6,764评论 10 16
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,939评论 25 708
  • 《思緒河》 開:思緒升華會成那座 古老的河 河的兩岸都是段段 不聽的說 說不出口的都有腦裡 唱出這歌 思緒 升華 ...
    向昕阅读 225评论 3 7
  • ——2016年12月8日夜一高中 幽蓝广袤的天空 初七八的半月 孤独的闪着清冷的光辉 高楼的窗口 射出点点灯光 我...
    郑江涛_6343阅读 224评论 0 3