【发布时间】:2012-10-24 02:49:30
【问题描述】:
我有一个基于 GAE 构建的聊天应用程序。用户之间的内部聊天消息通过谷歌频道 API 传递。由于所有用户都已经拥有 google ID,我还想通过 XMPP 与用户在 google talk 上进行交流。
为此,我需要将在我端发起聊天的用户的用户 ID(电子邮件)传递给 google talk,以便当消息返回时,我可以通过他的频道将其路由回该用户。
因此,我需要使用 fromUser JID 发送邀请和后续消息
xmpp.sendInvitation(toUser, fromUser);
和发送消息的 fromUser JID 相同。
通读 (https://developers.google.com/appengine/docs/java/xmpp/overview),我看到 Google 支持 fromJID 的两种格式:
your_app_id@appspot.com
或者,
anything@your_app_id.appspotchat.com
第一个显然行不通,但第二个看起来很有希望。
问题是,我需要将完整的电子邮件地址作为“任何内容”部分传递,因为这是唯一标识符(我可以将 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");
我还注意到,在我上面链接的谷歌文档中,它说,
应用还可以使用以下格式的自定义地址,其中任何内容都是包含字母、数字和连字符的任何字符串
这是否意味着它们不支持该扩展名的转义字符?还是我做错了什么?有没有其他方法可以逃避我错过的它们?
我可以采取其他几条路线,但我也无法让其中任何一条发挥作用,所以如果有人有建议,我将不胜感激。
- 将用户名作为节点的一部分传递,将域作为资源传递。但是,当我尝试这个时,我可以发送带有完整 JID 的邀请和后续消息,例如 jack@myapp.appspotchat.com/jill.com,但是当消息从谷歌返回时,JID 被剥离并返回作为一个裸JID。
- 以某种方式维护有关对话的一些元数据,本质上维护可以来回传递的聊天的会话信息,但我不确定这是否可能,如果是,我还没有找到任何线索说明如何使这项工作。
【问题讨论】:
-
我会帮你调查的。同时,您是否考虑过对电子邮件进行 base64 编码?