情况如下:用户进入商店并通过beacon监控接收第一条通知。现在,为了获取其他beacon的通知,用户必须离开区域并再次进入才能调用didEnterRegion,否则用户将无法获取其他beacon的警报。但是,在我的情况下,这种情况并没有发生。由于beacon彼此接近,因此用户实际上并没有离开区域。一旦设备锁定或应用程序被关闭,通知也不会通过范围传递。
在实际情况中,有什么建议来解决这个问题?如何在锁定屏幕上获取所有beacon的通知?我正在使用Estimote Beacon进行开发。
这是一个常见问题。 如您所见,背景检测仅由区域监视触发,如果您的区域设置涵盖同一物理区域内的多个信标,则在移动之间您将无法收到背景通知。
每个应用程序最多只能获得20个BeaconRegion的进入/退出更新。因此,常见解决方案是创造性地使用这些20个BeaconRegion以获得最佳效果。如果您有20个或更少数不同的信标在彼此的范围内,技巧很简单--您只需为每个信标创建一个区域,并在所有这些区域上进行监视。
如果您需要使用> 20个信标,则必须想出一个有助于此的编号方案。例如,您可以将所有信标的ProximityUUID设置为相同的值,将主值编号为1-20,然后将次要值设置为每个信标的唯一数字。然后,您将监视具有不同主要数字的20个区域。您还将设置同时扫描以便能够获取检测到的信标的次要标识符。就像这样:
CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"region1" major:1 ];
CLBeaconRegion *region2 = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"region2" major:2 ];
...
CLBeaconRegion *region20 = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"region20" major:20 ];
[locationManager startMonitoringBeaconsInRegion:region1];
[locationManager startRangingBeaconsInRegion:region1];
[locationManager startMonitoringBeaconsInRegion:region2];
[locationManager startRangingBeaconsInRegion:region2];
...
[locationManager startMonitoringBeaconsInRegion:region20];
[locationManager startRangingBeaconsInRegion:region20];
如果您能确保永远不会出现两个具有相同次要编号的信标同时处于移动设备的无线电范围内的情况(例如,具有相同次要编号的信标必须相距>100米),那么此技术将运作良好。如果无法做到这一点,则必须开始妥协。
didRange
中,你仍然会收到任何处于范围内的信标的更新,而不会重复调用。 - Logan无法进行多个信标的监控。由于iOS存在限制,最大支持区域数量为20。我们可以通过以下方式实现您的用例。
如果没有找到任何一个具有"Immediate"接近度的信标,则移至下一个接近度Near。如果我们发现任何一个具有“Immediate”接近度的信标,则显示通知。如果发现多个具有“Immediate”接近度的信标,则使用RSSI进行排序。最低RSSI将是最近的信标,并显示最近的信标的通知。
如果没有找到任何一个具有"Near"接近度的信标,则移至下一个接近度Far。如果我们发现任何一个具有"Near"接近度的信标,则显示通知。如果发现多个具有"Near"接近度的信标,则使用RSSI进行排序。最低RSSI将是最近的信标,并显示最近的信标的通知。
如果没有发现距离为“远”的信标,则附近没有信标。 如果找到一个距离为“远”的信标,则显示通知。如果有多个距离为“远”的信标,则使用RSSI进行排序。最低的RSSI将是最近的信标,并显示最近的信标的通知。