2

我有一个基于 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");

我还注意到,在我上面链接的谷歌文档中,它说,

应用程序还可以使用以下格式的自定义地址,其中任何内容都是包含字母、数字和连字符的任何字符串

这是否意味着他们不支持该扩展名的转义字符?还是我做错了什么?有没有其他方法可以逃脱我失踪的他们?

我可以采取其他几条路线,但我也无法让其中任何一条工作,所以如果有人有建议,我将不胜感激。

  1. 将用户名作为节点的一部分传递,将域作为资源传递。但是,当我尝试这个时,我可以发送带有完整 JID 的邀请和后续消息,例如 jack@myapp.appspotchat.com/jill.com,但是当消息从谷歌返回时,JID 被剥离并返回作为一个裸JID。
  2. 以某种方式维护有关对话的一些元数据,本质上是维护可以来回传递的聊天的会话信息,但我不确定这是否可能,如果是的话,我还没有找到任何关于如何做到这一点的线索工作。
4

1 回答 1

0

不幸的是,我们只支持文档建议的字母、数字和连字符。这甚至意味着我们不接受除字母、数字和连字符以外的转义字符,即使 XEP-0106 允许。这更多是 Google Talk 所基于的某些系统的内部限制,而不是其他任何东西。

也就是说,我将努力使我们的文档对此更加明确。

于 2012-12-04T21:50:22.577 回答