Python client for Apple Push Notification service (APNs).
This project is forked from apns-client, as there was a tiny but severe problem with SSL handshake rendering the package to be unusable.
For the time being please check for apns-client’s documentation .
- six - Python 2 and 3 compatibility library.
- pyOpenSSL - OpenSSL wrapper. Required by standard networking back-end.
Standard library has support for SSL transport. However, it is impossible to use
it with certificates provided as a string. We store certificates in database,
because we handle different apps on many Celery worker machines. A dirty
solution would be to create temporary files, but it is insecure and slow. So,
we have decided to use a better OpenSSL wrapper and pyOpenSSL was the
easiest to handle. pyOpenSSL is loaded on demand by standard networking
back-end. If you use your own back-end, based on some other SSL implementation,
then you don’t have to install pyOpenSSL.
- Added support for sending multiple pushes with varying payload during one APNs connection, thanks Jon Snyder!
- Removed not needed non ascii character which was causing problems with python < 3
- Imported changes from open apns-client pull requests. Thanks Jason Spafford, zhe li and neetu jain.
- Forked from apns-client and fixed SSL handshake error caused by Apple’s SSLv3 deprecation
There are many alternatives available.
This library differs in the following design decisions:
- Support certificates from strings. We do not distribute certificate files
on worker machines, they fetch it from the database when needed. This
approach simplifies deployment, upgrades and maintenance.
- Keep connections persistent. An SSL handshaking round is slow. Once
connection is established, it should remain open for at least few minutes,
waiting for the next batch.
- Support enhanced format. Apple developers have designed a notoriously bad
push protocol. They have upgraded it to enhanced version, which makes it
possible to detect which messages in the batch have failed.
- Clean pythonic API. No need for lots of classes, long lists of exceptions etc.
- Do not hard-code validation, let APNs fail. This decision makes library
a little bit more future proof.
- [TODO] own documentation for apns-clerk
- [TODO] proper attributions for previous work
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.