iOS 系统中使用地理围栏(geofence)来实现基于位置的提醒,是否需要定位“始终”允许权限?

2021-06-01 08:03:09 +08:00
 reaCodes
我使用滴答清单的位置提醒功能,定位权限给了“使用 App 期间”,但是总是提示我给“始终”允许权限,实现这个功能必须要始终定位权限么?对电量消耗影响有多大?
2749 次点击
所在节点    程序员
18 条回复
sundev
2021-06-01 08:22:20 +08:00
必须给,电量消耗大
不给这个权限他没法后台运行的。
no1xsyzy
2021-06-01 09:03:30 +08:00
话说,地理围栏难道不是避免有限地需要位置的应用后台运行消耗电量的吗?
(不是所有应用都是逐向导航)
wipbssldo
2021-06-01 09:19:18 +08:00
应该是不用的。地理围栏 App 可以通过注册一个地点给系统,系统通知 App,并不需要 App 自己来处理地理围栏。
看这里: https://juejin.cn/post/6844903449604292616#heading-3

有时候某些人 iOS 耗电量快就是这些 App 的骚操作导致的。
wipbssldo
2021-06-01 09:21:01 +08:00
到目前 iOS14,App 常驻后台的方式仅剩后台音频播放和始终获取地理位置两种途径,其他的都有限制。
codeisjobs
2021-06-01 09:44:21 +08:00
是的,必须给,不给拿不到具体的定位信息,被这个坑过,后来改成提示用户开启始终允许了
mcluyu
2021-06-01 09:46:19 +08:00
不需要。
差别是如果你给了始终, 那么你退到桌面后,顶部不会有一个蓝条提醒你有 APP 在后台使用你的位置。注册了后台位置更新的 APP,只要有定位权限,都可以在位置发送改变时收到回调或者唤醒一定时间处理自己的逻辑。
vincentxue
2021-06-01 10:08:02 +08:00
明确的答案,不需要。只要符合相关的条件,比如已授权,硬件自身支持,开启后台刷新,开启系统定位等等,系统会唤醒你的 App 。

你想想,如果需要始终的话,那么注册地理围栏的意义是什么?自己监听就好了。
chinvo
2021-06-01 10:20:11 +08:00
不需要

楼上那些说得头头是道什么不给没法激活地理围栏云云的, 要么蠢要么坏.

要了始终允许, 能搞的事情多了去了.
codeisjobs
2021-06-01 10:39:30 +08:00
@codeisjobs #5 更正下,是我傻逼了,不是必须给始终定位,是必须给精确定位。
codeisjobs
2021-06-01 10:41:44 +08:00
不过如果系统是 13.0 以下的,不开启始终定位,地理围栏不给位置信息,不信可以试下。
reaCodes
2021-06-01 12:18:15 +08:00
@vincentxue 就滴答清单位置提醒而言,不给始终权限的话,该功能用不了。
reaCodes
2021-06-01 12:48:09 +08:00
@chinvo 但是不给始终允许权限,相关功能确实无法正常工作,不知道是程序员有意为之还是技术实现不了
reaCodes
2021-06-01 12:49:46 +08:00
@mcluyu 不给始终允许权限,功能无法工作
SingeeKing
2021-06-01 12:51:34 +08:00
滴答没用地理围栏吧,亲测滴答的提醒要比系统的快捷指令自动化稳
reaCodes
2021-06-01 12:55:51 +08:00
@SingeeKing 不清楚有没有用地理围栏,但是信息提示确实挺及时的
chinvo
2021-06-01 13:46:42 +08:00
@reaCodes #12

https://developer.apple.com/documentation/corelocation/cllocationmanager/1620562-requestwheninuseauthorization

If the user's choice grants When In Use authorization to your app, your app can start any location service and is eligible to receive the results while it's in use.

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

In iOS, regions are monitored by the system, which wakes up your app as needed when the user crosses a defined region boundary.

简单来说, 他如果有“到 X 位置提醒”之类的功能但是没有用系统的地理围栏功能 (不管是故意的还是不会), 那么他就必须要求“总是允许”定位. 同时他能在获得授权后在后台持续保活并干某些事情.
chinvo
2021-06-01 13:49:30 +08:00
给相关开发者补充一下: iOS 的 region boundary 需要启用 “background modes” 里面的 “location updates”

https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background
ian19znj
2021-06-01 14:00:44 +08:00
地址围栏一点都不准, 我设置当我离开公司告诉家人我下班了, 等我到家了都没触发.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/780487

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX