Cordova-取消通知将丢失其中的数据

Cordova-取消通知将丢失其中的数据,cordova,cordova-plugins,ionic,phonegap-pushplugin,Cordova,Cordova Plugins,Ionic,Phonegap Pushplugin,我在android上使用cordova时遇到了一个不良行为,当时我正在使用ionic framework和ngCordova插件进行开发。 使用PushPlugin插件,我可以使用GCM接收通知。 当应用程序处于后台并且收到通知时,我可以在不输入应用程序的情况下将其关闭,但是,当我启动应用程序时,我不知道接收到的新数据(&关闭) 有没有办法保留这些数据?我需要它,因为它不仅是一个通知,而且是我以后需要在UI上显示的数据。不幸的是,这是不可能的。如果用户单击通知,您可以执行一些代码。如果用户拒绝,

我在android上使用cordova时遇到了一个不良行为,当时我正在使用ionic framework和ngCordova插件进行开发。 使用PushPlugin插件,我可以使用GCM接收通知。 当应用程序处于后台并且收到通知时,我可以在不输入应用程序的情况下将其关闭,但是,当我启动应用程序时,我不知道接收到的新数据(&关闭)
有没有办法保留这些数据?我需要它,因为它不仅是一个通知,而且是我以后需要在UI上显示的数据。

不幸的是,这是不可能的。如果用户单击通知,您可以执行一些代码。如果用户拒绝,你的应用程序将永远不会知道

我将如何构建该功能是拥有一个保存用户需要查看的所有信息的数据库。当用户看到信息时(通过打开通知或其他方式),调用服务器并将该内容标记为已读

这样,当应用程序启动时,你就可以调用你的服务器,获取一个要向用户显示的内容列表。如果单击了通知,您可以将它们直接带到该数据,然后点击服务器并将其标记为“已查看”或其他内容


希望有帮助,祝你好运

如果应用程序在后台,您可以通过修改插件来缓存来自服务器的内容来实现此行为。这样,即使通知被取消,您也会收到消息。阅读我关于修改插件的文章

通过添加
PushPlugin.sendExtras(extras)
来修改此设置,无论应用程序是在前台还是后台,它都将发送数据


这是我想到的一个选项,但让人感觉到“延迟”,因为用户知道数据已经收到,现在当他打开应用程序时,他需要等待几秒钟,直到他再次获得数据。也许可以从android访问本地存储吗?我知道android编码(我实际上是在ionic中重新编写我的应用程序,以便同时拥有两个平台-android和ios),也许我可以在GCMinentService中编写一些代码来访问我的webView的本地存储?是的,你可以通过调用类似以下内容来访问本地存储:window.localStoragI在编辑我的上一条评论时超时,这里是这样的:是的,您可以通过调用以下内容来访问本地存储:var newData=window.localStorage.yourviable;“角度”的方法是使用他们的包装器$window,因为它内置了承诺。您需要在控制器或服务中包含$window作为依赖项。它可能是这样的:.factory('dataService',function($q,$window){returnnewdata=$window.localStorage.yourviable;});您讨论的是如何从角度处理本地存储。我知道,这就是我存储数据的方式。我想知道的是,是否可以从android gcm服务中访问相同的本地存储?哦,我明白你的意思。您应该能够访问本地存储。存储在window.localStorage对象中的任何内容实际上都存储在SQLLite数据库文件中:data/data/您在哪个平台上遇到此问题?在iOS上它是如何工作的,但在android上,我认为你应该能够得到推动,即使它被驳回。很高兴知道它在iOS上是如何工作的,我不知道。但在我的情况下,我尝试在安卓系统。我开始从一个角度研究java代码,并使用localStorage作为我的应用程序的接口,但也许因为它与ios相同,我应该做不同的事情。在android上,应用程序获取推送消息n并显示它,因此您可以查看插件代码,并在收到推送数据时进行一些更改以保持推送数据。但这将涉及到以本机方式(如sqlite数据库)存储它们,然后使用另一个插件来获取通知,这并不容易
protected void onMessage(Context context, Intent intent) {
    Log.d(TAG, "onMessage - context: " + context);
    Bundle extras = intent.getExtras();
    if (extras != null)
    {
        if (PushPlugin.isInForeground()) {
            extras.putBoolean("foreground", true);
        }
        else {
            extras.putBoolean("foreground", false);
            if (extras.getString("message") != null && extras.getString("message").length() != 0) {
                createNotification(context, extras);
            }
        }
        // call sendExtras always
        PushPlugin.sendExtras(extras);
    }
}