我目前正在使用 ionic/cordova 开发混合应用程序。 该应用程序需要每 1 分钟左右向我们的后端发送一次位置信息,如果附近有任何有趣的东西,后端 API 将作出响应。 如果答案是肯定的,该应用程序将对本地通知进行排队,这有望让用户打开该应用程序。 当应用程序处于后台模式甚至手机被锁定时,都需要此功能。 该应用需要能够同时部署到应用商店、Google Play 和最终的 Windows Phone。
我目前正在使用这三个插件的组合:
https://www.npmjs.com/package/cordova-plugin-geolocation - 对于位置 https://github.com/katzer/cordova-plugin-background-mode - 对于背景模式 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");
});
};
}
所以...我的问题是:
1) 当我的设备被锁定时如何使解决方案工作(即使设备被锁定但返回超时也会调用 getCurrentPosition)?
2) 是否可以让这个解决方案在 iOS 上运行?
3) 以这种方式制作的应用会在 google play 和应用商店中获得批准吗?
4) 如果项目注定要失败,我有什么选择?
我真的需要这方面的帮助!
最佳答案
所以我目前有一个应用程序可以解决您上面列出的所有问题,这是我正在使用的插件:
https://github.com/mauron85/cordova-plugin-background-geolocation
该插件使用 watchPosition() 而不是 getCurrentPosition(),因为这个插件需要很长时间才能持续 ping 设备并消耗更多电池电量。
这肯定适用于 Android 和 iOS,但恕我直言,就精度和保持事件功能而言,它在 Android 上的表现比后者更好。
我在 Google Play 上没问题,Apple 确实允许使用此插件,Apple 商店中有许多使用此插件的应用程序,但 Apple 可能最初会拒绝它并询问应用程序的后台使用意图,然后,您将不得不就应用程序在后台执行的操作提出申诉,并确保它不会无限期运行(这是我的经验)。
一个。您还需要确保向 Apple 人员指出,用户可以通过一种方式关闭后台地理定位跟踪。我假设有?这是他们使用插件的主要问题。
祝你好运。
关于javascript - Cordova 应用程序背景中的GPS坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036429/