iOS app with real-time updates from server: Socket (using streams) or Apple Push Notification service?

I’m trying to make an iOS 5 app that features real-time things coming from the server. It will only use these whilst the app is running.

To make it real-time without polling I have been evaluating two design routes:

  • Colored output in C++
  • How to convert image into hexa decimal bytes array to send it to output stream in iOS sdk
  • Creating a socket from the app to the server, and exchanging information via streams.

    • Pros: Relatively simple and would not involve a 3rd party.
    • Cons: Battery life drain.
    • For an overview of how this might work, check
      out this excellent tutorial:
      http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server

    Using standard HTTP to communicate with the server, and with each request from the app let the server know what they are viewing. If something new is available for user, send an Apple Push Notification (with no visible alert) to let app know it can go and download new thing.

    • Pros: Not opening up a new TCP connection, so battery life not drained unnecessarily.
    • Cons: Feels like a poor hack.
    • The official docs on APNs http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html


    I think a socket would be the way to go, but before I commit to it I wanted a second opinion, as this is the first time I’ve made anything like this!

    2 Solutions Collect From Internet About “iOS app with real-time updates from server: Socket (using streams) or Apple Push Notification service?”

    Does it really need to be “full real time”? From my point of view i would prefer http since it is already well integrated into the iOS SDK. Its easy to understand, maintain and implement and plenty of documentation is on the web. So maybe a http poll every minute or so will be enough (depending on the app and the number of users). Please consider firewalls too! Traffic to unknown ports maybe denied due to firewall policies of provider or local wifi. So if you really need realtime connectivity I guess you have to use sockets.

    Sockets would be my choice. I do not know how time critical your application is, but sockets might perform better as APNs if realtime is a must.