Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:


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!

like image 612
Jon Cox Avatar asked Nov 22 '11 14:11

Jon Cox


2 Answers

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.

like image 90
gefangenimnetz Avatar answered Oct 16 '22 16:10

gefangenimnetz


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.

like image 31
Pfitz Avatar answered Oct 16 '22 16:10

Pfitz