iBeacon:didEnterRegion 永远不会被调用
Posted
技术标签:
【中文标题】iBeacon:didEnterRegion 永远不会被调用【英文标题】:iBeacon: didEnterRegion never gets called 【发布时间】:2015-08-09 18:37:13 【问题描述】:我正在尝试获取一个适用于 iBeacon 扫描和显示的示例应用程序。
这是使用 ios 8,目标设备是 iPhone 5s。在 iPhone 5s 中运行应用程序之前,请注意以下先决条件。
1) 在 info.plist 中添加 NSLocationAlwaysUsageDescription 2)iOS选为8 3) 在 Xcode 中设置,在“功能”选项卡上,在“后台模式”下,选择“位置更新”和“使用蓝牙 LE 附件”。 4) iPhone 中的后台应用刷新已开启。
不幸的是,didEnterRegion 和 didRangeBeacons 根本没有被调用。但是,didStartMonitoringForRegion 被调用。
还请注意以下事项。
1) 所有信标都工作正常,并且使用下载的第三方应用程序在同一部 iPhone 中进行了验证。 2)在调试窗口中,我总是可以看到位置服务授权状态总是“未确定”。 3) 如果我在 iPhone 中关闭定位服务,那么我的授权状态为“拒绝”。 4) [self.locationManager requestAlwaysAuthorization];调用无效。
什么是我做得不对?如果您能帮我解决这个问题,那就太好了。
【问题讨论】:
离题:一旦您的问题得到解决,请确保禁用后台模式。信标监控不需要它们将应用程序唤醒到后台(“始终”授权是),并且(在不需要时使用 bg 模式)将使您的应用程序在审核过程中被拒绝。 【参考方案1】:当这种情况发生时肯定会令人沮丧,因为不清楚根本原因是什么。关键是你需要获得授权状态才能被接受。
我会尝试三件事:
确保您的 .plist 文件中有一个字符串用于NSLocationAlwaysUsageDescription
。如果不存在,则不会提示用户授予位置服务权限。
<key>NSLocationAlwaysUsageDescription</key>
<string>Need to use location services</string>
进入应用程序的“设置”并查找位置服务开关。尝试使用它来启用权限。
如果上述方法未能解决问题,请尝试卸载并重新安装该应用程序。我看到一个应用在开发过程中进入了一个糟糕的状态,这是让 iOS 重新提示授权的唯一方法。
【讨论】:
感谢您的回复。我已经在做#1和#2了。也做了#3。但是,情况并没有改变:( 首次应用启动时是否会提示您提供位置权限?如果没有,那就有问题了。我们需要查看您的代码以提供进一步帮助。 是的,我现在收到提示。谢谢:-)【参考方案2】:问题已解决。
我在编辑测试目录中的 info.plist 文件而不是在“支持文件”目录中编辑 info.plist 文件时犯了一个错误。
在“支持文件”目录的 info.plist 中添加 NSLocationAlwaysUsageDescription 后,一切正常。
【讨论】:
以上是关于iBeacon:didEnterRegion 永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章
iBeacon - 可以使用 startRangingBeacons 进行检测,但不能用于 didEnterRegion
使用 didEnterRegion 唤醒一个被杀死的应用程序,然后扫描 iBeacon
iBeacons - locationManager:didEnterRegion 回调和 UUID
对于具有不同 UUID、major 和 minor 的多个 iBeacon,仅触发一次 didEnterRegion 事件