GAE XMPP(Java API)-アプリケーションのJabber

Googleはこのセクションを英語のみで提供していますが、このサービスについて知り合いを共有しています。



画像



XMPPサービスにより、GAEアプリケーションはギルメッセージを送受信できます。

XMPPは、Jabberとも呼ばれるXMLベースのオープンソースインスタントメッセージングプロトコルです。 Googleトークで既に使用されていること。



APIは、プロトコルを操作するメカニズム全体を隠します。 開発者は非常に高度なメソッドを取得するため、開発が簡素化されますが、同時に可能性が大幅に制限されます。

XMPP APIを使用してjavadokを見ると、最も必要な最小値のみが実装されていることがわかります。



メッセージを送る


プロトコルに関するすべての作業は、必要なすべてのメソッドを含むcom.google.appengine.api.xmpp.XMPPServiceオブジェクトのインスタンスを介して実行されます。 メッセージ送信の例:



import com.google.appengine.api.xmpp.JID; import com.google.appengine.api.xmpp.Message; import com.google.appengine.api.xmpp.MessageBuilder; import com.google.appengine.api.xmpp.SendResponse; import com.google.appengine.api.xmpp.XMPPService; import com.google.appengine.api.xmpp.XMPPServiceFactory; // ... JID jid = new JID("example@gmail.com"); String msgBody = "Hello World from GAE"; Message msg = new MessageBuilder() .withRecipientJids(jid) .withBody(msgBody) .build(); boolean messageSent = false; XMPPService xmpp = XMPPServiceFactory.getXMPPService(); if (xmpp.getPresence(jid).isAvailable()) { SendResponse status = xmpp.sendMessage(msg); messageSent = (status.getStatusMap().get(jid) == SendResponse.Status.SUCCESS); } if (!messageSent) { // Send an email message instead... }
      
      







アドレスはアプリケーションで利用可能です-JIDapp-id@appspot.com (デフォルト)およびanything@app-id.appspotchat.com アプリケーションのバージョンがデフォルトになっていない場合は、それが使用されます(強制!)- anything@version.latest.app-id.appspotchat.com 。 これまでのところ、サービスは、JIDでアプリケーションに使用されるドメイン名を許可していません。



宛先は任意の有効なJIDにすることができます(必ずしもGoogleトークユーザーである必要はありません)。



メッセージを交換するには、アプリケーションと受信者が相互に認証される必要があります-メッセンジャーのように招待を交換します。 アプリケーションに招待状を送信すると、サービスは自動的にそれを受け入れ、応答招待状を送信します。 または、アプリケーションから招待状を送信します。



 xmpp.sendInvitation(jid);
      
      







残念ながら、JIDが許可されているかどうかを確認する方法はありません。 ステータスを確認することしかできません。その後、大きな制限があります。



 xmpp.getPresence(fromJid).isAvailable();
      
      







結果は、あなたがオンラインで話している人がGoogleトークを使用し、許可されている場合にのみ肯定的です。 追加のステータスを定義することはできません。



連絡先リストを操作する方法はありません。 また、連絡先リストを手動で編集するために、アプリケーションアカウントで通常のjabberクライアントとしてログインする方法はありません。



メッセージを受け入れる


メッセージを受信するには、 appengine-web.xmlアプリケーション構成ファイルに次の行を追加して、サービスを「有効化」する必要があります。



 <inbound-services> <service>xmpp_message</service> </inbound-services>
      
      







現在、アプリケーションに属するアドレスの1つでメッセージが受信されると、GAEはURL / _ah / xmpp / message / chat /に対してPOST要求を実行します。 要求には、メッセージ自体、送信者と受信者(送信先アドレス)のJID、およびスタンザ(XML形式のXMPPメッセージの完全な形式)が含まれます。



GAEは、URL / _ah / xmpp /メッセージ/チャット/へのアクセスを管理者ロールを持つユーザーにのみ提供するため、外部からは利用できません。



サーブレット自体を記述することは残っています。



 import java.io.IOException; import javax.servlet.http.*; import com.google.appengine.api.xmpp.JID; import com.google.appengine.api.xmpp.Message; import com.google.appengine.api.xmpp.XMPPService; import com.google.appengine.api.xmpp.XMPPServiceFactory; @SuppressWarnings("serial") public class XMPPReceiverServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { XMPPService xmpp = XMPPServiceFactory.getXMPPService(); Message message = xmpp.parseMessage(req); JID fromJid = message.getFromJid(); String body = message.getBody(); // ... } }
      
      







ご覧のとおり、APIにはそのようなリクエストを処理するための既製のパーサーが既にあります。



サーブレットを次のURL( web.xml )にマップするだけです。



 <web-app><servlet> <servlet-name>xmppreceiver</servlet-name> <servlet-class>XMPPReceiverServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>xmppreceiver</servlet-name> <url-pattern>/_ah/xmpp/message/chat/</url-pattern> </servlet-mapping><web-app>
      
      







XMPPサービスには、送信されたメッセージの数、送信されたメッセージの量、およびサービス自体へのAPI呼び出しの数に対するクォータがあります。 着信メッセージは、着信HTTP要求のように課金されます。 割り当て



結論として


実際、XMPPサービスを使用して、特にモバイルデバイスでさまざまな管理者通知を送信できます。 悪意のあるクォータの消費に対する保護はありません;必要に応じて、攻撃者はすべてのクォータを使い果たすことができます。



興味深いのは、サービスの小さな例を提供することです: http : //samples-gae.appspot.com/samples/xmpp.html



ドキュメントセクション(英語): XMPP Java APIの概要



ご招待ありがとうございます!



2010年2月14日に追加:



GAE SDK 1.4.2の新しいリリース、XMPPの2番目のバージョン、多くの新しい。



All Articles