我正在开发一个应用程序,它将有多个ibeacons来检测和反应。客户端有不同的商店,他想在其中部署信标。我现在处于ibeacons非常接近的境地。所有信标共享相同的UUID但不同的主要和次要值。
情况如下:
用户进入商店并通过信标监控接收第一个通知。现在为了获得另一个信标的另一个通知,用户必须离开该区域并再次输入,以便didEnterRegion
呼叫,否则用户将不会获得其他信标的警报。这种情况在我的案例中没有发生。信标彼此靠近,一旦进入该信标,用户就不会真正离开该区域。一旦设备被锁定或应用程序被杀死,通知就不会通过测距。
有关如何在实际案例中解决此问题的任何建议。如何在锁定屏幕上获取所有信标的通知。我正在使用estimote信标进行开发。
答案 0 :(得分:5)
这是一个常见问题。如您所见,背景检测仅由区域监控触发,如果您的区域设置为覆盖同一物理区域中的多个信标,则您赢了&# 39;当你在它们之间移动时得到背景通知。
您只能在后台获得每个应用最多20个BeaconRegions的进入/退出更新。所以通常的解决方案是创造性地使用这20个BeaconRegions来获得最大的结果。如果你有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米)的情况,则此技术可以正常工作)。如果你不能这样做,那么你必须开始妥协。
答案 1 :(得分:1)
无法进行多个信标监控。由于iOS有限制,因此支持的最大区域数应为20.我们可以通过以下方式实现您的使用案例。
如果没有找到带有"立即" Proximity的信标,请移至下一个近。 如果我们发现任何一个具有接近度立即的信标,则显示通知。如果发现多个信标与立即接近,则使用RSSI进行排序。最低RSSI将是最近的信标,并显示最近的信标。
如果" Near" Proximity未找到信标,请移至下一个远附近。 如果我们找到任何一个接近近的信标,则显示通知。如果发现多个信标的接近接近度,则使用RSSI进行排序。最低RSSI将是最近的信标,并显示最近的信标。
如果在"远" 接近时没有发现信标,那么您附近没有任何信标。 如果我们找到任何一个接近远的信标,则显示通知。如果发现多个信标与远接近,则使用RSSI进行排序。最低RSSI将是最近的信标,并显示最近的信标。
未知 - 您可以忽略此
答案 2 :(得分:0)
您可以更轻松地解决此问题并解决问题。当用户退出该区域时停止触发通知。相反,使用接近功能可以提供更大的灵活性:使用CLProximity。您可以选择立即,近距离,远距离等。因此,基于信标的次要部分及其接近度,您可以触发所需的通知。