2015-03-08 35 views
2

在使用离子框架和ngCordova插件进行开发的同时,在Android上使用cordova会出现不良行为。 使用PushPlugin插件,Im能够使用GCM接收通知。 当应用程序在后台并收到通知时,我可以在不进入应用程序的情况下解雇它,但是当我启动应用程序时,我并不知道收到的新数据(&已被解雇) 有没有办法仍然有数据?我需要它,因为它不仅是一个通知,而且还需要稍后在UI上显示的数据。Cordova - 关闭通知会丢失它里面的数据

+0

在哪个平台你有这个问题?在iOS上它是如何工作的,但在android上,我认为即使它被解雇,你也应该能够获得推动力。 – jcesarmobile 2015-03-09 08:21:37

+0

它很好的知道它是如何在IOS中工作的,我不知道。但在我的情况下我试图在Android中。我开始研究一个角度来挖掘java代码,并使用localStorage作为我的应用程序的接口,但也许因为它与ios相同,我应该采用不同的方式。 – buddy123 2015-03-09 08:45:58

+0

在Android上,应用程序获取推送消息并显示它,因此您可以查看插件代码并进行一些更改以在推送数据接收时保留它。但是这将涉及以本地方式(如sqlite数据库)存储它们,然后使用另一个插件来获取通知,这将不是一件容易的事情 – jcesarmobile 2015-03-09 08:50:40

回答

1

这不可能不幸。如果用户点击通知,你可以执行一些代码。如果用户驳回它,你的应用永远不会知道。

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

通过这种方式,您可以在应用启动时调用您的服务器以获取显示用户的内容列表。如果通知被点击,您可以直接将它们带到该数据,然后点击服务器并将其标记为“已查看”或其他任何内容。

希望有帮助,祝你好运!

+0

这就是我想到的一种选择,但它让人感觉到“延迟”,因为用户知道数据已收到,现在当他打开应用程序时,他需要等待几秒钟,直到他再次获取数据。也许可以从android访问localStorage吗?我知道android编码(我实际上重写我的应用程序在离子为了同时具有两个平台 - android&ios),也许我可以在gcmIntentService中编写一些代码来访问我的webView的localStorage? – buddy123 2015-03-09 05:11:19

+0

是的,你可以通过调用像访问本地存储:window.localStorag – justinschuldt 2015-03-09 13:54:01

+0

我跑出来的时候编辑我最后的评论,所以这里是: : 是的,你可以通过调用像访问本地存储与var newData = window.localStorage.yourVariable; 'Angular'的方法是使用它们的包装器$ window,因为它具有内置的承诺。您需要在您的控制器或服务中包含$ window作为依赖项。它可能看起来像这样: 。('dataService',function($ q,$ window){ return newData = $ window.localStorage.yourVariable; }); – justinschuldt 2015-03-09 14:01:40

0

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

加入PushPlugin.sendExtras(extras)不管,将发送的应用程序是否在前台或后台数据修改此function

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