0

我已经为信标(didEnterRegion)实现了一个监控功能。如果我使用我的 iPhone,它会很好用。(应用程序在前台、后台或仅安装并关闭,但我的 iPhone 必须在使用中(屏幕打开)。)

如果我的手机处于待机模式(按下顶部按钮),我不会收到 didEnterRegion 的通知。如果我使用手机(屏幕打开),会弹出通知。是否有机会在待机模式下也获得 didEnterRegion 事件?

self->beaconLocationManager = [[CLLocationManager alloc] init];
[self->beaconLocationManager requestAlwaysAuthorization];
self->beaconLocationManager.delegate = self;
beaconLocationManager.allowsBackgroundLocationUpdates = YES;
NSString* beaconIdentName = [NSString stringWithFormat:@"Beacon%d", cnt];
NSUUID *uuid2=[[NSUUID alloc]initWithUUIDString:uuid];
clBeconRegion2=[[CLBeaconRegion alloc]initWithProximityUUID:uuid2 identifier:beaconIdentName];
clBeconRegion2.notifyOnEntry=YES;
clBeconRegion2.notifyEntryStateOnDisplay = NO;
[self->beaconLocationManager startMonitoringForRegion:clBeconRegion2];
[self->beaconLocationManager startRangingBeaconsInRegion:clBeconRegion2];

...

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"ENTER REGION");
    UILocalNotification *localNotification = [[UILocalNotification alloc]init];
    localNotification.alertBody = @"FOUNDED";
    localNotification.alertAction = [NSString stringWithFormat:@"%@ Connecting...", region.identifier];
    [[UIApplication sharedApplication]presentLocalNotificationNow:localNotification];
}

项目设置:推送通知已开启。用于位置更新、背景获取、使用蓝牙 LE 配件的后台模式已开启。

在 iOS 11.1 上测试

4

2 回答 2

0

您等待背景检测多久了?这最多可能需要 15 分钟。

有关详细信息,请参见此处:http: //developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

如该文章所述,您无需将位置更新后台模式设置为“是”。此外,您不需要将 notifyOnExit 和 notifyOnEntry 指定为 true。

希望这可能会有所帮助。

于 2017-12-07T06:40:40.863 回答
0

问题中描述的行为不寻常,与我在设备上看到的体验不符。你绝对应该在黑屏的情况下进行 didEnterRegion 调用,我在 iOS 7-11.x 上有几个应用程序,我已经看到了这种情况。

显示的代码看起来不错,即使您愿意,我什至不知道导致您描述的行为的方法。一定有其他未知变量导致您的手机出现这种异常行为。我可能会尝试在另一部手机上进行测试,确认您没有看到这种行为,然后使用反复试验来尝试使手机的配置相同,直到您弄清楚丢失的变量是什么。

抱歉,我知道这不是一个简单的答案。

于 2017-12-09T14:38:33.423 回答