当从GAE通过XMPP连接谷歌对话时,从fromJid中转义字符。

时间:2012-11-03 18:38:17

标签: google-app-engine xmpp

我有一个基于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作为用户。)

所以,我需要传递一些东西 插孔@ 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. 以某种方式维护关于会话的一些元数据,实质​​上是维护可以来回传递的聊天的会话信息,但我不确定是否可能,如果是,我没有找到任何线索如何使这项工作。

1 个答案:

答案 0 :(得分:0)

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

那就是说,我会努力使我们的文档更加明确。