IOS-使用本地通知

创建一个本地通知的几个步骤:

  1. 创建UILocalNotification。

  2. 设置处理通知的时间fireDate。

  3. 配置通知的内容:通知主体、通知声音、图标数字等。

  4. 配置通知传递的自定义数据参数userInfo(这一步可选)。

  5. 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用presentLocalNotificationNow立即调用通知。

第一步:在AppDelegate.m的 didFinishLaunchingWithOptions 里面添加权限

// 处理iOS8本地推送不能收到的问题
    float sysVersion=[[UIDevice currentDevice]systemVersion].floatValue;
    if (sysVersion>=8.0) {
        UIUserNotificationType type=UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
        UIUserNotificationSettings *setting=[UIUserNotificationSettings settingsForTypes:type categories:nil];
        [[UIApplication sharedApplication]registerUserNotificationSettings:setting];
    }

第二步:

      (1)在调用了第一步的registerUserNotificationSettings方法后,会执行这个委托方法

      (2)当从桌面,进入到程序时,会执行applicationWillEnterForeground方法

      (3)当程序运行在前台时,这个时候收到通知,会掉用didReceiveLocalNotification这个方法

#pragma mark 调用过用户注册通知方法之后执行(也就是调用完registerUserNotificationSettings:方法之后执行)
-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{    if (notificationSettings.types!=UIUserNotificationTypeNone) {
        [self addLocalNotification];
    }
}


#pragma mark 进入前台后设置消息信息
-(void)applicationWillEnterForeground:(UIApplication *)application{
    [[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];//进入前台取消应用消息图标}
    
//本地通知回调函数,当应用程序在前台时调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
     NSLog(@"noti:%@",notification);
    // 图标上的数字设置为0
    NSLog(@"noti: %@",notification.userInfo);
    application.applicationIconBadgeNumber = 0;
}


第三步:创建一个本地通知,并进行推送

// 进行推送的方法
// 设置本地推送参数,并进行推送
- (void)scheduleNotification{
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    //设置5秒之后
    NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];
    if (notification != nil) {
        // 设置推送时间(5秒后)
        notification.fireDate = pushDate;
        // 设置时区(此为默认时区)
        notification.timeZone = [NSTimeZone defaultTimeZone];
        // 设置重复间隔(默认0,不重复推送)
        notification.repeatInterval = 0;
        // 推送声音(系统默认)
        notification.soundName = UILocalNotificationDefaultSoundName;
        // 推送内容
        notification.alertBody = @"推送主体内容";
        //显示在icon上的数字
        notification.applicationIconBadgeNumber = 1;
        //设置userinfo 方便在之后需要撤销的时候使用
        NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"];
        notification.userInfo = info;
        //添加推送到UIApplication
        UIApplication *app = [UIApplication sharedApplication];
        [app scheduleLocalNotification:notification];
    }
}


第四步:移除本地通知

#pragma mark 移除本地通知,在不需要此通知时记得移除
-(void)removeNotification{
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

第五步:效果如下:

IOS-使用本地通知_第1张图片

IOS-使用本地通知_第2张图片

IOS-使用本地通知_第3张图片


注意:

  • 在使用通知之前必须注册通知类型,如果用户不允许应用程序发送通知,则以后就无法发送通知,除非用户手动到iOS设置中打开通知。

  • 本地通知是有操作系统统一调度的,只有在应用退出到后台或者关闭才能收到通知。(注意:这一点对于后面的推送通知也是完全适用的。 )

  • 通知的声音是由iOS系统播放的,格式必须是Linear PCM、MA4(IMA/ADPCM)、µLaw、aLaw中的一种,并且播放时间必须在30s内,否则将被系统声音替换,同时自定义声音文件必须放到main boundle中。

  • 本地通知的数量是有限制的,最近的本地通知最多只能有64个,超过这个数量将被系统忽略。

  • 如果想要移除本地通知可以调用UIApplication的cancelLocalNotification:cancelAllLocalNotifications移除指定通知或所有通知。





你可能感兴趣的:(IOS-使用本地通知)