应用程序如何知道在App Engine中向用户发送XMPP消息是否可以?

时间:2010-02-16 00:06:40

标签: google-app-engine xmpp

我已经从App Engine文档中读过这一段十几次,但我仍然对聊天邀请的工作方式一无所知:

  

Invitations

     

Google Talk和其他聊天服务器   只接受用户的消息   那些“订阅”发件人,   或者是因为用户邀请了   发件人聊天或因为用户   接受了发送的聊天邀请   寄件人。 App Engine应用程序可以发送   使用该服务的聊天邀请   API。与发送电子邮件一样,最好   练习是发送聊天邀请   只有当用户询问时,例如   单击网页上的按钮。   或者,应用程序可以询问   用户发送邀请   应用程序的XMPP地址以启用接收   消息。

     

App Engine接受所有聊天   邀请自动,并做   没有传达邀请   应用。 App Engine将路由所有   聊天消息到应用程序,   无论发件人是否   以前发过邀请   应用

也许问题是我没有使用聊天,所以我不熟悉邀请在实践中如何运作。但第一个问题是应用程序如何/为什么/是否需要/获得与用户聊天的权限。

以上段落似乎如下:

  1. 应用程序需要获得向用户发送XMPP消息的权限(并且用户需要向应用程序发送XMPP消息的权限?),所以
  2. 用户必须向应用发送邀请以允许其向用户发送消息(并且应用必须向用户发送邀请以允许用户向应用发送消息?
  3. App Engine收到聊天邀请,但未将其与应用程序通信
  4. 问题:应用程序如何知道是否可以向用户发送消息,因为App Engine确实向应用程序传达了有关用户对邀请的响应的任何信息?

2 个答案:

答案 0 :(得分:2)

Gmail就是一个很好的例子:

我向不在我的“朋友列表”中的朋友发送消息。 Gmail不会传递我的消息,而是发送一条消息,说明“安东尼想聊聊。你接受吗?”

如果我的朋友点击“是”,他们会收到我的消息,我在他们的朋友列表中,他们在我的朋友列表中,我们可以在没有Gmail的情况下自由聊天,确保它没问题。

如果我的朋友点击“否”,他们永远不会看到我的原始邮件,如果我稍后再试,GMail会要求获得许可。

所以App 确实与另一端的用户进行通信,它只是不传递消息,只是我有兴趣成为聊天伙伴。

快速更新

另一种看待这种情况的方法(如果你还记得这些日子)​​是一个收集电话。接线员简单地说:“你想接受琼斯的接听电话吗?”经营者没有说“他说这真的很重要,他在监狱里。”操作员没有说“他说不,你可以在监狱里腐烂。”对琼斯在双方同意之前,他们在没有任何一方进行真正接触的情况下代理连接。

(当然,我们总是说我们的名字是“我被困在商场!”当我们试着打电话回家收集。但是由于聊天不收费,所以XMPP中不需要这种偷偷摸摸的解决方法世界。)

答案 1 :(得分:1)

使用get_presence()功能确定是否可以发送给用户。如果您向未接受邀请的用户发送邮件,则大多数XMPP服务器(包括Google Talk)都不会传递邮件或自动邀请。至少使用Google Talk,已经接受邀请的用户即使在他们注销时也会“在场”,因为Gmail可以将您的XMPP消息作为伪电子邮件发送。