How do iOS Push Notifications work?
Asked Answered
W

5

134

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?

Woodwaxen answered 23/6, 2013 at 15:53 Comment(5)
@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?Woodwaxen
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.Stipple
@Pjack yep, but with my device constantly changing different cell towers, different wifi networks, how does Apple know the IP for my unique ID?Woodwaxen
@whydna Thanks for asking this question. I wanted to understand precisely the same thing. I believe this answers my question here: #18860232Cantaloupe
@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.Pourparler
S
68

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

Stipple answered 23/6, 2013 at 16:9 Comment(8)
So Apple maintains a static IP to your device?Kaoliang
I was wondered when understood that my server have to send a notification to APNS FOR EACH TARGET DEVICE! :(Combings
@Kaoliang The device establishes the connection, not the server.Thorton
@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.Migdaliamigeon
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?Gingerly
@Gingerly 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.Indiscriminate
@Gingerly 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.Nivernais
@Gingerly 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.Cormac
N
118

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

enter image description here

Neelyneeoma answered 3/6, 2015 at 10:46 Comment(8)
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?Vitrics
@Mugen: Device token is used by APNS to identify which device it is supposed to forward the payload sent by provider!Presbyterate
@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?Insomnolence
@Insomnolence 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.Neelyneeoma
@KaranAlangat, How do Badge Count handled here? How server knows about it?Scheller
@Scheller Usually we will get badge information from Notification Payload. We can change it from app also.Neelyneeoma
how server knows unseen messages in app?did app needs to call anything?Scheller
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.Phenica
S
68

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

Stipple answered 23/6, 2013 at 16:9 Comment(8)
So Apple maintains a static IP to your device?Kaoliang
I was wondered when understood that my server have to send a notification to APNS FOR EACH TARGET DEVICE! :(Combings
@Kaoliang The device establishes the connection, not the server.Thorton
@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.Migdaliamigeon
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?Gingerly
@Gingerly 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.Indiscriminate
@Gingerly 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.Nivernais
@Gingerly 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.Cormac
C
28

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

enter image description here

Construe answered 4/1, 2016 at 8:55 Comment(1)
Great infographic. However, it misses final step 6: APNS send notification to the device that APNS knows as connected to the token.Selfpossessed
F
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

Footling answered 13/11, 2014 at 14:44 Comment(1)
What do they use if not http?Insomnolence
H
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?

Hawsehole answered 8/12, 2014 at 22:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.