При использовании этого плагина: https://github.com/cowbell/cordova-plugin-geofence и, в зависимости от ваших потребностей, будьте осторожны со следующим:
Фоновое выполнение Javascript
Это известное ограничение. В фоновом режиме ваше приложение может / будет приостановлено, чтобы не использовать системные ресурсы. Поэтому любой код JavaScript не будет запускаться , только фоновые службы могут работать в фоновом режиме.Локальное уведомление, когда пользователь пересекает область геозоны, все еще будет работать, но любой пользовательский код JavaScript не будет.Если вы хотите выполнить пользовательское действие при пересечении геозоны, попробуйте написать его в собственном коде.
Мы можем увидеть этот пример в документации к плагину:
window.geofence.onTransitionReceived = function (geofences) {
geofences.forEach(function (geo) {
console.log('Geofence transition detected', geo);
});
};
И если мы будем искать в коде плагина, мы найдем это (www / TransitionType.js):
var TransitionType = {
ENTER: 1,
EXIT: 2,
BOTH: 3,
};
Так что вам нужно проверить, работает ли это:
window.geofence.onTransitionReceived = function (geofences) {
geofences.forEach(function (geo) {
if (geo.TransitionType === 2 ) {
// Do what you want
}
});
};
EDIT 1
После добавления вашего кода в основной код я заметил две вещи:
Во-первых, в документации указывается, что если вы хотите добавить несколько геозон одновременно, вы должны сделать это из массива и, следовательно, с помощьюнесколько параметров.Это может быть ничто, но лучше доверять документации.
Тогда в документации также указывается
Геозона переопределяет предыдущую с тем же идентификатором.
И это именно то, что вы делаете. Возможно, именно поэтому событие не может работать должным образом.
Если я правильно следую документации, у вас должно получиться что-то похожее на это:
window.geofence.addOrUpdate({
id: "69ca1b88-6fbe-4e80-a4d4-ff4d3748acdb",
latitude: xx.12345,
longitude: xx.12345,
radius: 100,
transitionType: 3, // Both (Enter and Exit)
notification: {
id: 1,
title: "Welcome!",
text: "In.",
openAppOnClick: true
}
}
).then(function () {
navigator.notification.alert('successfully added', function () { });
}, function (error) {
navigator.notification.alert('failed', function () { });
});
window.geofence.onTransitionReceived = function (geofences) {
geofences.forEach(function (geo) {
console.log('Geofence transition detected', geo);
// Do what you want
});
};