ios 开发之本地推送

网络推送可能被人最为重视,但是本地推送有时候项目中也会运用到;

闲话少叙,代码如下:

1、添加根视图

self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

2、本地创建一个button进行触发

button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(20, 100, WIDTH - 40, 50);
    button.backgroundColor = [UIColor blueColor];
    [button setTitle:@"开始啦" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    //绑定方法
    [button addTarget:self action:@selector(noticClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];

3、注册一个通知

//设置本地通知 传一个时间进去
+ (void)registerLocalNotification:(NSInteger)alertTime
{
    UILocalNotification *notification = [[UILocalNotification alloc]init];
    //设置触发通知的时间
    NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];
    NSLog(@"fireDate=%@",fireDate);
    
    notification.fireDate = fireDate;
    //时区
    notification.timeZone = [NSTimeZone defaultTimeZone];
    //设置重复的间隔
    notification.repeatInterval = kCFCalendarUnitSecond;
    
    //通知内容
    notification.alertBody = @"该起床了...";
    notification.applicationIconBadgeNumber = 1;
    //通知被触发时播放的声音
    notification.soundName = UILocalNotificationDefaultSoundName;
    //通知参数
    NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"起床了,开始学习了ios开发了" forKey:@"key"];
    notification.userInfo = userDict;
    
    //ios8 以后,需要添加这个注册,才能得到授权
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
                                                                                 categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        // 通知重复提示的单位,可以是天、周、月
        notification.repeatInterval = NSCalendarUnitDay;
    } else {
        // 通知重复提示的单位,可以是天、周、月
        notification.repeatInterval = NSDayCalendarUnit;
    }

    //执行通知注册
    [[UIApplication sharedApplication]scheduleLocalNotification:notification];
    
}

4、调用这个方法

-(void)noticClick:(id)sender
{
    //调用通知
    [ViewController registerLocalNotification:4];//4秒钟后
}

5、取消通知的方法

//取消某个本地推送通知
+(void)cancelLocalNotificationWithKey:(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;
            }
            
        }
    }
}

6、调用这个方法

//本地通知回调函数,当应用程序在前台时调用
-(void)application:(UIApplication *)application didReceiveLocalNotification:(nonnull UILocalNotification *)notification
{
    NSLog(@"notif:%@",notification);
    
    //这里真是需要处理交互的地方
    //获取通知所带的数据
    NSString *notMes = [notification.userInfo objectForKey:@"key"];
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"本地通知(前台)" message:notMes delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
    
    //更新显示的角标个数
    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
    badge--;
    badge = badge >= 0 ? badge : 0;
    [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
    
    //在不许要再推送时,可以取消推送
    [ViewController cancelLocalNotificationWithKey:@"key"];
}

 

posted @ 2016-08-12 11:51  稻草人11223  阅读(199)  评论(0编辑  收藏  举报
返回顶部