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番目のバージョン、多くの新しい。

Source: https://habr.com/ru/post/J107972/


All Articles