loading...

Apple push notifications

adityavarma1234 profile image Aditya Varma ・2 min read

To send push notifications to any apple device using apns, I had to spend a considerable amount of time looking at all the alternatives available in python. Then i found an open source library pyapns2. I had almost rejected this library when I was exploring because it did not say any where in the documentation that it supports batching or token based authentication.
When I searched the source code, I was astonished to see that it had support for both but was not documented.

So I updated the documentation and raised a pull request.

For any one who has been facing similar issues below is the example code on how to use the library.

from apns2.client import APNsClient
from apns2.payload import Payload

token_hex = 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b87'
payload = Payload(alert="Hello World!", sound="default", badge=1)
topic = 'com.example.App'
client = APNsClient('key.pem', use_sandbox=False, use_alternative_port=False)
client.send_notification(token_hex, payload, topic)

# To send multiple notifications in a batch
Notification = collections.namedtuple('Notification', ['token', 'payload'])
notifications = [Notification(payload=payload, token=token_hex)]
client.send_notification_batch(notifications=notifications, topic=topic)

# To use token based authentication
from apsn2.credentials import TokenCredentials

auth_key_path = 'path/to/auth_key'
auth_key_id = 'app_auth_key_id'
team_id = 'app_team_id'
token_credentials = TokensCredentials(auth_key_path=auth_key_path, auth_key_id=auth_key_id, team_id=team_id)
client = APNsClient(credentials=token_credentials, use_sanbox=False)
client.send_notification_batch(notifications=notifications, topic=topic)

To learn about token based authentication you can have a look at this wonderful resource here

Benchmark:

When I used send_notification for sample token size of 2000 it took me around 10 minutes to send all the notifications.
When I used send_notification_batch for same sample token size it took less than 5 seconds to send out all the notifications.

Posted on by:

Discussion

pic
Editor guide