【问题标题】:how to get alert when geofence exit notification is fired in cordova如何在科尔多瓦触发地理围栏退出通知时发出警报
【发布时间】:2019-03-05 22:38:29
【问题描述】:

这是以前问过的,但在科尔多瓦没有问过。

大家好,我想在用户进入地理围栏区域时收到警报,并且还希望在用户退出地理围栏时收到警报,以便我可以进入。

它应该适用于所有情况的前台、后台,甚至当应用程序被终止时

当用户进入时我收到警报,但在用户退出区域时没有。

任何帮助将不胜感激。

代码:

  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));
}

【问题讨论】:

    标签: android cordova cordova-plugins visual-studio-cordova geofencing


    【解决方案1】:

    在哪里使用这个插件:https://github.com/cowbell/cordova-plugin-geofence 并根据您的需要,注意以下几点:

    Javascript 后台执行

    这是已知的限制。 在后台时您的应用可能/将被暂停以不使用系统资源。 因此,任何 javascript 代码都不会运行,只有后台服务可以在后台运行。用户越过地理围栏区域时的本地通知仍然有效,但任何自定义 JavaScript 代码都不会。如果您想对地理围栏执行自定义操作,try to write it in native code.

    我们可以在插件文档中看到这个例子:

    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
            }
        });
    };
    

    编辑 1

    将代码添加到主代码后,我注意到两件事:

    首先,文档指定当您想一次添加多个地理围栏时,您必须从一个数组中执行此操作,因此需要使用多个参数。 可能没什么,但最好相信文档。

    然后,文档还指定了

    地理围栏会覆盖之前具有相同 id 的围栏。

    这正是你所做的这可能是事件无法正常工作的原因。

    如果我正确地遵循了文档,你应该有这样的东西:

    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
        });
    };
    

    【讨论】:

    • 用户从地理围栏区域退出时的任何有效 JS 代码?
    • 我修改了我的帖子,希望对你有帮助
    • 我正在检查,谢谢您的时间。
    • 恩佐,我不明白 TransitionType.BOTH 到底是什么意思?
    • 您是否知道您何时使用此插件进入某个区域?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多