這聽起來像XMPP將符合您的要求。只要您的「通知」的大小和頻率合理(畢竟這些都是免費服務!),它肯定會允許某人使用他們的Google Talk帳戶或任何其他XMPP帳戶(例如jabber.org)。
你應該可以使用現有的libraries來完成這個罰款。本文將討論基本XMPP級別的內容,但許多庫將提供更高級別的API來執行此處描述的內容。
如何實現各種事情的一些注意事項你想要的:
每一個連接到XMPP帳戶分配一個叫做'resource'唯一標識符。在XMPP中,像[email protected]
這樣的簡單地址被稱爲'bare JID'。您還可以通過包含資源[email protected]/your-app829abc
(「完整JID」)發送到特定連接。因爲資源來來往往,並且可能會有所不同(例如Google將它們半化),所以presence用於廣播availability和unavailability資源。
桌面客戶端需要發送狀態,以便移動客戶端可以在線查看它。它還應包含'-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。