2011-12-20 52 views
6

我正在開發iOS應用程序。應用程序有不同的「區域」,用戶可以向他們發佈「事物」。觀看同一區域的其他用戶應該將發佈的內容發送到他們的手機(但只有在該應用程序正在運行時)。使用XMPP將實時信息發送到運行iOS應用程序

我已經開始使用RESTful API在Django後端工作。我計劃在Amazon Web Services,上託管後端,並且每次將某個內容添加到「區域」時,使用Amazon Simple Queue Service將更新時間和「區域」放入隊列中。我將製作一個處理隊列中的項目的Python應用程序,查詢數據庫以查看哪些用戶可以下載新的「事物」 - 目前,這部分計劃隨後將Apple Push Notification發送到手機,並且如果應用程序正在運行它可以創建一個簡單的RESTful請求來獲取JSON格式的新數據。

但是我相信XMPP會是一個更好的解決方案(在iOS端使用XMPPFramework),並且可以在將來支持Android。


我已經做了很多的研究,如何使用XMPP用於此目的,但文檔建議您將使用公共XMPP網絡,用戶將不得不建立一個XMPP帳戶,是不清楚如何發送非聊天信息。

該項目需要使用XMPP純粹將信息從服務器發送到用戶設備。因此,它應該是一個私人XMPP網絡,如有必要,用戶可以註冊一個帳號XMPP此專用網絡上(但在幕後,他們應該不知道什麼技術供電的應用。)


是否可以使用XMPP將信息發送到移動應用程序?在互聯網上的很多答案/教程基本上只是建議使用XMPP服務器和客戶端 - 沒有提到如何在專用網絡上連接兩臺服務器以發送由XMPP服務器以外的其他設備確定的數據。

非常感謝您的幫助:)

回答

15

是的,這是可能的。不僅如此,通過XMPP發送和接收任何你想要的東西都是完全可能的。

通常XMPP用於jabber聊天帳戶。這意味着一些事情。

  1. 每個用戶需要設置爲服務器上的用戶。這是爲了讓服務器知道哪些客戶端推送消息。只需要設置一個隨機的用戶/密碼並將其直接鏈接到應用程序並不困難。

  2. 發送聊天信息只是表示有發送者和接收者。在你的情況下,你可能會忽略發件人,但如果你有多個郵件可能來自的地方,它可能會很有用。

  3. 消息可以包含任何您想要的信息。我完全記不住(自從我使用XMPP以來已經有一段時間了),但我認爲您可以在實際的消息本身(或者json或其他)中發送XML,也可以在消息中附加額外的XML,然後離開該消息本身是空白的(或者具有標稱值)。

您需要開始的是XMPP服務器。您可以將其安裝在您的Web服務器上(我假設您可以將其安裝在AWS上,但我不確定)。這是我經常使用的服務器,Openfire,它的設置和使用非常簡單(並且有一個漂亮的網頁界面,您可以使用它來設置所有內容)。這可以讓你發送接收消息,並使整個事情「私人」。這意味着,儘管您可能會連接到公共Jabber網絡,但您也可以限制對服務器的訪問。

接下來你想要一個基於web的api。有一個很好的PHP框架,xmpphp這將幫助你建立一個API。這個api將允許你從你的python腳本發送消息(例如發送req到curl)到xmpp服務器,它將它傳遞給iphone。如果你不想發送消息,那麼你就全部設置好了。使用php來收聽XMPP消息是另一個魚羣!

要記住的另一件事是,你需要從應用程序發送狀態,以便服務器知道你是否已經登錄和「聆聽」或沒有。再說一遍,如果你在尋找它的話,這在互聯網上是完全有據可查的(我不能完全記住確切的內容)。因此,在您的python/php腳本中,您可以測試以查看您正試圖發送消息的用戶當前是否「已登錄」和「正在聆聽」。如果他們不是,你需要實現推送通知的事情,併發送推送通知。如果你不確定這個,我會推薦一個叫做urban airship的很棒的服務。他們每月發送高達1,000,000次推送通知(隨後的通知非常合理)。否則,要爲自己設置服務的世界做好準備! (我聽說過!)

我希望這回答了你的大部分問題。它是一個非常專業的主題(很多人不會了解XMPP - 這是你只有在需要了解XMPP時纔會知道的內容)。雖然XMPP功能非常強大,並且比重複http請求和各種更好的解決方案。如果你能找到它,互聯網上有很多信息,但你可能必須對如何解釋這些信息有所狡猾,它是那些還沒有完全轉移到主流iPhone上的東西(我的想法是)。

編輯...一件事

謹防輟學的 - 互聯網輟學和這樣。這聽起來很明顯,但它總是咬我!總是忘記有時互聯網切斷,我的XMPP連接需要重新連接。特別是如果人們把應用程序放在後臺,然後再回來看看。 :)請記住在需要時重新連接。

+0

非常感謝,這是我閱讀過的最好,最有用的答案。它非常清楚地解釋了我對XMPP和移動應用程序不瞭解或不瞭解的一切:D – 2011-12-20 16:32:52

+0

嗯,我很高興,謝謝你的評論。 :)它已經有一段時間了(我發現你並沒有真正地每天使用XMPP!)但是如果我可以再幫忙,那麼告訴我,你可以在twitter上找到我(@tclayson)。 – 2011-12-20 16:47:26

+0

@ ThomasClayson - 您是否可以使用XEP -0234通過XMPP發送圖像和視頻 – iEinstein 2013-11-22 12:59:19