Skip to main content

Simple, flexible and fast Apple Push Notifications on iOS, OSX and Safari using the HTTP/2 Push provider API.

Project description

version license

Simple, flexible and fast Apple Push Notifications on iOS, OSX and Safari using the HTTP/2 Push provider API.

Features

  • Uses the new Apple APNs HTTP/2 protocol with persistent connections

  • Uses token-based authentication (no need to renew your certificates anymore)

  • Uses the httpx HTTP client library

  • Supports the new iOS 10 features such as Collapse IDs, Subtitles and Mutable Notifications

  • Makes the integration and error handling really simple with auto-retry on APNs errors

Cautions

  • Works only with Python 3.6 and higher

Installation

Install using pip:

pip install pyapns_client

Usage

from pyapns_client import APNSClient, IOSPayloadAlert, IOSPayload, IOSNotification, APNSDeviceException, APNSServerException, APNSProgrammingException, UnregisteredException


client = APNSClient(mode=APNSClient.MODE_DEV, root_cert_path='/path/to/root_cert.pem', auth_key_path='/path/to/auth_key.p8', auth_key_id='AUTHKEY123', team_id='TEAMID1234')
# `root_cert_path` is for the AAACertificateServices root cert (https://apple.co/3mZ5rB6)
# with token-based auth you don't need to create / renew your APNS SSL certificates anymore
# you can pass `None` to `root_cert_path` if you have the cert included in your trust store
# httpx uses 'SSL_CERT_FILE' and 'SSL_CERT_DIR' from `os.environ` to find your trust store

try:
    device_tokens = ['device_token_1', 'device_token_2']
    alert = IOSPayloadAlert(title='Title', subtitle='Subtitle', body='Some message.')
    payload = IOSPayload(alert=alert)
    notification = IOSNotification(payload=payload, topic='domain.organization.app')

    for device_token in device_tokens:
        try:
            client.push(notification=notification, device_token=device_token)
        except UnregisteredException as e:
            print(f'device is unregistered, compare timestamp {e.timestamp_datetime} and remove from db')
        except APNSDeviceException:
            print('flag the device as potentially invalid and remove from db after a few tries')
        except APNSServerException:
            print('try again later')
        except APNSProgrammingException:
            print('check your code and try again later')
        else:
            print('everything is ok')
finally:
    client.close()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyapns_client-2.0.6.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

pyapns_client-2.0.6-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file pyapns_client-2.0.6.tar.gz.

File metadata

  • Download URL: pyapns_client-2.0.6.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.7

File hashes

Hashes for pyapns_client-2.0.6.tar.gz
Algorithm Hash digest
SHA256 bba1820fe0e4e7d3ff587455444357d5dbc6b5ec2b5b8a49c7a89a8ea7eb8218
MD5 8a2af7fc82d9ba335989006a5f4a490c
BLAKE2b-256 f037e827158524c6b70115a93c1846186643daceafcc1a0a9ae4d4b87071fb09

See more details on using hashes here.

File details

Details for the file pyapns_client-2.0.6-py3-none-any.whl.

File metadata

  • Download URL: pyapns_client-2.0.6-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.7

File hashes

Hashes for pyapns_client-2.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 4c61e0c6504e653410b9178912f2063e359f2ec384b6f487c1c29f5d4d41eb79
MD5 306af489735aee00fa57a7a751600c08
BLAKE2b-256 c534079c0e5cc7ad39ba80c30f8aad51dc48c182d3350287244fc28f60258199

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page