【发布时间】:2016-12-08 14:59:09
【问题描述】:
我们的 Estimote 信标目标: 我们计划在高尔夫球场设置 Estimote 信标。我们的场景是每当玩家到达球洞时,比赛的节奏是什么,它应该被信标检测到并通过我们的 iPhone 应用程序响应服务器。 在这种情况下,用户不需要打开应用程序,因为手机就在他的口袋里,他正在玩游戏。
到目前为止我们做了什么:
- 仅当应用程序仅处于活动状态时,测距才有效。 (目标未实现)。
- 为了实现这个目标,我们正在使用监控,但问题是监控委托(didDetermineState state: for region:) 有时调用有时不调用(调用:立即、一些延迟和从不)。换句话说,iOS 并不总是通过监控来检测信标。 (目标未实现)。
- 如果我们在两部或多部具有相同 iOS 版本 10 的 iPhone 6s 上进行测试,每部手机都会有不同的结果,有些检测到,有些则没有。为了进行测试,我们使用翻转睡眠并在不同位置设置信标以触发进入/退出事件和最低广告间隔。
- 在 estimote 信标上实施了 edystone,当应用程序在后台时,它们不工作。 (目标未实现)。
我们尝试了以下在互联网或 estimote 信标论坛上找到的解决方案。
2013 年 11 月的文章 Ibeacon monitoring 但在 2016 年 12 月似乎没有什么不同。
我们还尝试通过 CoreLocationManager.startUpdatingLocation 进行后台测距: Here 和 Here
- 我们试图说 Estimote,但他们的回答模棱两可,“我们很痛苦地意识到 iBeacon 监控有时可能有点挑剔。我们讨厌它,就像开发者试图构建基于信标的应用程序一样,但是当它谈到 iBeacon,我们很无奈,因为 Apple 的 API 处于锁定状态——iOS 上除了通过内置 API 之外没有其他方法可以检测 iBeacon 数据包,这会显示出这些问题。” 似乎有些可能。
-
这就是我注册信标数组的方式,目前我们有 3 到 6 个信标。
func loadBeacons() { // Load beacons self.beacons = getAllbeacons() self.beaconManager = ESTBeaconManager() self.beaconManager.delegate = self self.beaconManager.requestAlwaysAuthorization() if self.beaconManager.isAuthorizedForMonitoring() == true { self.rangingBeaconsSetup() } else { self.beaconManager.requestAlwaysAuthorization() } } func rangingBeaconsSetup() { // SET UP Ranging beacons for beacon in self.beacons { if let beaconRegion = self.beaconRegionFromItem(beacon) { beaconRegion.notifyEntryStateOnDisplay = true self.beaconManager.startMonitoring(for: beaconRegion) self.beaconManager.startRangingBeacons(in: beaconRegion) } } } func beaconRegionFrom(_ beacon: Beacon) -> CLBeaconRegion? { // GET VALID REGION let val = 1 << 16 if let uuid = NSUUID(uuidString: beacon.uuid), beacon.major < val && beacon.minor < val { return CLBeaconRegion(proximityUUID: uuid as UUID, major: CLBeaconMajorValue(beacon.major), minor: CLBeaconMinorValue(beacon.minor), identifier: beacon.deviceName) } return nil } func beaconManager(_ manager: Any, didDetermineState state: CLRegionState, for region: CLBeaconRegion) { // Monitoring delegate. if state == .inside { let notification = UILocalNotification() notification.alertBody = "By tapping you will be able to check-in" notification.alertAction = "OK" notification.fireDate = Date() application.scheduleLocalNotification(notification) } } 当我们拥有相同的 IOS 设备 (OS 10) 时,我们收到以下响应,它们的行为不一致。
相关问题:
- 我们对信标准确性的期望是否很高?
如果信标正在向所有手机广播数据,那么每个设备的行为必须相同,因为我们有相同的 IOS 版本、相同的 Iphone 和相同的代码。 我们怎样才能得到一致的结果 我们的经验是,检测“从几秒到 15 分钟不等,有时根本检测不到”
我们可以做些什么来获得一致和可靠的结果?
【问题讨论】:
标签: ios iphone ibeacon estimote eddystone