V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
reaCodes
V2EX  ›  程序员

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

  •  
  •   reaCodes ·
    zhatlas · 2021-06-01 08:03:09 +08:00 · 2916 次点击
    这是一个创建于 1296 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我使用滴答清单的位置提醒功能,定位权限给了“使用 App 期间”,但是总是提示我给“始终”允许权限,实现这个功能必须要始终定位权限么?对电量消耗影响有多大?
    第 1 条附言  ·  2021-06-01 12:20:54 +08:00

    就滴答清单位置提醒来说,不给始终允许访问定位权限的话,该功能是用不了的。测试下来也是一样,给使用App时允许访问定位权限,到地点滴答清单无法提醒。不知道是技术上实现不了,还是软件上限制了。

    IMG_2196.PNG

    第 2 条附言  ·  2021-06-01 12:58:21 +08:00
    有个问题,不太清楚滴答清单位置提醒是否是基于地理围栏实现的。如果打开始终允许,到特定位置提醒很及时,我测过多次。
    18 条回复    2021-06-01 14:00:44 +08:00
    sundev
        1
    sundev  
       2021-06-01 08:22:20 +08:00
    必须给,电量消耗大
    不给这个权限他没法后台运行的。
    no1xsyzy
        2
    no1xsyzy  
       2021-06-01 09:03:30 +08:00
    话说,地理围栏难道不是避免有限地需要位置的应用后台运行消耗电量的吗?
    (不是所有应用都是逐向导航)
    wipbssldo
        3
    wipbssldo  
       2021-06-01 09:19:18 +08:00
    应该是不用的。地理围栏 App 可以通过注册一个地点给系统,系统通知 App,并不需要 App 自己来处理地理围栏。
    看这里: https://juejin.cn/post/6844903449604292616#heading-3

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

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

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

    要了始终允许, 能搞的事情多了去了.
    codeisjobs
        9
    codeisjobs  
       2021-06-01 10:39:30 +08:00 via iPhone
    @codeisjobs #5 更正下,是我傻逼了,不是必须给始终定位,是必须给精确定位。
    codeisjobs
        10
    codeisjobs  
       2021-06-01 10:41:44 +08:00 via iPhone
    不过如果系统是 13.0 以下的,不开启始终定位,地理围栏不给位置信息,不信可以试下。
    reaCodes
        11
    reaCodes  
    OP
       2021-06-01 12:18:15 +08:00
    @vincentxue 就滴答清单位置提醒而言,不给始终权限的话,该功能用不了。
    reaCodes
        12
    reaCodes  
    OP
       2021-06-01 12:48:09 +08:00
    @chinvo 但是不给始终允许权限,相关功能确实无法正常工作,不知道是程序员有意为之还是技术实现不了
    reaCodes
        13
    reaCodes  
    OP
       2021-06-01 12:49:46 +08:00
    @mcluyu 不给始终允许权限,功能无法工作
    SingeeKing
        14
    SingeeKing  
       2021-06-01 12:51:34 +08:00
    滴答没用地理围栏吧,亲测滴答的提醒要比系统的快捷指令自动化稳
    reaCodes
        15
    reaCodes  
    OP
       2021-06-01 12:55:51 +08:00
    @SingeeKing 不清楚有没有用地理围栏,但是信息提示确实挺及时的
    chinvo
        16
    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
        17
    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
        18
    ian19znj  
       2021-06-01 14:00:44 +08:00   ❤️ 1
    地址围栏一点都不准, 我设置当我离开公司告诉家人我下班了, 等我到家了都没触发.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5444 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:01 · PVG 14:01 · LAX 22:01 · JFK 01:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.