A library for interacting with APNs using HTTP/2 and token based authentication.
pip install gobiko.apns
Create a client:
from gobiko.apns import APNsClient client = APNsClient( team_id=TEAM_ID, bundle_id=BUNDLE_ID, auth_key_id=APNS_KEY_ID, auth_key_filepath=APNS_KEY_FILEPATH, use_sandbox=True )
Alternatively, you can create a client with the contents of the auth key file directly:
client = APNsClient( team_id=TEAM_ID, bundle_id=BUNDLE_ID, auth_key_id=APNS_KEY_ID, auth_key=APNS_KEY, use_sandbox=True )
In Python 2.x environments, you may need to force the communication protocol to 'h2':
client = APNsClient( team_id=TEAM_ID, bundle_id=BUNDLE_ID, auth_key_id=APNS_KEY_ID, auth_key=APNS_KEY, use_sandbox=True, force_proto='h2' )
Now you can send a message to a device by specifying its registration ID:
client.send_message( registration_id, "All your base are belong to us." )
Or you can send bulk messages to a list of devices:
client.send_bulk_message( [registration_id_1, registration_id_2], "You have no chance to survive, make your time." )
Additional APNs payload values can be passed as kwargs:
client.send_message( registration_id, "All your base are belong to us.", badge=None, sound=None, category=None, content_available=False, action_loc_key=None, loc_key=None, loc_args=[], extra={}, identifier=None, expiration=None, priority=10, topic=None )
The legacy binary interface APNs provided an endpoint to check whether a registration ID had become inactive. Now the service returns a BadDeviceToken error when you attempt to deliver an alert to an inactive registration ID. If you need to prune inactive IDs from a database you can handle the BadDeviceToken exception to do so:
from gobiko.apns.exceptions import BadDeviceToken try: client.send_message(OLD_REGISTRATION_ID, "Message to an invalid registration ID.") except BadDeviceToken: # Handle invalid ID here pass
- More information on APNs and an explanation of the above can be found in this blog post.
- Apple documentation for APNs can be found here.