标签:
// 本地通知回调函数,当应用程序在前台时调用 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { NSLog(@"noti:%@",notification); // 这里真实需要处理交互的地方 // 获取通知所带的数据 NSString *key = [notification.userInfo objectForKey:LocalPushKey]; NSString *title = [notification.userInfo objectForKey:@"title"]; NSString *content = [notification.userInfo objectForKey:@"content"]; NSString *sysVersion = [UIDevice currentDevice].systemVersion; CGFloat version = [sysVersion floatValue]; if (version >= 8.0) { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:content preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:okAction]; [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:content delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } // 更新显示的徽章个数 NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber; badge--; badge = badge >= 0 ? badge : 0; [UIApplication sharedApplication].applicationIconBadgeNumber = badge; // 在不需要再推送时,可以取消推送 [AppController cancelLocalNotificationWithKey:key]; } // 设置本地通知 + (void)registerLocalNotification:(NSNumber *)alertTime key:(NSString *)key alertBody:(NSString *)alertBody title:(NSString *) title content:(NSString *) content{ //NSLog(@"registerLocalNotification: %long %@ %@ %@ %@", [alertTime integerValue], key, alertBody, title, content); UILocalNotification *notification = [[UILocalNotification alloc] init]; // 设置触发通知的时间 NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:[alertTime integerValue]]; //NSLog(@"fireDate=%@",fireDate); notification.fireDate = fireDate; // 时区 notification.timeZone = [NSTimeZone defaultTimeZone]; // 设置重复的间隔 notification.repeatInterval = kCFCalendarUnitSecond; // 通知内容 //notification.alertTitle = @"通知"; notification.alertBody = alertBody; notification.applicationIconBadgeNumber = 1; // 通知被触发时播放的声音 notification.soundName = UILocalNotificationDefaultSoundName; // 通知参数 NSDictionary *userDict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects: key, title, content, nil] forKeys:[NSArray arrayWithObjects: LocalPushKey, @"title", @"content", nil]];//[NSDictionary dictionaryWithObject:userDictData forKey:LocalPushKey]; 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]; } // 取消某个本地推送通知 + (void)cancelLocalNotificationWithKey:(NSString *)key { // 获取所有本地通知数组 NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications; for (UILocalNotification *notification in localNotifications) { NSDictionary *userInfo = notification.userInfo; if (userInfo) { // 根据设置通知参数时指定的key来获取通知参数 NSString *userKey = [userInfo objectForKey:LocalPushKey]; // 如果找到需要取消的通知,则取消 if (userKey != nil && [userKey isEqualToString:key]) { [[UIApplication sharedApplication] cancelLocalNotification:notification]; break; } } } }
标签:
原文地址:http://www.cnblogs.com/pengyingh/p/4813891.html