2016-04-22 70 views
4

我正在創建Phonegap應用程序 - 目前爲Android - 使用Onesignal處理推送通知的過程。創建核心應用程序並不困難。在應用程序的上下文中,用戶實際上不需要查看通知。在後臺無聲處理推送通知

我所要求的是能夠處理應用程序JavaScript中的消息負載。如果我願意等待用戶單擊通知圖標,那麼觸發[notificationopenedcallback]事件並且我可以隨意按照我喜歡的有效負載進行操作,這不是問題。 1

不錯,但還不夠。我需要做的是在通知到達時用JavaScript處理有效載荷 - 而不是將來用戶單擊通知圖標時的某個時刻。

我不清楚這可以完成 - 也許是因爲沒有辦法爲已經背景的應用程序執行JS代碼。如果確實如此,我可以通過編寫一個本地應用程序來繞過這個問題嗎?

我非常感謝任何幫助。

+0

你有沒有設法達到這個底部?我處於完全相同的情況:我需要在Ionic應用程序中處理靜默推送通知,暫時喚醒應用程序並執行一些代碼。任何新聞? – fikkatra

+0

正如在接受的答案中已經提出的那樣 - 您需要編寫自己的插件,而不是將各種各樣的readymade插件放在一起。一旦你開始寫你自己的插件,你可以訪問整個Android API,並且可以做幾乎任何你喜歡的事情 – DroidOS

+0

以及如何發佈插件? :-) – fikkatra

回答

2

我想你必須編寫一個原生的Android應用程序,如果你想在他們到達時可靠地處理推送通知。

我一直在使用phonegap-plugin-push處理推在我的科爾多瓦應用通知和目前它沒有醒下對新接收到的推送通知所有情況下的應用。例如,請參閱此問題#806

對於我的目的(非關鍵),我依靠用戶單擊通知以在任何情況下喚醒應用程序。phonegap-plugin-push的好處在於,它支持iOS,Android和Windows,以備將來支持其他平臺。

3

聲明:我剛剛在科爾多瓦開發了一個插件,但沒有看過年齡推送通知。

在任何情況下,快速回答是在插件中實現推送通知。從JS調用插件並啓動後臺服務來偵聽和處理有效負載。

您將通過編寫一個包含從BroadcastReceiver中取消的類的插件來實現此目的。你會在onReceive中處理傳入的通知。

至於其他插件,我有限的經驗是,你應該繼續使用cordova框架。這意味着應該使用cordova添加OneSignal。我基於這個我使用支持V4插件,所以YMMV。

編輯:在另一方面和第二個想法,如果你使用像谷歌通知什麼標準,你可能不需要OneSignal。

我還沒有做的一件事就是在插件中生成一個帶Service和manifest的清單。我實際上是在附加到插件的AAR中完成的。所以我不確定AAR清單是否會被附加到主清單上。它可能應該,但我沒有看過這個。如果是這種情況,你甚至不需要從JS調用本地代碼。廣播接收機將收到通知。否則,你需要從JS調用registerReceiver。

最後,我認爲你是對的。如果應用程序在後臺,它會停止並釋放WebView等資源。這意味着JS不會運行。

+0

從插件_實現推送通知。你能解釋一下嗎?你的意思是直接從應用程序JS註冊Push通知(在我的情況下通過OneSignal),而不是通過自定義的Phonegap插件進行註冊? – DroidOS

+0

我的意思是寫一個額外的自定義插件,並相應地更新了答案。 –