1、增加一个本地推送 //设置20秒之后 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:20]; //chuagjian一个本地推送 UILocalNotification *noti = [[[UILocalNotification alloc] init] autorelease]; if (noti) { //设置推送时间 noti.fireDate = date; //设置时区 noti.timeZone = [NSTimeZone defaultTimeZone]; //设置重复间隔 noti.repeatInterval = NSWeekCalendarUnit; //推送声音 noti.soundName = UILocalNotificationDefaultSoundName; //内容 noti.alertBody = @"推送内容"; //显示在icon上的红色圈中的数子 noti.applicationIconBadgeNumber = 1; //设置userinfo 方便在之后需要撤销的时候使用 NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"]; noti.userInfo = infoDic; //添加推送到uiapplication UIApplication *app = [UIApplication sharedApplication]; [app scheduleLocalNotification:noti]; } 2、程序运行时接收到本地推送消息 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"接收到本地提醒 in app" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show]; //这里,你就可以通过notification的useinfo,干一些你想做的事情了 application.applicationIconBadgeNumber -= 1; } 3、取消一个本地推送 UIApplication *app = [UIApplication sharedApplication]; //获取本地推送数组 NSArray *localArr = [app scheduledLocalNotifications]; //声明本地通知对象 UILocalNotification *localNoti; if (localArr) { for (UILocalNotification *noti in localArr) { NSDictionary *dict = noti.userInfo; if (dict) { NSString *inKey = [dict objectForKey:@"key"]; if ([inKey isEqualToString:key]) { if (localNoti){ [localNoti release]; localNoti = nil; } localNoti = [noti retain]; break; } } } //判断是否找到已经存在的相同key的推送 if (!localNoti) { //不存在 初始化 localNoti = [[UILocalNotification alloc] init]; } if (localNoti && !state) { //不推送 取消推送 [app cancelLocalNotification:localNoti]; [localNoti release]; return; } }
//删除通知
//(1)删除全部
[[UIApplication sharedApplication] cancelAllLocalNotifications];
//(2)删除单独一个通知
//需要userInfo属性来配合,找到具体需要删除的通知对象,在userInfo中给一个唯一的标识
//scheduledLocalNotifications,拿到全部可以激活的通知对象
NSArray* lns = [UIApplication sharedApplication].scheduledLocalNotifications;
NSLog(@"%@", localNotification);
NSLog(@"%@", lns);
//我们可以通过遍历这个数组,找到我们需要删除的那个本地通知
for (UILocalNotification* ln in lns) {
NSDictionary* userInfo = ln.userInfo;
if ([userInfo[@"id"] isEqualToString:@"123"]) {
[[UIApplication sharedApplication] cancelLocalNotification:ln];
}
}
//设置完以上的内容 还不能完成 UILocalNotification 因为 app 进入后台之后就被挂起,那如何让进入
//后台的app 能提醒用户 有 消息了呢?
//简单 只需要 在 AppDelegate 里面完成2步操作
//处理UILocalNotification
//在提醒框动作按钮被点击后,应用开始运行时,可以在-(BOOL)application:didFinishLaunchingWithOptions:这个Application delegate方法中处理。可以通过以下方式来加载为最近未处理的Notification:
//UILocalNotification * localNotif=[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
//如果应用正在运行时,可以通过覆盖在Application Delegate中的方法
//-(void)application:didReceiveLocalNotification:来处理Notification。作为方法的第二个参数为UILocalNotification对象,只需处理对象携带的userInfo来处理响应的动作。
入口类的两个方法
//程序没打开,后台没运行,这个时候收到通知,执行这个方法。
//响应通知的时候,如果程序没有打开,也没有在后台运行,那么就需要在这个方法中处理。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//图标右上角归零
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
// Override point for customization after application launch.
// UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"通知" message:[launchOptions description] delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
// [alertView show];
//只有在点击通知进来的时候才会有,正常启动是没有这个key-value的
UILocalNotification* notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (notification) {
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"通知" message:@"321321321" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
}
return YES;
}
//响应通知需要两个方法,
//在当前程序是发出通知的程序的时候,这个时候不会显示通知,但是会调用这个方法。需要自己来处理通知的显示。
//当前程序不是发出通知的程序,如果发出通知的程序没有运行,那么也不调用这个方法。
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
NSLog(@"通知出现了");
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"通知" message:notification.alertBody delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
}
本文详细介绍了如何在iOS应用中实现本地推送功能,包括创建、接收和取消本地推送的方法,并提供了具体的代码示例。

827

被折叠的 条评论
为什么被折叠?



