【发布时间】:2022-01-10 01:35:18
【问题描述】:
即使在应用程序终止后,保持用户位置与服务器同步的最佳方法是什么? 这是我到目前为止发现的
- 使用前台服务。我已经对此进行了测试,但它很耗电池,有时当您锁定手机或关闭屏幕时它会死机。
- 使用工作管理器。我也测试过,它每15分钟发送一次位置,但是太不可靠了,过了一会儿就停止发送了。
- 地理围栏。我读到 Geofencing api 会更频繁地获取位置更新,每隔几分钟左右,但我还没有测试过。
- 位置监听器。有一个方法叫 onLocationChanged,但我不知道它在后台如何工作。
是否有类似广播接收器的东西,只有在位置发生一定幅度变化时才会被触发?我认为这将是一个优化的解决方案。 我正在构建一个应用程序,它使用类似于 facebook 附近朋友的功能(很久以前就停止工作)或类似火种的东西来显示附近的人。 目前我需要这个用于android,但我也需要它用于IOS,我正在开发一个flutter应用程序。
【问题讨论】:
-
即使应用程序不在前台,您也希望不断获取用户位置的更新,这似乎是一种隐私问题……我敢打赌,较新版本的 Android 不允许您这样做那种事不管。
-
tinder 是如何做到这一点的?它向您显示您周围的人与您的距离
-
好吧,我不是 Tinder,我几乎没有使用过它,但我想说它只有在你在应用程序内部(或应用程序在前台)时才会这样做。我会做的是,而不是 100% 地窥探用户的位置,我会在他们打开您的应用程序并使用它做任何您需要的事情时查询他们的位置,并将其保存在某个地方。一旦他们关闭应用程序,如果需要,您可以使用缓存的位置信息继续做您的事情。尽管第二部分对我来说仍然听起来像是隐私问题。如果有帮助,请让我写下来作为答案,让你接受!
-
虽然您确实需要考虑隐私方面,但它们独立于该问题的技术方面。在 iOS 上,如果用户允许,您的应用可以通过“始终”权限获取用户位置。如果您的应用程序被用户终止,那么您将不会获得更新,因为他们杀死了您的应用程序并且 iOS 假设他们希望它停止。在 iOS 上,您最好的方法可能是使用重要的位置更改更新。这是对电池友好的,但每 500m 左右只会为您提供更新。确保您还阅读了 iOS 如何使用“临时始终”来最初仅提供前台位置
-
一段时间后,系统会询问用户是否还想在后台向您的应用提供他们的位置。您可能需要单独查看 Android,因为我不知道该平台如何处理位置更新