I Don’t Typically Do This

by Martin Gordon

Verizon iPhones and iMessage

The Verizon iPhone 4 doesn’t do simultaneous data and voice, so I’m wondering how it will work with iMessage, which uses the data network (as opposed to SMS which uses the control channel on the voice network), when a recipient is on a phone call. A phone with no service will deal with similar issues, but the Verizon example is especially complicated because a Verizon iPhone on a call can still send an SMS while a phone with no service can’t do SMS or data.

When the iPhone can’t send an iMessage, it will fall back to SMS. I don’t know if this just checks the ability to send or if it also checks if the recipient can receive messages. If it does do a recipient check, then there’s no problem. If a Verizon iPhone is on a call, it wouldn’t be reachable and the sending iPhone would send over SMS. But what if iMessages only does a send check (e.g., that the sender has network access)?

To further complicate things, throw an iPad into the mix. Presumably, the iPad can only send iMessages and does not gain the ability to send SMS. How does the iPhone handle missed iMessages?

Apple has a Technical Note that does provide some answers, but they aren’t good:

If you are sending multiple notifications to the same device within a short period of time, the push service will send only the last one.

Here’s why. The device acknowledges receipt of each notification. Until the push service receives that acknowledgment, it can only assume that the device has gone off-line for some reason and stores the notification in the quality of service (QoS) queue for future redelivery. The round-trip network latency here is of course a major factor.

As described in the Local and Push Notification Programming Guide, the QoS queue holds a single notification per app per device. If the service receives another notification before the one in the queue is sent, the new notification overwrites the previous one.

All of this points out that the intent is that a notification indicates to an app that something of interest has changed on the provider, and the app should check in with the provider to get the details. Notifications should not contain data which isn’t also available elsewhere, and they should also not be stateful.

A quick search reveals that the BlackBerry Messenger server will deliver all messages after a phone rejoins the data network, which won’t be the case for iMessage if its using Apple’s stock Push Notification Services. If there are no Quality of Service enhancements in iOS 5, iMessage won’t exactly be a drop-in replacement for SMS and is slightly inferior to BBM. That said, for the few minutes I used iMessages, it felt a lot more fun to use than SMS. I can see why the kids like BBM.