IOS发送本地通知

构建通知的数据:

- (void)setData
{
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
	NSTimeZone *timeZone = [NSTimeZone localTimeZone];
	[dateformatter setTimeZone:timeZone];
	[dateformatter setDateFormat : @"YYYY-MM-dd HH:mm:ss"];
	// 通知时间
	NSDate *date = [dateformatter dateFromString:@"2014-10-31 20:39:00"];
	// 通知内容
	NSString *body = [NSString stringWithFormat:@"您提醒的\"%@\"已经开始啦!", @"提醒的字符串"];
	// 通知编号
	NSString *notifyNO = [NSString stringWithFormat:@"%d",  arc4random();
	// 传输数据
	NSArray *data = @[@"参数1", @"参数2"];

	NSMutableDictionary *info = [NSMutableDictionary new];
	[info setObject:date forKey:@"date"];
	[info setObject:body forKey:@"body"];
	[info setObject:notifyNO forKey:@"notifyNO"];
	[info setObject:data forKey:@"data"];
	[info setObject:@"查看" forKey:@"action"];

	// 避免通知重复
	[NSLocalNotificationHelper cancelLocalNotificationWithInfo:info];
	[NSLocalNotificationHelper createLocalNotificationWithInfo:info];
}


创建一个本地通知:

// NSLocalNotificationHelper.m

+ (void)createLocalNotificationWithInfo:(NSDictionary *)info
{
	NSDate *date = [info objectForKey:@"date"];
	NSString *body = [info objectForKey:@"body"];
	NSString *action = [info objectForKey:@"action"];


	// 创建一个本地推送
	UILocalNotification *notification = [[UILocalNotification alloc] init];

	if (notification != nil) {
		// 设置推送时间
		notification.fireDate = date;
		// 设置时区
		notification.timeZone = [NSTimeZone defaultTimeZone];
		//		// 设置重复间隔
		//		notification.repeatInterval = NSCalendarUnitEra;
		// 推送声音
		notification.soundName = UILocalNotificationDefaultSoundName;
		// 推送内容
		notification.alertBody = body;
		notification.alertAction = NSLocalizedString(action, nil);
		//显示在icon上的红色圈中的数字
		notification.applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + 1;
		//设置userinfo
		notification.userInfo = info;
		//添加推送到UIApplication
		[[UIApplication sharedApplication] scheduleLocalNotification:notification];
	}

}

取消一个通知:

+ (void)cancelLocalNotificationWithInfo:(NSDictionary *)info
{
	// 获得通知编号
	NSString *notifyNO = [info objectForKey:@"notifyNO"];

	// 获得 UIApplication
	UIApplication *app = [UIApplication sharedApplication];
	//获取本地推送数组
	NSArray *localArray = [app scheduledLocalNotifications];
	//声明本地通知对象
	if (localArray) {
		for (UILocalNotification *noti in localArray) {
			NSDictionary *dict = noti.userInfo;
			if (dict) {
				NSString *inKey = [dict objectForKey:@"notifyNO"];
				if ([inKey isEqualToString:notifyNO]) {
					[app cancelLocalNotification:noti];
				}
			}
		}
	}
}

接收到本地通知后需要进行取消操作。

另外,IOS8中发送本地通知需进行注册获得通知权限。详见:http://my.oschina.net/zhwayne/blog/339656

你可能感兴趣的:(IOS发送本地通知)