Using XMPP for push user notifications on Android - any way to target these so they don't go to Google Talk etc

android, google-app-engine, xmpp

Solution

JIDs (Jabber/XMPP IDs and therefore Google Talk IDs) have several forms.

First is a "bare JID", e.g.: `user@example.com` Secondly is a "full JID", e.g.: `user@example.com/xyz123`, where `xyz123` is called the resource.

One user can be logged into their XMPP account from multiple clients simultaneously, so long as each client uses a unique resource. With Google Talk, usually the server allocates the resource.

When you talk to someone on XMPP normally you address messages using their bare JID — you don't care about which client the message gets delivered to; that person's server directs it to the appropriate client(s) based on their availability etc.

But you can also address a message directly to a full JID. This is what you want to do, so that only `user@example.com/my-game-some-unique-ID` receives your game-specific messages.

Whether the Google App Engine API gives you this flexibility, I have no idea :)

An alternative — again, if GAE allows this — is to send a different message type. XMPP is eXtensible, meaning that you don't have to send a plain old `<message/>` stanza to the end user; you can stick a specialised payload inside there like a `<game/>` child stanza and, because regular IM clients don't know how to parse your `<game/>` stanzas, they show nothing to the user. Only your game client will parse and understand this info.

Problem

I want to use XMPP to push data to my client which would translate to a notification for the user, and plan on using their google-id for login to my application. The way I understand XMPP is that its a simple message that goes directly to the adress, but I want the client to get it as instructions and turn it into gamestate information. It would be very frustrating for a user to get a bunch of command tuples or hex garbage in their google chat! Am I misunderstanding the way this all works?

Original source