私はGAE上に構築されたチャットアプリケーションを持っています。ユーザー間の内部チャット メッセージは、Google チャネル API を介してやり取りされます。ユーザーは全員既に Google ID を持っているので、XMPP 経由で Google トークのユーザーとのコミュニケーションも可能にしたいと考えています。
これを行うには、自分の側でチャットを開始したユーザーのユーザー ID (メール) を Google トークに渡す必要があります。これにより、メッセージが戻ってきたときに、そのユーザーのチャネルを介してこのユーザーに戻すことができます。
そのため、招待状と、fromUser JID を含む後続のメッセージを送信する必要があります。
xmpp.sendInvitation(toUser, fromUser);
メッセージを送信するための同じ fromUser JID。
( https://developers.google.com/appengine/docs/java/xmpp/overview )を読むと、Google が fromJID の 2 つの形式をサポートしていることがわかります。
your_app_id@appspot.com
また、
anything@your_app_id.appspotchat.com
最初のものは明らかに機能しませんが、2番目のものは有望に見えます。
問題は、一意の識別子であるため、完全な電子メールアドレスを「何か」の部分として渡す必要があることです (ユーザーとして jack@jill.com と jack@hill.com を持つことができます)。
したがって、jack@jill.com@myapp.appspotchat.com の行に沿って何かを渡す必要があります。
( http://xmpp.org/extensions/xep-0106.html )によると、これを実行して @ 文字をエスケープできるはずです。
しかし、グーグルはそれを好まないようです。@ 記号をエスケープするかどうかに関係なく、無効な JID 例外が発生します。
私はもう試した
email.replace("@", "\40");
と
email.replace("@", "\\\40");
また、上記でリンクした Google のドキュメントにも、次のように書かれていることに気付きました。
アプリでは、次の形式のカスタム アドレスを使用することもできます。ここで、文字、数字、ハイフンを含む任意の文字列を指定します。
それは、その拡張子に従ってエスケープ文字をサポートしていないということですか? それとも私は何か間違ったことをしていますか?私が行方不明になっているそれらを逃れる他の方法はありますか?
他にもいくつかのルートがありますが、どちらもうまくいかないので、誰か提案があれば大歓迎です.
- ノードの一部としてユーザー名を渡し、リソースとしてドメインを渡します。ただし、これを試すと、jack@myapp.appspotchat.com/jill.com などの完全な JID で招待と後続のメッセージを送信できますが、メッセージが Google から戻ってくると、JID が削除されて戻ってきます裸の JID として。
- どういうわけか会話に関するいくつかのメタデータを維持し、本質的にやり取りできるチャットのセッション情報を維持しますが、それが可能かどうかはわかりません。仕事。