Web应用程序使用Service Worker和推送通知来获取后台地理位置

时间:2018-09-23 08:55:49

标签: push-notification geolocation service-worker

我正在寻找一种解决方案,以在移动浏览器中定期获取地理位置信息(每1分钟)。我进行了一些研究,得知在后台(手机被锁定或webapp未激活时)获取地理位置是不可能的。在前台工作正常。

我正在制作一个Web应用程序,在此我可以获取用户位置并将其发送到我的服务器。一切正常,直到用户锁定手机为止。我尝试了许多解决方法:

  • setInterval进行地理位置定位,在前台工作正常,但在后台工作失败
  • 使用cordova将我的网络应用程序转换为Android,但是仍然存在相同的问题
  • 使用了https://github.com/mauron85/cordova-plugin-background-geolocation这个Android插件
    • 在前景和背景方面都很好
    • 但同一个插件在iPhone中不起作用(我没有测试它,我在继续搜索之前在Google中进行了搜索
    • 仅在一个平台( android )支持下发布我的应用程序是不好的,因此,这种解决方法对我也失败了。
  • 我也考虑过将serviceworkers用于我的Web应用程序,但是似乎问题仍然存在 https://github.com/w3c/ServiceWorker/issues/745

    我有另一个解决方案,但是在花时间之前,我想知道是否有人已经尝试过了。

    我了解了推送通知:

    1. Web应用程序客户端注册为推送通知
    2. 发送 我服务器的订阅者对象
    3. 我的服务器使用此对象发送 消息发送到推送通知服务器
    4. 推送通知服务器 将消息发送到我的Web应用程序客户端
    5. 我的网络应用客户端唤醒我 服务人员短暂显示通知消息
    6. 根据Google文档:
        

      注意:在当前实现中   的Chrome浏览器,每当我们收到推送消息而没有   网站在浏览器中可见,我们必须显示一个通知。那是,   我们无法在用户不知情的情况下默默地做它。如果我们不这样做   显示通知,浏览器自动创建一个通知   用户知道该应用程序正在后台运行。

    在我的应用运行之前,我不介意向用户显示永久通知。我已经准备好进行权衡了。

    现在,我的问题是,在第5步,当我唤醒服务工作者时,**我是否有机会调用可能在后台运行的main.js(主Web应用程序) **,将获取地理位置并将其更新到我的服务器吗?

    有人成功或失败地尝试过此解决方案,请告知。

1 个答案:

答案 0 :(得分:-1)

您是否可以尝试页面可见性Api,它侦听浏览器选项卡的可见性更改是否被隐藏或切换到其他选项卡(如果使用浏览器)。对于手机,这只是一个尝试。

src:https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API

或者您也可以查看此答案。.

Detecting when screen is locked