我有一个基于 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。
- 以某种方式维护有关对话的一些元数据,本质上是维护可以来回传递的聊天的会话信息,但我不确定这是否可能,如果是的话,我还没有找到任何关于如何做到这一点的线索工作。