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];//进入前台取消应用消息图标
}

你可能感兴趣的:(ios开发之 本地通知)