我已为我的objective-c项目设置Google Nearby API以扫描信标。
应用程序在移动到信标范围时检测到信标很好,但是当我已经在范围内时启动应用程序它不起作用。我必须离开灯塔并返回。
我没有使用后台扫描。我使用的lib版本是:0.10.0
我的代码是:
[GNSMessageManager setDebugLoggingEnabled:YES];
_messageManager = [[GNSMessageManager alloc] initWithAPIKey:@"..."];
_beaconSubscription = [_messageManager subscriptionWithMessageFoundHandler:^(GNSMessage *message) {
NSLog(@"beacon found: %@",message);
...
} messageLostHandler:^(GNSMessage *message) {
NSLog(@"beacon lost: %@",message);
...
} paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
params.beaconStrategy = [GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
params.includeIBeacons = YES;
}];
}];
我知道核心位置框架 didEnterRegion / didExitRegion 方法只有在越过信标区域的边界时才会调用,并且我可以使用 didDetermineState < / strong>方法但是NearbyAPI如何使用这些方法在内部工作,如何让应用程序在启动时使用它检测已经在范围内的信标?
答案 0 :(得分:0)
这确实是附近消息监控iBeacon区域的方式中的错误。它使用didEnterRegion
/ didExitRegion
,如您所述,如果您在扫描开始时已经在某个区域,则不会调用didEnterRegion
。
我已尝试使用didDetermineState
,通过一些工作,我现在能够处理这种情况。我们将在下一个错误修复版本中包含此内容。
与此同时,您可以使用此技巧在测试应用时避免出现问题:将信标放入金属外壳(法拉第笼),并在应用开始扫描信标后将其从机箱中移除。这模拟了进入信标区域的移动。我在法拉第笼中使用了一个小型鸡尾酒调酒器,但少量的铝箔也可以使用。