Skip to main content

Abstraction library to send push notifications through APNs, GCM and OneSignal

Project description

Abstraction library to send push notifications through APNs, GCM and OneSignal.


This library only supports Python 3.5



Requirements are not installed automatically by pip. The recomended dependencies can be found in requirements.txt.

For APNs an @oeegor/apns2-client fork is used, pypn branch

For GCM @geeknam/python-gcm develop branch is used.

For OneSignal yaosac.



apns = pypn.Notification(pypn.APNS)
apns.send(token, data)

Possible values for token are:

  • A string
  • A list of string

Currently sending multiple notifications means iterating over the list and send one request per user.


gcm = pypn.Notification(pypn.APNS)
gcm.send(token, data)

Possible values for token are:

  • A string
    • registration_id or topic (just the name, without “/topic/”)
  • A list of string, registration_ids


ones = pypn.Notification(pypn.OS)
ones.send(token, data)

Possible values for token are:

  • A list of OneSignal’s player_id

You need an App Auth Key and App Id. They can be set as environment variables ‘OS_APP_AUTH_KEY’ and ‘OS_APP_ID’ or assigned to the client via user_auth_key and app_id attributes.


dummy = pypn.Notification(pypn.DUMMY)
dummy.send(token, data)


PyPN has been built as a layer in between a “back-end”(I’m working on a Django application to handle data) and the existing push notification libraries. That means notifications are defined including all the required fields for each provider. This data is then passed to PyPN together with the provider “name”.

Example data

Not every field value is set.

data = {
   # Common fields
   'body': '1, 2, 3, ... push sucks!'
   'sound': 'default',
   'priority': 'high',
   'title': 'Hello, World!',

   # APNs aps
   'apns_badge': 69,
   'apns_content_available': 1,
   'apns_category': '',
   'apns_mutable_content': True,

   # APNs alert
   'apns_alert_title_loc_key': '',
   'apns_alert_title_loc_args': '',
   'apns_alert_loc_key': '',
   'apns_alert_loc_args': '',
   'apns_alert_action_loc_key': '',
   'apns_alert_launch_image': '',

   # APNs data
   'apns_custom': {'custom': 'values'},

   # GCM data
   'gcm_data': {'custom': 'values'},

   # GCM notification
   'gcm_notification_icon': '',
   'gcm_notification_tag': '',
   'gcm_notification_color': '',
   'gcm_notification_click_action': '',
   'gcm_notification_body_loc_key': '',
   'gcm_notification_body_loc_args': '',
   'gcm_notification_title_loc_key': '',
   'gcm_notification_title_loc_args': '',

   # GCM options
   'gcm_option_collapse_key': '',
   'gcm_option_content_available': '',
   'gcm_option_delay_while_idle': '',
   'gcm_option_time_to_live': 40320,
   'gcm_option_restricted_package_name': '',


Credentials are expected to be in placed in the environment.

For APNs the path to the .pem certificate and the pass-phrase if any:


For GCM the server key:


For OneSignal the application id and the API key:



Debug is the default value for every provider(you will not get notifications through GCM unless you set debug to false). This can also be set in the environment:

  • APNS_MODE: Possible values are “dev” and “prod”
  • GCM_DRY_RUN: Possible values are 0 and 1
  • There is no debug mode for OneSignal :(
  • Dummy: There is a dummy provider that does nothin

Also logging for the gcm library can be enabled setting GCM_LOGGING environment variable to 1.


Feel free to open a pull request or issue in GitHub.


Install requirements

pip install -r requirements.txt

Copy and update the environment file

cp .env-template .env


Install honcho

pip install honcho


honcho run python


This will send a notification to your devices.

honcho run python

Project details

Download files

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

Files for pypn, version 0.9
Filename, size File type Python version Upload date Hashes
Filename, size pypn-0.9-py3-none-any.whl (7.7 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size pypn-0.9.tar.gz (5.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page