2012-05-01 85 views
1

我想編寫一個Android應用程序,它將通知從移動設備發送到安裝在PC上的客戶端應用程序。通知將包含將由客戶端解析的數據。通知只是一種方式。Android到PC通知平臺

或者換句話說:「從一個設備發送數據的通知到另一個,共享相同的用戶帳戶」

什麼是最好的通知/短信平臺來實現這樣的行爲?

一些要求:

  1. 使用現有[免費]服務器基礎設施(每增加一個?)
  2. 移動PC的連接必須通過公共服務器驗證(通過IP沒有廣播或)
  3. 設置通知時間必須接近實時
  4. 簡單實施
  5. [可選]使用Google帳戶身份驗證

有關我的要求的任何建設性反饋也將不勝感激。

回答

2

這聽起來像XMPP將符合您的要求。只要您的「通知」的大小和頻率合理(畢竟這些都是免費服務!),它肯定會允許某人使用他們的Google Talk帳戶或任何其他XMPP帳戶(例如jabber.org)。

你應該可以使用現有的libraries來完成這個罰款。本文將討論基本XMPP級別的內容,但許多庫將提供更高級別的API來執行此處描述的內容。

如何實現各種事情的一些注意事項你想要的:

每一個連接到XMPP帳戶分配一個叫做'resource'唯一標識符。在XMPP中,像[email protected]這樣的簡單地址被稱爲'bare JID'。您還可以通過包含資源[email protected]/your-app829abc(「完整JID」)發送到特定連接。因爲資源來來往往,並且可能會有所不同(例如Google將它們半化),所以presence用於廣播availabilityunavailability資源。

桌面客戶端需要發送狀態,以便移動客戶端可以在線查看它。它還應包含'-1'的priority以防止其接收來自用戶聯繫人的正常聊天消息。它還應該包括capabilities或類似的識別信息,以便移動客戶端可以通過其他應用程序(例如即時消息客戶端)與用戶的帳戶進行在線識別。

需要注意的一件事,可能是也可能不是你想要的,桌面客戶端無法脫機顯示。它顯然需要發送在線狀態,以便移動客戶端可以找到它,但用戶的聯繫人也會在線看到它(即使用戶未登錄到其IM客戶端)。但是,否定優先級將阻止它接收IM消息。

<!-- Desktop sends: --> 
<presence> 
    <priority>-1</priority> 
    <your-app xmlns="http://example.com/your-app" type="desktop" /> 
</presence> 

所以現在從移動客戶端的角度來看...它需要簡單地連接到相同的帳戶,併發送類似的狀態。發送自己的存在後,它會自動接收聯繫人的在線狀態以及與同一帳戶的其他連接,包括桌面客戶端的連接。

<!-- Mobile sends: --> 
<presence> 
    <priority>-1</priority> 
    <your-app xmlns="http://example.com/your-app" type="mobile" /> 
</presence> 

<!-- Mobile receives (among other things): --> 
<presence from="[email protected]/foo38Bc21e"> 
    <priority>-1</priority> 
    <your-app xmlns="http://example.com/your-app" type="desktop" />  
</presence> 

現在,您已經擁有桌面客戶端的完整JID。

它可以將正常的XMPP message直接發送到桌面客戶端的完整JID,如存在數據包的「from」所示。在XMPP IM消息傳達文本消息中使用<body> element,但是你可以省略<body>標籤並插入your own XML data

<!-- Mobile sends: --> 
<message to="[email protected]/foo38Bc21e"> 
    <your-notification xmlns="http://example.com/your-app"> 
     <any-xml-here/> 
    </your-notification> 
</message> 

您就可以幾乎立即收到在桌面上這條消息(最大延遲通常會在您的移動網絡中)。對於移動設備上的XMPP,也請看XEP-0286: XMPP on Mobile Devices