美文网首页
ios开发之 本地通知

ios开发之 本地通知

作者: 墨凌风起 | 来源:发表于2017-05-23 16:29 被阅读305次

    在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开发之 本地通知

          本文链接:https://www.haomeiwen.com/subject/cshgxxtx.html