2016-07-03 66 views
0

我試圖通過Smack庫來驗證與Firebase-Cloud-Messaging的連接。我看到我的連接從google獲得streamId,因爲我在Android Studio IDE上記錄了這條消息: Log.d(「MyStreamId」,「Ddd:」+ connection.getStreamId()); 我的日誌會返回一個隨機字母數字號碼,所以這意味着Google的CCS正在注意到我的連接嘗試。現在,根據此鏈接: https://firebase.google.com/docs/cloud-messaging/server#connecting 爲了驗證我的「應用服務器」與Google CCS之間的連接,必須進行某種類型的通信交換。我正在嘗試開始使用XML格式的通信。在Android Studio上使用Smack構建XML流消息

我需要構造下面的「XML流」,並使用啪庫我的連接發送:

<stream:stream to="gcm.googleapis.com" 
    version="1.0" xmlns="jabber:client" 
    xmlns:stream="http://etherx.jabber.org/streams"> 

我所試圖做的是創建一個與鍵一個HashMap:「到」, 「版本」,「xmlns」。我在這個HashMap中丟失了另一個鍵嗎?

另外,我應該如何繼續?我應該把這個HashMap變成一些Json對象嗎?我之前在Android Studio上使用過JSON。我應該使用從Smack Library到XML()的方法將HashMap轉換爲流嗎?注意XML對象上的標籤。另外,如何使用我的連接對象(它是XMPPAbstractConnection對象)將它發送給Google的CCS?我的連接對象還有一個addAsyncStanzaListener對象,希望接收來自Google CCS的雙向通信。

任何想法或想法將不勝感激。

謝謝

回答

0

你問了幾個問題在這裏,但我想你可能誤會使用XMPP與FCM的設計意圖。我會盡力糾正這種情況,並且您可以改進您的問題。

一般而言,您不應該在Android客戶端上使用XMPP。這個想法是在您的應用服務器上使用XMPP客戶端來連接並與CCS通信。 Android將在設備和FCM之間保持盡力而爲的連接,請注意,這不會像服務器上可以連續打開的連接一樣,因爲這會導致設備電池無法使用。

+0

來自以下鏈接的示例:http://www.grokkingandroid.com/xmpp-server-google-cloud-messaging/ –

+0

,鏈接如下:http://www.grokkingandroid.com/xmpp-server -google-cloud-messaging /我發現Smack被用作與Firebase CCS進行通信的界面。基於此,Smack API充當與Firebase CCS的通信手段。現在,在Github上的友好應用程序中,他們使用Go Server與GCM進行通信。在其他鏈接中:https://firebase.google.com/docs/cloud-messaging/server#connecting朝中間。 CCS和App Server之間有一個「xml」交換。它發生在哪裏?在應用程序代碼或外部。 @arthurthompson –

+0

CCS(FCM的一部分)是一個XMPP服務器。它允許您的應用程序服務器充當XMPP客戶端(例如使用Smack)並與CCS打開連接。消息是JSON包裝在XML中,例如:https://firebase.google.com/docs/cloud-messaging/downstream#xmpp_message –