2015-03-08 41 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); 
    } 
}