GPS坐标在cordova应用程序的背景中

iCe*_*iCe 10 javascript geolocation cordova hybrid-mobile-app ionic-framework

我目前正在使用ionic/cordova进行混合应用.该应用程序需要功能,它每隔1分钟左右将我们的后端与其位置相关联,如果附近有任何有趣的内容,后端API将会回答.如果答案是肯定的,应用程序将排队本地通知,希望这将使用户打开应用程序.当应用程序处于后台模式时,即使手机处于锁定状态,也需要此功能.该应用程序需要能够部署到应用程序商店,谷歌播放和最终Windows手机.

我目前正在使用这三个插件的组合:

https://www.npmjs.com/package/cordova-plugin-geolocation - 位置 https://github.com/katzer/cordova-plugin-background-mode - 用于bg模式 https://github.com/katzer/cordova-plugin-local-notifications - 用于本地通知

当设备未锁定时,这当前适用于Android(因此它在前景和后台模式下工作)但是当设备被锁定时,它无法获得GPS坐标.

我的代码目前看起来像这样:

        // Enable background worker          
        (cordova as any).plugins.backgroundMode.enable();

   intervalPromise = $interval(intervalWork, 30000, 0, false);

    function intervalWork() {
        $log.log('Trying to fetch pos');

        var options = { maximumAge: 30000, timeout: 30000, enableHighAccuracy: false };

        navigator.geolocation.getCurrentPosition(success,
            err,
            options);
    }

    function success(pos) {
        $log.log("lat: " + pos.coords.latitude + " long: " + pos.coords.longitude);

        var Checkin = $resource(ApiDataEndpoint.url + 'checkin/:lat/:lng/', {});

        var res= Checkin.get({ lat: pos.coords.latitude, lng: pos.coords.longitude });

               if (res) { 

                $cordovaLocalNotification.schedule({
                    id: 1,
                    title: 'test',
                    text: 'test',
                }).then(function(result) {
                    $log.log("ok");
                });
            };
         }
Run Code Online (Sandbox Code Playgroud)

所以...我的问题是:

1)如何在我的设备被锁定时使解决方案工作(即使设备被锁定但是返回超时,也会调用getCurrentPosition)?

2)是否有可能让这个解决方案在iOS上运行?

3)以这种方式制作的应用程序是否会在Google Play和应用程序商店中获得批准?

4)如果项目注定失败了我的替代方案是什么?

我真的需要这方面的帮助!

Far*_*son 10

所以我目前有一个应用程序可以解决您上面列出的所有问题,这里是我正在使用的插件:

https://github.com/mauron85/cordova-plugin-background-geolocation

  1. 该插件使用watchPosition()而不是getCurrentPosition(),因为这需要花费太长时间来不断ping设备并消耗更多电池电量.

  2. 这肯定适用于Android和iOS,但恕我直言,它比Android更适合Android,就精确度和保持活动功能而言.

  3. 我把它放入Google Play没问题,Apple确实允许这个插件,苹果商店有很多应用程序使用这个插件,但Apple可能最初拒绝它并询问应用程序的背景使用意图,然后你必须制作关于应用程序在后台执行的操作的一个吸引力,并确保它不会无限期地运行(这是我的经验).

    一个.您还要确保向Apple指出用户可以关闭背景地理位置跟踪的方法.我假设有吗?这是他们使用插件的主要问题.

祝好运.

  • mauron85 的插件已经好几年没有更新了,并且不能与最新版本的 cordova-android 一起使用。现在有一个基于它的新插件可以替代使用:https://github.com/haylltd/cordova-background-geolocation-plugin#readme (2认同)