I’ve read this paragraph from the App Engine documentation a dozen times and still am completely in the dark about how chat invitations work:
Google Talk and other chat servers
will only accept messages for users
that are “subscribed” to the sender,
either because the user invited the
sender to chat or because the user
accepted an invitation to chat sent by
the sender. An App Engine app can send
chat invitations using the service
API. As with sending email, a best
practice is to send a chat invitation
only when the user asks, such as by
clicking a button on a web page.
Alternatively, the app can ask the
user to send an invitation to the
app’s XMPP address to enable receiving
of messages.App Engine accepts all chat
invitations automatically, and does
not communicate invitations to the
application. App Engine will route all
chat messages to the application,
regardless of whether the sender
previously sent an invitation to the
app.
Maybe the problem is I haven’t used chat so I’m not familiar with how invitations work in practice. But the first issue is how/why/whether an application needs/gets permission to chat with a user.
The paragraph above seems to say the following:
- The application needs permission to send XMPP messages to the user (and the user needs permission to send XMPP messages to the app?), so
- The user has to send an invitation to the app to allow it to send messages to the user (and the app has to send an invitation to the user to allow the user to send messages to the app?)
- App Engine receives the chat invitation but does not communicate it to the app
Question: How does the app know whether it’s ok to send messages to the user since App Engine does communicate anything to app about the user’s response to the invitation?
Gmail is a great example:
I send a message to my friend who is not on my “Friend List”. Gmail does not deliver my message, but instead delivers a message that says “Anthony would like to chat. Do you accept?”
If my friend clicks “yes”, they get my message and I’m on their friend list and they are on my friend list, and we can chat freely without Gmail making sure it’s okay.
If my friend clicks “no”, they never see my original message and GMail asks permission if I try again later.
So the App does communicate with the user on the other end, it just doesn’t relay the message, only that I’m interested in being chat-buddies.
quick update
Another way of looking at this (if you remember these days), is a collect call. The operator simply says “Do you wish to accept a collect call from Jones?” The operator doesn’t say “He says it’s really important, he’s in jail.” And the operator doesn’t say “He said no, you can rot in jail.” to Jones. They broker the connection without either party making real contact until both parties agree.
(Of course, we would always say our name was “I’m stuck at the mall!” when we tried calling home collect. But since there is no charge for a chat, such sneaky workarounds are not necessary in the XMPP world.)