Google app engine 当通过XMPP从GAE连接到google talk时,转义fromJid中的字符。

Google app engine 当通过XMPP从GAE连接到google talk时,转义fromJid中的字符。,google-app-engine,xmpp,Google App Engine,Xmpp,我有一个基于GAE的聊天应用程序。用户之间的内部聊天信息通过google channel api传递。因为所有的用户都已经有了GoogleID,我还想通过XMPP在GoogleTalk上与用户进行通信 要做到这一点,我需要将在我端发起聊天的用户的用户id(电子邮件)传递给google talk,这样当消息返回时,我可以通过他的频道将其发送回该用户 因此,我需要使用fromUser JID发送邀请和后续消息 xmpp.sendInvitation(toUser, fromUser); 和发

我有一个基于GAE的聊天应用程序。用户之间的内部聊天信息通过google channel api传递。因为所有的用户都已经有了GoogleID,我还想通过XMPP在GoogleTalk上与用户进行通信

要做到这一点,我需要将在我端发起聊天的用户的用户id(电子邮件)传递给google talk,这样当消息返回时,我可以通过他的频道将其发送回该用户

因此,我需要使用fromUser JID发送邀请和后续消息

xmpp.sendInvitation(toUser, fromUser);   
和发送消息的用户JID相同

通读(),我发现Google支持两种格式的fromJID:

your_app_id@appspot.com
或者

第一种方法显然行不通,但第二种方法看起来很有希望

问题是,我需要将完整的电子邮件地址作为“任何”部分传递,因为这是唯一的标识符(我可以jack@jill.com及jack@hill.com作为用户。)

所以,我需要按照 jack@jill.com@myapp.appspotchat.com

根据(),我应该能够这样做,并转义@字符

然而,谷歌似乎并不喜欢它。如果我是否转义@符号,我会得到一个无效的JID异常

我试过了

email.replace("@", "\40");

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

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

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

我还可以选择其他几条路线,但我也无法让它们中的任何一条发挥作用,因此如果有人提出建议,我将不胜感激

  • 将用户名作为节点的一部分传递,将域作为资源传递。但是,当我尝试此操作时,我可以使用完整的JID发送邀请和后续消息,例如jack@myapp.appspotchat.com/但是,当谷歌回复这条消息时,JID被剥离,变成了一个赤裸裸的JID
  • 以某种方式维护一些关于对话的元数据,本质上维护聊天的会话信息,这些信息可以来回传递,但我不确定这是否可行,如果可能,我还没有找到任何关于如何实现这一点的线索
    不幸的是,我们只支持文档建议的字母、数字和连字符。这甚至意味着,即使XEP-0106允许,我们也不接受除字母、数字和连字符以外的转义字符。这更多的是谷歌谈话所基于的一些系统的内部限制,而不是其他任何系统


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

    我将为您研究这一点。同时,您是否考虑过对电子邮件进行base64编码?
    email.replace("@", "\40");
    
    email.replace("@", "\\\40");