как получить оповещение при срабатывании уведомления о выходе из геозоны в Кордове - PullRequest
0 голосов
/ 05 марта 2019

Это спрашивается ранее, но не в кордове.

Привет всем, я хочу получать оповещения, когда пользователь входит в область геозоны, а также хочу оповещения, когда пользователь выходит из геозоны, чтобы я мог сделать вход.

он должен работать во всех случаях: передний план, фон и даже когда приложение закрыто

Я получаю уведомление, когда пользователь входит, но не когда пользователь выходит из региона.

Любая помощь будет очень признательна.

КОД:

  window.geofence.addOrUpdate({
        id: "69ca1b88-6fbe-4e80-a4d4-ff4d3748acdb",
        latitude: xx.12345,
        longitude: xx.12345,
        radius: 100,
        transitionType:1,
    notification: {
            id: 1,
            title: "Welcome!",
            text: "In.",
            openAppOnClick: true
        } 
    }, {
            id: "69ca1b88-6fbe-4e80-a4d4-ff4d3748acdc",
            latitude: xx.12345,
            longitude: xx.12345,
            radius: 100,
            transitionType:2,
            notification: {
                id: 1,
                title: "Bye!",
                text: "Out.",
                openAppOnClick: true
            }
        }).then(function () {
     navigator.notification.alert('successfully added', function () { });   
    }, function (reason) {
        navigator.notification.alert('failed', function () { });    
    })

Функция обратного вызова перехода: , которая вызывается только тогда, когда я нахожусь вв пределах области это не вызывается, когда я вне области

window.geofence.onTransitionReceived = function (geofences) {
        alert(JSON.stringify(geofences));
}

1 Ответ

0 голосов
/ 05 марта 2019

При использовании этого плагина: 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
    });
};
...