2012-05-04 118 views
3

是否可以在不使用Google server: C2DM的情況下向Android應用程序發送推送通知?在不使用C2DM的情況下在Android上發送推送通知

因此,我想讓自己的服務器直接嚮應用發送通知,但我不確定設備如何感知通知,因爲設備需要接收通知,即使應用不是運行並且通知應該出現在通知中心。

我認爲從www.airpush.com這些傢伙已經設法做到這一點,但我不知道如何。

任何人都可以幫助我嗎?

UPDATE:

此外,我想知道如何在通知中心顯示通知,如果我不使用C2DM?如果可以將通知中心配置爲接收來自我的服務器的通知,即使用戶刪除了我們開發的應用程序,該應用程序也會註冊該設備以接收通知。

我想每天發送3-4個通知,但這些通知需要出現在通知中心,他們應該只通過我們的服務器。如何在應用程序中配置通知中心以在我的服務器上發送推送通知請求。

謝謝!

回答

2

根據airpush.com上的FAQ,他們沒有使用真正的推送通知,而是每天輪詢服務器幾次。我認爲這也是一個可行的解決方案的一個原因是,Android的C2DM顯然使用了Google Play商店,因此它不適用於Google生態系統之外分發的設備。目前已經銷售500多萬臺Kindle Fire,值得思考。

從Airpush FAQ:

透過Android™應用程序的主要活動執行一次,Airpush客戶端使用的Android™操作系統的AlarmManager框架安排正在進行服務器輪詢事件每天幾次。如果從服務器輪詢廣告,它將被緩存到最佳顯示時間,這是由服務器在算法上確定的。

+0

是的,這可能是一個解決方案,但我想知道的是如何在通知中心顯示通知,如果我不使用C2DM?此外,我想知道是否可以配置通知中心從我的服務器接收通知,即使用戶刪除應用程序。 – Cosmin

+0

如果您在後臺服務中進行輪詢,或者如果您在AlarmManager中註冊了BroadcastReceiver(後者可能是Airpush的做法),您將擁有向通知中心發送通知所需的一切。所有你需要的是Context的一個實例(BroadcastReceiver.onReceive作爲一個參數,所以你很好)和NotificationManager,你可以從上面提到的Context獲得它。通過這兩件事,您可以創建一個通知,並在點擊通知時啓動一個活動的PendingIntent。 – Rich

+0

是的,但只有當應用程序在後臺時纔有效。如果用戶使用任務管理器或設置關閉應用程序,則不會再調用AlarmManager的方法。此外,我認爲AlarmManger在設備處於睡眠狀態時不起作用。基本上這個解決方案只在應用程序打開或在後臺運行時纔有效,而且設備沒有睡着,所以時間很少。 – Cosmin

0

沒有使用C2DM,沒有「真實推送通知」的選項。因爲(afaik,糾正我,如果我錯了)Android設備註冊在谷歌(他們仍然可以從您的手機通過遠程卸載惡意軟件),並與此IP他們能夠做推送通知。所有其他解決方案可能傾向於是「在服務器上註冊,保持連接處於活動狀態並等待請求」等,並且往往會導致電池效率更低。

+0

我們希望每天只發送3-4條通知,但我們希望他們在通知中心,如果有可能我們希望他們在那裏,即使用戶刪除了我們開發的應用程序。 – Cosmin

3

UrbanAirship有一個解決方案叫做Helium push。根據文檔氦:

適用於Android 1.6及更高
不需要谷歌帳戶
每天限制無默認推
每分鐘爲限
作品在亞馬遜設備(例如,Kindle的無默認推火)
端到端城市飛艇支持(即,API向設備)
最佳吞吐量

的問題是,你需要使用這一個開發應用程序的關鍵。

+0

謝謝你的回答,但我寧願只使用我的服務器。 – Cosmin

+1

根據我的理解,真正的問題是「他們怎麼做?:) –

3

看看MQTT

MQTT代表MQ遙測傳輸。它是一種發佈/訂閱,非常簡單輕便的消息協議,專爲受限設備和低帶寬,高延遲或不可靠的網絡而設計。

它可以用於(並在一些應用程序中使用)來實現定製服務器推送解決方案。使用MQTT的最着名的應用程序之一是Facebook Messanger

您可以在Internet上輕鬆找到關於MQTT的更多信息,例如, in this SO questionin this blog post

0

如果您希望用戶每天只接收3-4條消息,並且您的消息沒有綁定到特定的到達時間,則不需要推送機制。 只需在您的應用中創建一項服務,每天檢查您自己的Web服務5-10次。如果有新數據,請將您的應用顯示在通知中心。 如果您不想讓服務始終運行(如許多消息應用程序所做的那樣),則可以設置警報(使用Android AlarmManager框架)定期喚醒您的應用程序以檢查要顯示的新消息。

而如果它是可以配置的通知中心,從即使用戶刪除由我們開發的應用 其註冊的設備接收 通知我的服務器,應用程序收到 通知。

這聽起來像你想寫一個病毒或根工具包;-)你可以使用電子郵件,而不是你的消息。

更新2013-12-30: 正如我在評論中指出的那樣,重建GCM所做的不是一個好方法。當Google服務已經使用此功能加載設備時就足夠了。如果您的目標僅僅是Google沒有看到您發送給用戶的郵件,那麼您也可以對其進行加密。對於Google無法真正閱讀您的郵件,客戶端應用程序應該生成一個密鑰並將其發送到您的服務器。您通過GCM發送的所有消息都可以使用該密鑰進行加密。

如果您只是想規避Google對發送給用戶的郵件數量的限制,您可以將多個郵件打包成一個GCM通知並逐個顯示它們。但是,我們再次回到前面介紹的某種輪詢解決方案,只是當用戶想要在設備上緩存消息時顯示消息時,用戶不需要訪問互聯網。

+0

這個解決方案實際上並不是」推「。它只是一個母馬服務器輪詢。但是,如果每天推送的消息數量是單個數字,那麼我會認爲這是解決實際問題的辦法。 –

+1

你是對的,它沒有提供所要求的解決方案,而是爲給定的問題提供了一種更簡單的(並且在我看來是合適的)解決方案。有趣的是,我瞭解到,airpush與我描述的方式相同。 你不想自己重建GCM。最後,您需要做到這一點,即實時連接到您自己的服務。當Google Play服務已經這麼做時,電池就有足夠的負載。 –

0

解析有一個很棒的Android推送通知服務,非常容易設置。更多的信息在這裏:Parse Android Notification Doc

+0

但是OP的問題清楚地表明他必須使用自己的後端服務器。 –

相關問題