Skip to main content

Python client for Google Cloud Messaging for Android (GCM)

Project description

https://img.shields.io/pypi/v/python-gcm.svg https://img.shields.io/pypi/dm/python-gcm.svg Build Status Code Health https://coveralls.io/repos/geeknam/python-gcm/badge.svg?branch=master https://img.shields.io/gratipay/geeknam.svg

Python client for Google Cloud Messaging for Android (GCM)

Installation

pip install python-gcm

Features

  • Supports multicast message

  • Resend messages using exponential back-off

  • Proxy support

  • Easily handle errors

  • Uses requests from version > 0.2

Usage

RTFM here

Basic

from gcm import GCM

gcm = GCM(API_KEY)
data = {'param1': 'value1', 'param2': 'value2'}

# Plaintext request
reg_id = '12'
gcm.plaintext_request(registration_id=reg_id, data=data)

# JSON request
reg_ids = ['12', '34', '69']
response = gcm.json_request(registration_ids=reg_ids, data=data)

# Extra arguments
res = gcm.json_request(
    registration_ids=reg_ids, data=data,
    collapse_key='uptoyou', delay_while_idle=True, time_to_live=3600
)

Error handling

# Plaintext request
reg_id = '12345'
try:
    canonical_id = gcm.plaintext_request(registration_id=reg_id, data=data)
    if canonical_id:
        # Repace reg_id with canonical_id in your database
        entry = entity.filter(registration_id=reg_id)
        entry.registration_id = canonical_id
        entry.save()
except GCMNotRegisteredException:
    # Remove this reg_id from database
    entity.filter(registration_id=reg_id).delete()
except GCMUnavailableException:
    # Resent the message

# JSON request
reg_ids = ['12', '34', '69']
response = gcm.json_request(registration_ids=reg_ids, data=data)

# Handling errors
if 'errors' in response:
    for error, reg_ids in response['errors'].items():
        # Check for errors and act accordingly
        if error in ['NotRegistered', 'InvalidRegistration']:
            # Remove reg_ids from database
            for reg_id in reg_ids:
                entity.filter(registration_id=reg_id).delete()
if 'canonical' in response:
    for reg_id, canonical_id in response['canonical'].items():
        # Repace reg_id with canonical_id in your database
        entry = entity.filter(registration_id=reg_id)
        entry.registration_id = canonical_id
        entry.save()

Exceptions

Read more on response errors here

  • GCMMalformedJsonException

  • GCMConnectionException

  • GCMAuthenticationException

  • GCMTooManyRegIdsException

  • GCMNoCollapseKeyException

  • GCMInvalidTtlException

  • GCMMissingRegistrationException

  • GCMMismatchSenderIdException

  • GCMNotRegisteredException

  • GCMMessageTooBigException

  • GCMInvalidRegistrationException

  • GCMUnavailableException

Gotta catch them all

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

python-gcm-0.2.tar.gz (7.2 kB view hashes)

Uploaded Source

Supported by

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