Cordova iBeacon; 应用程序退出后发送本地通知,在安卓系统上无法正常工作。

14
我正在使用 Cordova/Phonegap iBeacon插件 ionicframework 在我的cordova项目中。我尝试在进入监视区域时通过Cordova本地通知插件在Android和iOS上发送本地通知,即使应用程序已被杀死。

这是我的代码:

document.addEventListener("deviceready", onDeviceReady, false);

    function didDetermineStateForRegion(pluginResult) {
    }

    function didStartMonitoringForRegion (pluginResult) {
    }
    function didExitRegion(pluginResult) {
        $cordovaLocalNotification.add({
        id: 30244234234,
        title: "Good By!",
        text: "Hope to see you again."
            }).then(function () {
            });
    }

    function didEnterRegion (pluginResult) {
        $cordovaLocalNotification.add({
        title: "Welcome",
        text: "Tap to launch app"
            }).then(function () {

            });

    };
    function didRangeBeaconsInRegion (pluginResult) {

    }

    function onDeviceReady() {
        // Now safe to use device APIs
        function createBeacon(uuid,nofiyState) {

            var uuid = uuid; // mandatory
            var identifier = 'estimote'; // mandatory

            // throws an error if the parameters are not valid
            var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid);
            beaconRegion.notifyEntryStateOnDisplay = true;
            return beaconRegion;
        }
        var delegate = new cordova.plugins.locationManager.Delegate();
        delegate.didDetermineStateForRegion = didDetermineStateForRegion;

        delegate.didStartMonitoringForRegion = didStartMonitoringForRegion;

        delegate.didRangeBeaconsInRegion = didRangeBeaconsInRegion;
        delegate.didEnterRegion = didEnterRegion;
        delegate.didExitRegion = didExitRegion;

        var beaconRegion = createBeacon('02681445-8D1B-4F58-99D4-B25F4B129A58',true);
        // var beaconRegionBlue = createBeacon('02681445-8D1B-4F58-99D4-B25F4B129A58',1,,true);
        cordova.plugins.locationManager.setDelegate(delegate);

        // required in iOS 8+
        //cordova.plugins.locationManager.requestWhenInUseAuthorization();
        cordova.plugins.locationManager.requestAlwaysAuthorization();
        cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion)
        .fail(console.error)
        .done();

    }

cordova插件:

com.unarin.cordova.beacon 3.3.0 "Proximity Beacon Plugin"
de.appplant.cordova.plugin.local-notification 0.8.1 "LocalNotification"
nl.x-services.plugins.socialsharing 4.3.16 "SocialSharing"
org.apache.cordova.console 0.2.13 "Console"
org.apache.cordova.device 0.3.0 "Device"

cordova版本:4.3.0

即使应用程序被终止,在iOS上仍然可以正常工作,但在Android上,只有在应用程序在后台时才会收到通知。当我在Android的任务管理器中杀死应用程序时,我从未看到任何本地通知。

是否可能在Android上即使应用程序被终止也能接收通知?

感谢您的帮助。


如果您通过“设置”->“应用程序”->“我的应用程序”->“强制停止”来终止应用程序,则该应用程序及其所有进程都将停止,即使是在后台监听的进程也会被停止。否则,您需要在Android中使用后台服务来获取消息/本地通知。 - Morrison Chang
1
我认为在通过任务管理器杀死应用程序后,您将无法收到通知。我有一个类似的应用程序,使用ionic框架和cordova开发。为了在应用程序在后台运行时仍然能够接收通知,我正在使用cordova背景模式插件,该插件位于https://github.com/katzer/cordova-plugin-background-mode。它将允许您在应用程序不活跃地运行在前台时运行逻辑。 - nthapa
@MorrisonChang 我从来没有像你说的那样强制停止应用程序;我只是通过长按主页按钮来停止它,这就是我所说的任务管理器。 - semirturgay
@nthapa13,我已经能够在应用程序后台接收本地通知,而且iBeacon插件已经具备运行的能力,为什么你说我在杀死应用程序后无法接收通知? - semirturgay
请问您能否与我分享项目,可以使用Dropbox或其他地方。 - Vinod Kumar Marupu
1个回答

4

让我们澄清一些事情,你正在混淆的是以下状态:

  1. 将应用作为服务使用
  2. 在后台运行的应用(即最小化)。
  3. 应用已被杀死(完全未运行)

在所有情况下,当您杀死应用程序(通过在自定义ROM中长按返回按钮或从应用程序菜单中强制停止时),该应用程序仅从内存中删除,不执行任何代码!

通常,在这种情况下会自动重新启动服务,检查此答案(链接),正如您所读到的:

强制执行服务反对用户的意愿真的是一个非常糟糕的模式。

有很多cordova插件可以创建BroadcasteReceiver,但是简单回答您的问题:如果应用程序被杀死,则无法收到通知。

但是您应该考虑到:如果用户关闭了您的应用程序,则意味着这是有意为之的,因此您不需要担心您的应用程序是否能够正常工作,因为这是用户的问题,而不是您作为开发者的问题。


首先感谢您的回答。我知道这是一种不好的模式,但正如您所知,这是一个iBeacon应用程序,那么如果我不能在用户手机在口袋中时发送欢迎和一些活动通知,使用信标的意义是什么呢?现在我正在努力创建自己的服务,一旦找到解决方案,我会分享它。 - semirturgay
@semirturgay 很高兴能帮助你,但这不是关于创建自己的服务还是不创建的问题,因为服务可以被终止,就像终止应用程序一样,如果用户终止了您的服务会怎么样? - ProllyGeek
1
@ProllyGeek 我不同意。推送通知怎么办?它们旨在即使应用程序关闭(=未在后台运行)也向用户发送通知。如果预定了本地通知,即使应用程序被杀死,它们也可以执行。监听ibeacon信号也应该是可能的。如果用户不想在范围内收到警报,则应撤销应用程序的通知权限。 - binoculars
@binoculars 我在这方面做了很多研究,但是我没有找到任何解决方案。目前看来这似乎是不可能的,所以我决定只开发iOS应用程序。 - semirturgay
@semirturgay,为什么不创建一个监听器服务,永远不用担心被杀死的问题,我认为即使Facebook也不会担心这样的问题。 - ProllyGeek
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接