在iOS开发中,通知也叫消息机制。消息机制包括两种,一种是本地通知,另一种是远程通知。本文我们着重理解本地通知,远程通知会在iOS开发之 远程推送 一文做出详解。
本地通知是由APP直接发送到当前设备上的,不用网络。常见应用:闹钟,日历待办事项提醒,应用转至后台运行提示,关注的新闻资讯更新等等。
//添加本地通知
-(void)addLocalNotification{
//定义本地通知对象
UILocalNotification *notification = [[UILocalNotification alloc]init];
//通知触发时间,10s之后
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1.0];
//设置重复通知间隔 0代表不重复
notification.repeatInterval = kCFCalendarUnitSecond;
//设置时区
notification.timeZone = [NSTimeZone defaultTimeZone];
//设置标题
notification.alertTitle = @"我是第一个应用通知";
//通知主体
notification.alertBody = @"我就是要通知的内容";
//应用程序右上角显示的未读消息数
notification.applicationIconBadgeNumber = 1;
//待机界面的滑动动作提示
notification.alertAction = @"打开应用";
//通过点击通知打开应用时的启动图片,这里使用程序启动图片
notification.alertLaunchImage = @"Default";
//收到通知时播放的声音,默认消息声音
notification.soundName=UILocalNotificationDefaultSoundName;
//notification.soundName=@"msg.caf";//通知声音(需要真机才能听到声音)
//设置用户信息
notification.userInfo = @{@"id":@1,@"user":@"XF"};
//调用通知
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
// 本地通知回调函数,当应用程序在前台时调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
NSLog(@"noti:%@",notification);
// 这里真实需要处理交互的地方
// 获取通知所带的数据
NSString *notMess = [notification.userInfo objectForKey:@"key"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知(前台)"
message:notMess
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
// 更新显示的徽章个数
NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
badge--;
badge = badge >= 0 ? badge : 0;
[UIApplication sharedApplication].applicationIconBadgeNumber = badge;
// 在不需要再推送时,可以取消推送
//[self removeNotification:@"key"];
}
pragma mark - 移除本地通知,在不需要此通知时记得移除
注意:
1.本地通知再重复的时间间隔内最多存在64条,当超过这个数量,就会被系统忽略,也就不起作用了
2.本地通知不是存在沙盒中,所以不管卸载APP还是,Bundle ID 不变,通知就不会变。
-(void)removeNotification:(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;
}
}
}
}
AppDelegate.m中
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//进入前台取消应用消息图标
}
网友评论