如何启用对区域监控服务的访问?

时间:2014-02-15 00:31:12

标签: ios ios7 monitoring cllocationmanager region

我简化了一下这个问题。当我在我的应用中创建和添加区域并询问这些区域的状态时,我在monitoringDidFailForRegion方法中看到以下内容:

The operation couldn’t be completed. (kCLErrorDomain error 4.)

检查CLErrorDomain constants我发现错误4是kCLErrorRegionMonitoringDenied,其描述如下:

Access to the region monitoring service was denied by the user.

这怎么可能?这是我的设置和我检查过的内容:

  • 我正在通过Xcode查看日志语句。
  • 我已连接到iPhone 5.我没有在模拟器中运行。
  • 我确保半径足以监控(尽管它无关紧要)。
  • 我已确保设置>隐私>位置服务已启用我的设备 我的应用。
  • 我已经阅读了Apple发布的每个核心位置和区域监控文档。
  • 我确保WiFi已开启且我有强大的蜂窝信号。如果我不这样做,那么首先就找不到我的位置。
  • 我确保didChangeAuthorizationStatus报告的状态正确:kCLAuthorizationStatusAuthorized
  • 我确保在添加我的区域之后,实际上通过观察对方法didStartMonitoringForRegion的调用开始监视确实开始了。

我错过了什么?为什么在明确启用位置服务时会看到此错误?

4 个答案:

答案 0 :(得分:17)

所以,我又看了documentation on Region Monitoring,我在列表中突出显示的项目中注意到了这一点:

  

确定区域监控的可用性

     

在尝试监控任何区域之前,您的应用应检查当前设备是否支持区域监控。有几个原因导致可能无法进行区域监测:

     
      
  • 设备可能没有支持区域监控所需的硬件。
  •   
  • 用户可能已拒绝该应用授权使用区域监控。
  •   
  • 用户可能已在“设置”应用中禁用了位置服务。
  •   
  • 用户可能已在设置应用中为设备或应用禁用了后台应用刷新功能。
  •   
  • 设备可能处于飞行模式,无法启动必要的硬件。
  •   

然后我检查了背景应用刷新(iOS 7中的新功能:设置>常规>后台应用刷新)已打开并可用于我的应用。 不是 。我打开了这个功能,BOOM我的区域现在正在报告他们的状态。

令人困惑和误导:

[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]] returns YES 

...即使禁用后台应用刷新。我认为它会返回NO。

<强>更新

我已向Apple和added an Open Radar发送了一个错误报告,以解决此问题。

更新3-11-14:

Apple确认这是一个错误。

答案 1 :(得分:4)

为了进行区域监控(至少在iOS 9中),您需要请求“始终”授权。这在我能找到的任何地方都没有记录,但这是我能够让区域监控工作的唯一方法。

rdar:// 23566600 - 如果你在苹果内部:)

答案 2 :(得分:0)

在授予使用位置服务的权限时,请尝试在info.list中添加适当的条目以获取用户提示。这些info.plist条目是(NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription)。我注意到遗漏了NSLocationUsageDescription条目并没有产生同样的负面影响。祝好运。

答案 3 :(得分:0)

我的案例帮助设置“总是” “为了进行区域监控(至少在iOS 9中),您需要”始终“授权”和300米半径