前一段时间了解到,ios10的本地推送能够基于位置,感觉这是个很酷炫的功能,潜在的场景:比如说走到公司附近,提示用户签到;走到地铁口,提示地铁站。本文就介绍下ios10的本地推送。
ios10之后的推送都集成在UserNotifications框架中了,使用前需要先导入这个框架。
创建本地推送的流程大概是这样的:
1、创建推送内容,涉及到的类:UNMutableNotificationContent,还可以添加图片
2、选定推送类型 分三种:指定时间、指定日期、指定地点
3、创建推送请求,涉及到的类:UNNotificationRequest
4、加入到消息中心
代码如下:
-(void)createTimerNoti{//指定时间的推送
UNMutableNotificationContent*content=[[UNMutableNotificationContent alloc] init];
content.title=@"到站提醒";
content.subtitle=@"您有一条新的到站提醒";
content.body=@"紫荆山站到了,请您注意换乘2号线";
//添加图片附件
NSURL*url=[[NSBundle mainBundle] URLForResource:@"piggy" withExtension:@"png"];
UNNotificationAttachment*attch=[UNNotificationAttachment attachmentWithIdentifier:@"lzy" URL:url options:nil error:nil];
content.attachments=@[attch];
UNNotificationTrigger*trigger=[UNTimeIntervalNotificationTrigger triggerWithTimeInterval:3 repeats:NO];//第二个参数为是否重复 如果是,则间隔时间要大于60
UNNotificationRequest*request=[UNNotificationRequest requestWithIdentifier:@"timerId" content:content trigger:trigger];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError*error){
if(!error){
NSLog(@"指定时间的推送发送成功");
}
}];
}
从代码来看,创建本地推送要比之间简单的多。下面主要介绍一下如何创建指定地点的本地推送。
基于地理位置的本地推送,在进入或离开指定的区域内,就会触发推送。程序没有启动或者在后台也可以。
代码如下:
-(void)createLocationNoti{//创建指定区域的推送
UNMutableNotificationContent*content=[[UNMutableNotificationContent alloc] init];
content.title=@"地点提醒";
content.subtitle=@"您即将进入地铁站附近";
content.body=@"您即将进入地铁站附近";
CLLocationCoordinate2D center=CLLocationCoordinate2DMake(32.690247, 110.688876);
CLCircularRegion*region=[[CLCircularRegion alloc] initWithCenter:center radius:2000 identifier:@"zmt"];
region.notifyOnEntry=YES;//进入区域
region.notifyOnExit=NO;//离开区域
UNLocationNotificationTrigger*trigger=[UNLocationNotificationTrigger triggerWithRegion:region repeats:NO];
UNNotificationRequest*request=[UNNotificationRequest requestWithIdentifier:@"zmtRequest" content:content trigger:trigger];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError*error){
if(error) {
NSLog(@"推送失败");
}else{
NSLog(@"指定地点的推送发送成功");
}
}];
}