The docs say "C2DM makes no guarantees about delivery or the order of messages. So, for example, while you might use this feature to tell an instant messaging application that the user has new messages, you probably would not use it to pass the actual messages."
I'm building an app where messages will be passed, and where it is important that they are delivered. It's in some ways analogous to an instant-messaging app.
Some options that come to mind...
Send the message using C2DM, but have the mobile app do a callback on receive to notify the server (this has the obvious limitation, but the app isn't mission critical)
Use C2DM to notify the app that there is a new message, and then read it off an app server - using polling to handle C2DM failing to notify
Use C2DM and accept some messages won't get delivered. It's not clear to me why a message wouldn't be delivered. I guess C2DM has a retry limit so if the device is offline, it may never arrive. It's also unclear to me what % to expect to fail.
What approach would you recommend?