【问题标题】:Escaping characters in fromJid when connecting to google talk from GAE via XMPP.通过 XMPP 从 GAE 连接到 Google Talk 时,在 fromJid 中转义字符。
【发布时间】: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");

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

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

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

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

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

【问题讨论】:

  • 我会帮你调查的。同时,您是否考虑过对电子邮件进行 base64 编码?

标签: google-app-engine xmpp


【解决方案1】:

很遗憾,我们只支持文档建议的字母、数字和连字符。这甚至意味着我们不接受 转义 字符,而不是字母、数字和连字符,即使 XEP-0106 允许。这更像是 Google Talk 所基于的某些系统的内部限制。

也就是说,我会努力让我们的文档更明确地说明这一点。

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多