仅在调用 requestAlwaysAuthorization 时才调用 DidEnterRegion。信标

Posted

技术标签:

【中文标题】仅在调用 requestAlwaysAuthorization 时才调用 DidEnterRegion。信标【英文标题】:DidEnterRegion only called if requestAlwaysAuthorization is called. Beacons 【发布时间】:2015-08-05 19:22:36 【问题描述】:

didEnterRegiondidExitRegion 仅在我请求并允许 CoreLocation 始终授权后调用

即使我请求 WhenInUseAuthorization didExit 和 didEnter 也不会被调用

如果我不能调用它,我应该如何触发信标范围?

有什么解决办法吗?

更新

Apple 拒绝了我的应用调用 requestAlwaysAuthorization()

这是我今天早上提交给审核小组的问题:

为了监控信标区域(包括一些 Apple 应用程序在内的许多应用程序中使用的信标的核心功能),您需要让用户允许应用程序访问位置,即使在不使用应用程序时也是如此。我正在使用 .requestAlwaysAuthorization 来启用信标在后台进行监控。为什么不允许这样做?

苹果今天下午在 iTunes Connect 上的回应:

感谢您的反馈。但是,iBeacon 功能不需要后台位置。因此,需要在重新提交之前去除背景位置特征。

因此,如果信标应该在后台自动监控区域,但我无法请求后台监控的许可,并且除非我获得许可,否则信标不会在后台监控,那么我应该如何监控背景??

【问题讨论】:

【参考方案1】:

你的意思是当应用程序在后台时?如果是这样,那么didEnterRegiondidExitRegion 确实不会仅通过WhenInUseAuthorization 被调用。只有当您的应用在前台并且您进入/退出某个区域时,它们才会被调用

【讨论】:

苹果拒绝了我的应用调用requestAlwaysAuthorization() 这是我的问题:为了监控信标区域(包括一些 Apple 应用程序在内的许多应用程序中使用的信标的核心功能),您需要让用户允许应用程序访问位置,即使没有使用该应用程序。我正在使用 .requestAlwaysAuthorization 来启用信标在后台进行监控。为什么不允许这样做? 苹果今天下午在 iTunes Connect 上的回复:感谢您的反馈。但是,iBeacon 功能不需要后台位置。因此,重新提交前需要去掉后台定位功能。 根据文档,应用程序可以在后台监控信标区域。正如我在原始帖子中提到的,启用后台监控的唯一方法是请求 AlwaysAuthorization,但是我被拒绝请求它。那么当用户走进某个区域时我如何接收通知 我不认为使用 requestAlwasysAuthorization 是 Apple 拒绝该应用程序的确切原因——这是允许的。正如@heypiotr 在他的回答中提到的,Apple 将拒绝基于 plist 中的背景模式的应用程序。也许这就是你被拒绝的原因。【参考方案2】:

iBeacon 功能不需要背景位置。因此,重新提交前需要去掉后台定位功能。

您的应用似乎因为后台模式(特别是“位置更新”模式)而被拒绝,没有“始终”授权。您不需要为信标监控启用任何后台模式即可在后台工作,“始终”授权就足够了。

只需在您的项目设置中禁用后台模式功能,您应该会很好!

【讨论】:

在我提交的问题中,我包含了一张未选中位置的功能/背景模式的图片,以确保我们在同一页面上。他们的回应是在澄清确实检查了位置更新之后 明白了;那么很可能审阅者不清楚在后台工作的信标是什么,什么不需要;或者不明白为什么您的应用需要在后台使用信标,就像 David 提到的那样。【参考方案3】:

很遗憾,您必须请求Always Allow 位置访问权限才能使用带有信标的区域监控。

来自文档:

重要

应用必须始终具有使用区域监控的授权,并且必须配置位置更新后台模式才能启动。

https://developer.apple.com/documentation/corelocation/determining_the_proximity_to_an_ibeacon

【讨论】:

以上是关于仅在调用 requestAlwaysAuthorization 时才调用 DidEnterRegion。信标的主要内容,如果未能解决你的问题,请参考以下文章

返回函数调用与仅在递归期间再次调用函数有啥区别?

Axios - 仅在 1 次调用中删除标头授权

仅在 firebase 调用完成时加载布局

仅在 reloadData 完成后调用函数

FacebookSdk.sdkInitialize 是在创建的每个活动上调用还是仅在 mainActivity 上调用

为啥 Angular Oninit 仅在离开页面时才调用服务