我正在开发一个位置感知iOS应用,它会在靠近iBeacon时发出本地通知。当设备距离信标大约5米时,我设置了地理围栏来触发。
接收通知正常,但我只会在解锁设备(触摸ID或密码)或使用睡眠唤醒按钮(显示时钟)打开电源时收到通知。
我能做什么,通知会唤醒设备,使显示屏亮起/振动/播放声音,例如iMessage。
答案 0 :(得分:1)
如果您正在使用iBeacons,那么您实际上并不需要使用地理围栏。您想要做的是通过Core Location进行监控,如下所示:
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:uuid.UUIDString];
[self.locationManager startMonitoringForRegion:beaconRegion];
beaconRegion.notifyEntryStateOnDisplay = YES;
beaconRegion.notifyOnEntry = YES;
beaconRegion.notifyOnExit = YES;
一旦您监控信标区域,当您通过这些核心定位方法遇到该信号时,应用程序将自动进入和退出:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;
在这些方法中,您希望显示本地通知。
请注意,对于iOS 7.0及更高版本,您需要在info.plist中输入NSLocationAlwaysUsageDescription,以便使用iBeacons获取位置服务。
答案 1 :(得分:0)
确保您的应用注册通知设置,同时请求警报和声音类型。从iOS 8开始,除非用户授予此权限请求,否则您的通知将无法播放声音或唤醒手机。
有关详细信息,请参阅here。
if ([[UIApplication sharedApplication]
respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationType types = (UIUserNotificationType) (UIUserNotificationTypeBadge |
UIUserNotificationTypeSound | UIUserNotificationTypeAlert);
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
}