科尔多瓦应用程序背景中的GPS坐标
GPS coordinates in background in cordova app
我目前正在使用 ionic/cordova 开发混合应用程序。
该应用程序需要这样的功能,它每 1 分钟左右向我们的后端发送一次位置信息,如果附近有任何有趣的东西,后端 API 将做出响应。
如果答案是肯定的,该应用程序将对本地通知进行排队,这有望让用户打开该应用程序。
当应用程序处于后台模式时甚至 phone 被锁定时,都需要此功能。
该应用程序需要能够部署到应用程序商店,google 播放并最终 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) 当我的设备被锁定时如何使解决方案工作(即使设备被锁定但 returns 超时也会调用 getCurrentPosition)?
2) 是否可以让此解决方案在 iOS 上运行?
3) 以这种方式制作的应用会在 google Play 和应用商店中获得批准吗?
4) 如果项目注定失败,我有什么选择?
我真的需要这方面的帮助!
这个插件有一个关于如何使用流星服务器和 cordova 来做你需要的事情的很好的指南:
zeroasterisk/meteor-cordova-geolocation-background
它会自动配置 android 和 iOS。对于 windows phone 我不知道。
- Meteor 在 Cordova 中配置此插件(您必须配置)
- Meteor 在 Cordova 中配置此插件(您必须配置)
- Meteor 可以触发后台服务以获取地理定位 (GPS) 详细信息
- Cordova 后台服务定期将其数据发布到 Meteor 服务器(而不是客户端 Cordova 实例)
- Meteor 服务器可以更新集合(或任何其他内容)
- Meteor 客户端与服务器同步
所以我目前有一个应用程序可以解决您上面列出的所有问题,这是我正在使用的插件:
https://github.com/mauron85/cordova-plugin-background-geolocation
该插件使用 watchPosition() 而不是 getCurrentPosition(),因为这个插件需要很长时间才能持续 ping 设备并消耗更多电池电量。
这肯定适用于 Android 和 iOS 但恕我直言,就精度和保持活动功能而言,它与 Android 比后者更好.
我搞定了 Google 玩没问题,Apple 确实允许这个插件,Apple 商店里有很多使用这个插件的应用程序,但 Apple 最初可能会拒绝它并且询问应用程序的后台使用意图,然后您将不得不就应用程序在后台做什么提出申诉,并确保它不会无限期地运行(这是我的经验)。
一个。您还需要确保向 Apple 人员指出,用户可以通过一种方式关闭后台地理定位跟踪。我假设有?这是他们使用插件的主要问题。
祝你好运。
我遇到了完全相同的问题,使用的插件与您使用的相同。事实证明这是一个 设备权限问题 。
cordova-plugin-geolocation 插件没有后台运行的权限,更重要的是没有权限在后台跟踪GPS。虽然 cordova-plugin-background-mode 插件确实允许您在后台执行代码,但您无法在后台获取 GPS 坐标。
解决方法是添加一个插件,支持后台获取位置数据。有几个插件支持这一点,包括允许您指定自己的自定义权限的 mauron85/cordova-plugin-background-geolocation plugin (as suggested previously). An alternative is to use the cordova-custom-config 插件。 真的可以添加任何插件,只要它支持后台定位服务。不需要额外的代码。
您可以通过打开应用程序设置(在 iOS 中)并确认 "Always" 选项可用来验证您是否拥有正确的权限。
我目前正在使用 ionic/cordova 开发混合应用程序。 该应用程序需要这样的功能,它每 1 分钟左右向我们的后端发送一次位置信息,如果附近有任何有趣的东西,后端 API 将做出响应。 如果答案是肯定的,该应用程序将对本地通知进行排队,这有望让用户打开该应用程序。 当应用程序处于后台模式时甚至 phone 被锁定时,都需要此功能。 该应用程序需要能够部署到应用程序商店,google 播放并最终 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) 当我的设备被锁定时如何使解决方案工作(即使设备被锁定但 returns 超时也会调用 getCurrentPosition)?
2) 是否可以让此解决方案在 iOS 上运行?
3) 以这种方式制作的应用会在 google Play 和应用商店中获得批准吗?
4) 如果项目注定失败,我有什么选择?
我真的需要这方面的帮助!
这个插件有一个关于如何使用流星服务器和 cordova 来做你需要的事情的很好的指南:
zeroasterisk/meteor-cordova-geolocation-background
它会自动配置 android 和 iOS。对于 windows phone 我不知道。
- Meteor 在 Cordova 中配置此插件(您必须配置)
- Meteor 在 Cordova 中配置此插件(您必须配置)
- Meteor 可以触发后台服务以获取地理定位 (GPS) 详细信息
- Cordova 后台服务定期将其数据发布到 Meteor 服务器(而不是客户端 Cordova 实例)
- Meteor 服务器可以更新集合(或任何其他内容)
- Meteor 客户端与服务器同步
所以我目前有一个应用程序可以解决您上面列出的所有问题,这是我正在使用的插件:
https://github.com/mauron85/cordova-plugin-background-geolocation
该插件使用 watchPosition() 而不是 getCurrentPosition(),因为这个插件需要很长时间才能持续 ping 设备并消耗更多电池电量。
这肯定适用于 Android 和 iOS 但恕我直言,就精度和保持活动功能而言,它与 Android 比后者更好.
我搞定了 Google 玩没问题,Apple 确实允许这个插件,Apple 商店里有很多使用这个插件的应用程序,但 Apple 最初可能会拒绝它并且询问应用程序的后台使用意图,然后您将不得不就应用程序在后台做什么提出申诉,并确保它不会无限期地运行(这是我的经验)。
一个。您还需要确保向 Apple 人员指出,用户可以通过一种方式关闭后台地理定位跟踪。我假设有?这是他们使用插件的主要问题。
祝你好运。
我遇到了完全相同的问题,使用的插件与您使用的相同。事实证明这是一个 设备权限问题 。
cordova-plugin-geolocation 插件没有后台运行的权限,更重要的是没有权限在后台跟踪GPS。虽然 cordova-plugin-background-mode 插件确实允许您在后台执行代码,但您无法在后台获取 GPS 坐标。
解决方法是添加一个插件,支持后台获取位置数据。有几个插件支持这一点,包括允许您指定自己的自定义权限的 mauron85/cordova-plugin-background-geolocation plugin (as suggested previously). An alternative is to use the cordova-custom-config 插件。 真的可以添加任何插件,只要它支持后台定位服务。不需要额外的代码。
您可以通过打开应用程序设置(在 iOS 中)并确认 "Always" 选项可用来验证您是否拥有正确的权限。