133

How do iOS "push" notifications get delivered to a particular device without that device needing to poll a server?

For example, let's say I have received a new message on Facebook. Facebook notifies Apple that my device should receive a notification as such. But how does Apple know which device/IP to push the message to?

gonzobrains
  • 7,856
  • 14
  • 81
  • 132
Andy Hin
  • 30,345
  • 42
  • 99
  • 142
  • 3
    @Wain I am looking for a detailed explanation at a technical level. That article is extremely high level. So my device maintains an open connection with Apple's push servers at all times? – Andy Hin Jun 23 '13 at 15:58
  • Im more familiar with android push, but typically, when you install the app it registers the device with a unique ID with Apple. Then when facebook sends a message to apple, apple will forward it to the devices unique ID. – Panama Jack Jun 23 '13 at 15:58
  • 8
    @Pjack yep, but with my device constantly changing different cell towers, different wifi networks, how does Apple know the IP for my unique ID? – Andy Hin Jun 23 '13 at 16:00
  • @whydna Thanks for asking this question. I wanted to understand precisely the same thing. I believe this answers my question here: http://stackoverflow.com/questions/18859732/real-world-cross-platform-decentralized-asynchronous-peer-to-peer-communication – MightyMouse Sep 18 '13 at 09:53
  • @AndyHin The device OS (iOS) knows which APNs server(s) are valid. The device is connecting to these servers and keeping a connection open. This connection is likely associated with the device-id and other meta-data (phone number). When a message needs to be "pushed", the APNs finds the right connection and sends it down that already-open connection. So the APNs does not try to establish a connection to a device, it's always the device that opens that connection. One connection per device. – Kind Contributor Aug 17 '20 at 03:51

5 Answers5

117

Each device can be updated with data using their own unique device tokens. This picture explains everything . .

enter image description here

Karan Alangat
  • 2,154
  • 4
  • 25
  • 56
  • Any idea what is the usage of the Device Token? Is it used for encrypting communication between the APNS server and the App or elsewhere? – Mugen Apr 27 '16 at 08:15
  • 1
    @Mugen: Device token is used by APNS to identify which device it is supposed to forward the payload sent by provider! – D4ttatraya Jan 06 '17 at 13:24
  • 1
    @Karan - Is there a distinction between notifications which are for a user (e.g. "Hey user you have a message!") and those that are meant for to wake up an app and silently tell it to do some background processing? – Howiecamp Feb 23 '17 at 00:47
  • @Howiecamp If you are using push notification, you will get notified whenever a notification has been received if the app is running. Also the active notification details are accessible , when user taps the notification from notification center and launches the app. During this time you can perform the processes that you wish to do. – Karan Alangat May 16 '17 at 09:17
  • @KaranAlangat, How do Badge Count handled here? How server knows about it? – GvSharma Jul 20 '18 at 11:27
  • @GvSharma Usually we will get badge information from Notification Payload. We can change it from app also. – Karan Alangat Jul 20 '18 at 13:33
  • how server knows unseen messages in app?did app needs to call anything? – GvSharma Jul 20 '18 at 18:39
  • I think step 5 is the confusing one and triggered this question. It's a bit unclear to me as well how that part works, especially since your phone a lot of times can be behind a NAT router that typically rejects incoming traffic that wasn't requested. – Radu Murzea Mar 14 '19 at 09:55
67

It was too much for me to put in a comment so.

From the documentation.

Apple Push Notification service (APNs) propagates push notifications to devices having applications registered to receive those notifications. Each device establishes an accredited and encrypted IP connection with the service and receives notifications over this persistent connection. Providers connect with APNs through a persistent and secure channel while monitoring incoming data intended for their client applications. When new data for an application arrives, the provider prepares and sends a notification through the channel to APNs, which pushes the notification to the target device..

I suggest reading the documentation for more information and how to use and configure. It's all there.

Push Notifications

Sunny
  • 517
  • 5
  • 17
Panama Jack
  • 24,158
  • 10
  • 63
  • 95
  • 7
    So Apple maintains a static IP to your device? – CMCDragonkai Jun 12 '14 at 08:39
  • I was wondered when understood that my server have to send a notification to APNS FOR EACH TARGET DEVICE! :( – Vladimir Jun 19 '14 at 09:37
  • 5
    @CMCDragonkai The device establishes the connection, not the server. – Hitechcomputergeek Jun 22 '16 at 01:08
  • @Panama jack hello sir how long will the message remain in the server if i put note.expiry = Math.floor(Date.now() / 1000) + 43200 sec than will it remain up to 12 hrs . i just want to know does expiry time has limit or it goes our way. – kisor Dec 06 '16 at 05:27
  • 8
    so the devices maintain a long polling/socket kind of connection always with APN service? If such is the case then how does APN service handle so many connections - If a server can hold 50k connections and there are 500 million users always, service at least needs 10000 servers right. Is this a practical scenario? – AV94 Jul 20 '18 at 11:16
  • @AV94 That is for Apple to handle, but I would estimate 50k connections per server to be extremely underestimated. I would expect more in the order of 10 million connections per server. It all depends on the amount of traffic that they need to handle. – fishinear Apr 05 '19 at 12:03
  • @AV94 this was why I Google this question. I find it doubtful that 'long poll' would be the best solution Apple could think of. Just observing how wobbly my data connection gets when I use the phone on a train. I guess anyone who actually knew would have signed an NDA. It would be fun to guess. – Chris Huang-Leaver Apr 16 '19 at 02:07
  • @AV94 I haven't dug deeply into push notifications in particular, but long poling/socket/etc isn't necessary except for browsers that are talking to web servers. The "regular" internet, i.e. TCP/IP, was designed to support exactly this kind of communication. There are some tricky aspects, like the device moving from network to network. My guess is that the device just handles reconnecting as needed. Also, these days a lot of consumer routers and maybe ISP routers don't deal well with long-lived, "quiet" TCP/IP connections, so there is probably some sort of keepalive. – Steven J Owens Sep 01 '23 at 00:02
27

I created an infographic to explain the workflow of push notifications. Hope this is helpful.

enter image description here

Udit Agarwal
  • 868
  • 9
  • 22
  • Great infographic. However, it misses final step 6: APNS send notification to the device that APNS knows as connected to the token. – not2savvy Jun 23 '21 at 10:51
15

Device does not keep polling the server for the push notifications.

To keep it simple, consider an iPhone is connected to internet. On connecting to internet iPhone establishes connection to Apple Push Notifications server this connection is open connection which means data can be thrown to iPhone from server the moment data arrives to server.

Apple does not use HTTP protocol for Push notifications but if you understand HTTP Protocol its almost a similar methodology.

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push

user4248688
  • 159
  • 1
  • 2
2

There is a really nice exaplanation of push notifications in this article.

In iOS, apps can’t do a lot in the background. Apps are only allowed to do limited set of activities so battery life is conserved.

But what if something interesting happens and you wish to let the user know about this, even if they’re not currently using your app?

Community
  • 1
  • 1
Tarek
  • 2,372
  • 2
  • 23
  • 35