I understand that Blackberry push is the one, the only true "realtime push". Supposedly, this requires installing Blackberry software (hardware?) with the telcos.<p>iPhone implements push by polling every so often and quickly runs down my battery so I leave push notifications off. Blackberries can go for (almost) a day on a single battery charge while connected all the time.<p>How does Blackberry implement realtime push? Is it necessary to plug into the telco infrastructure for this?
There are three parties involved (besides the network):<p>A) Push Initiator (PI) (NOT the device, but the push content provider)<p>B) Push Proxy/Gateway (PPG) (this is BlackBerry's Infrastructure)<p>C) Push client (BlackBerry device)<p>An example push message in a confirmed (ie. connection-oriented) manner:<p>1) The content provider (PI) sends a PAP push request
to the BlackBerry Infrastructure (PPG). This request
includes a list of the subscribed BlackBerry
devices to which the data should be delivered,
as well as the data to be delivered. 2) The BlackBerry Infrastructure returns a response
to the content provider, acknowledging receipt of
the request, and queues the request for delivery. 3) The BlackBerry Infrastructure pushes OTA the data
to the specified BlackBerry devices. This doesn't
have to be only a notification of new content;
I think content (up to 8KB in size) can be pushed. 4) Each BlackBerry device returns a response to
the BlackBerry Infrastructure, acknowledging
receipt of the data. 5) The BlackBerry Infrastructure forwards the
acknowledgement on to the content push initiator. 6) The Read notification is returned to the
BlackBerry Infrastructure.<p>(One-way push only does steps 1. and 3.)<p>The push (step 3.) actually works through a Network
Operating Center (NOC). RIM is able to do this because
the BlackBerry device necessarily registers itself
with a Telco, which then forwards the information
on to the RIM NOC. The result is that the NOC now
knows exactly where to push a message to. This is
also the reason why a normal data plan is not
adequate to give a BlackBerry push services. The PPG
is able to send a Session Initiation Request to a
device in a connectionless manner using e.g. SMS,
indicating that it wants to push some content to
a specific application on the push client. Content can
be pushed in this manner as well. I think there are two protocols, PAP between a Push Initiator
and the Push Proxy/Gateway, and Push OTA between the Push
Proxy/Gateway and the device. If you're interested, the Open
Mobile Alliance has a lot of technical documents that are
publicly avaiable.<p>So, yeah, Blackberry's push is special, and it's necessary for them to plug into the telco infrastructure to do this; however, as an app developer, you just have to register with BlackBerry and use their APIs. Regarding the iPhone,I think Apple Push Notification Service is something like a "mini-NOC", that only does notification and isn't as full-featured as BlackBerry's, and is otherwise "push-like" by keeping open a session/polling.
for a consumer app, you push the message to blackberry... they send it to the phone. you don't interface with the telcos.<p>you have to register to use the push service and they have to approve your app.<p><a href="https://www.blackberry.com/profile/?eventId=8121" rel="nofollow">https://www.blackberry.com/profile/?eventId=8121</a>
I honestly don't know how Blackberry implements it, but there are a number of ways to accomplish it. Periodic polling (the way you mention) is generally regarded as 'bad'.<p>A better, but similar method is long-tail polling, in which you still poll periodically, but you wait for an answer, and don't time out the connection (or at least, don't time it out quickly.) You just leave the request hanging until you hear a response. If you don't hear a response before you have to time out, you just time out and then open a new long poll, doing the same thing. It's similar to polling every x seconds if there are constantly items to fetch, but if there aren't, it's much better.<p>Alternately, you can just set up a listener on the phone. I mean, Apache is the ultimate push client - it's just working the wrong way. If the phone number can act as the server IP address, then it just listens for a connection. The 'server' acts as a client, and 'requests' information from the phone whenever there is information to serve it.