【发布时间】:2017-12-31 23:57:15
【问题描述】:
我正在开发一个信标检测应用程序,目前非常适用于 kontakt 品牌的信标。
客户给我发了一些我从未见过的新信标,我用谷歌搜索过,但找不到它们是什么品牌。
他们给我的与这个信标有关的以下信息:
uuid: fda50693-a4e2-4fb1-afcf-c6eb07647825
pass: 000000
name: ion_beacon00021
major: 16789
minor: 24532
我已经转换了我的代码来监控两个 uuid 而没有让它工作
for (index, beaconID) in beaconsIds.enumerated() {
let beaconUUID = UUID(uuidString: beaconID)!
let identifier = "BLERegionBeacon \(index)"
let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, identifier: identifier)
self.locationManager?.startMonitoring(for: beaconRegion)
self.locationManager?.startRangingBeacons(in: beaconRegion)
}
func configureLocationManager() {
self.locationManager = CLLocationManager()
self.locationManager!.delegate = self
self.locationManager!.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager!.distanceFilter = kCLDistanceFilterNone;
self.locationManager!.activityType = CLActivityType.automotiveNavigation;
for region in self.locationManager!.monitoredRegions {
self.locationManager?.stopMonitoring(for: region)
}
if CLLocationManager.authorizationStatus() != CLAuthorizationStatus.authorizedAlways {
self.locationManager?.requestAlwaysAuthorization()
}
self.locationManager!.startUpdatingLocation()
}
当找不到如何使这个新的 ibeacon 工作时,我求助于第三方应用程序(如 MyBeacon、Detector、Beacon Demonstrator、Locate)来验证我所拥有的关于这个信标的信息是否是正确,但在任何应用程序中我都无法让它检测到这个 ibeacon。
我买了一块新电池来确保它不是那么简单,但也不是那么简单。 :'(
我有使用任何检测蓝牙设备的应用程序的想法,我找到了BLE Scanner。有了这个应用程序,我很幸运,并且可以意识到至少我拥有的信标名称是正确的,但没有找到与major or minor or pass 相关的任何内容。我还认为那里看到的长 id 可能是正确的,而我所拥有的不是......但我放弃了它,因为当我连接品牌时,kontakt 也给了我一个不同的 uuid。
ISCONNECTABLE 在 YES 和 NO 之间跳转。
当我使用BLE Scanner 检测信标Kontakt 时,显示名为SERVICEDATA 和ISCONNECTABLE 的附加信息仍为YES。
- 检测这些信标是否需要做其他事情?
- 有人知道发生了什么吗?
非常感谢
编辑
在davidgyoung 的帮助下,我可以意识到 Locate 应用程序是否可以正常工作,但仅限于 android 版本。事实上,我一开始就正确地返回了我从那个信标那里得到的信息。
我发现这些信标可以使用一个名为 BeaconFlyer 的应用程序进行配置,并且在那里我意识到了发送给我的密码的原因。我能够更改uuid,尽管奇怪的是我只输入了数字而没有输入字母。我按照 8-4-4-4-12 的相同模式将其更改了 32 个零。即使在更改 uuid 之后,我仍然在 IOS 上没有得到任何结果,但在 android 上也可以工作。
可能有些品牌需要经过认证才能被iOS设备检测到,而android没有这些限制。
编辑 2
考虑到所有这些细节,问题似乎是 IOS 而不是 android,所以我想到如果我创建一个简单的 android 项目只是为了测试信标的功能,我应该能够检测到它。
测试是通过注册这个 UUID f7826da6-4fa2-4e98-8024-bc5b71e0893e 来完成的,它一直对我有用,我可以毫无问题地检测到信标标记kontakt。
令我惊讶的是,即使没有注册我为这个品牌所拥有的 UUID,我也能毫无问题地检测到它。考虑到只注册 1 个 UUID 即标记 kontakt,这很奇怪
【问题讨论】:
标签: ios swift bluetooth bluetooth-lowenergy ibeacon