我目前正致力于其中一款IOS BLE应用,并在周边广告中发现了一些问题,
1)当应用程序进入后台时,我的中心应用程序似乎发现了它(我甚至尝试使用LightBlue应用程序,它在前台工作得很好),来自我发现的苹果文档,
CBAdvertisementDataServiceUUIDsKey广告密钥的值中包含的所有服务UUID都放在一个特殊的“溢出”区域中;它们只能由明确扫描它们的iOS设备发现。
这是否意味着Central必须只扫描特定的服务UUID?我正在努力通过nil,因为我需要发现附近的所有外围设备。
2)有没有办法传递自定义广告数据,可以在不连接外围设备的情况下由中心读取?或者我可以传递自定义UUID而不是默认UUID吗?我尝试了不同的方法,但无法找到哪些方法有助于传递自定义数据,我想从外设传递一些用户特定的详细信息。
我听说Mingleton也是基于BLE的,看起来他们的应用程序在后台工作得很好,不知道他们使用了什么技术?
答案 0 :(得分:2)
关键是iOS的蓝牙低功耗堆栈在充当外围设备时允许进行背景广告。但是,在后台广告时,只能发现您之前知道的UUID(这在苹果的BLE文档中有提及,但我们也对其进行了测试)。使用以下电话:
NSDictionary * scanOptions = @ {CBCentralManagerScanOptionAllowDuplicatesKey:@(YES)}; [centralManager scanForPeripheralsWithServices:nil options:scanOptions];
会发现周围的所有外围设备都在前台做广告,但没有在后台做广告。所以这不是一个有效的选择。
解决方案是发现已知的服务UUID。因此,Centrals扫描所有设备已知的通用UUID的其他外围设备。当他们找到外围设备时,他们连接到该外围设备并使用服务和特性为该外围设备获取特定UUID。请注意,您需要使用2个不同的UUID。所有设备的通用UUID始终相同,并允许我们找到它们,并使用BLE将它们与其他设备区分开来。所有设备的特定UUID都不同,允许我们识别和区分AltBeacons。重要的是要知道外围设备和中心设备之间的连接只发生一次,之后中央设备可以记住外围设备,之后只需要检测范围。无需重新连接(减少电池使用量)。
我们发布了这样做的开源框架。您可以访问:https://github.com/CharruaLabs/AltBeacon。检查AltBeacon.m类以了解我们如何实现它。
答案 1 :(得分:1)
localName
也被忽略(你会发现这与Apple的核心蓝牙编程指南中提到的一致)。至于Mingleton,基于this TechCrunch article:
要求解释该技术如何更详细地运作,Ekekezie表示用户在被分配了独特的信标配置之前会先与Facebook注册。 “当其他用户检测到您的信标配置,然后点击'查看谁在附近'以查看它是谁时,他或她会ping我们的服务器以确定您是谁以及您是否与他/她相关偏好 - 现在只是性别和年龄范围,“他说。
我认为该应用程序完全基于iBeacon技术,并且知道iBeacons目前无法在后台进行广告宣传,我认为应用程序需要在前台运行才能按预期工作。