Python client for Google Cloud Messaging for Android (GCM)
Project description
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
Topic Messaging Reference
Usage
RTFM about Google Cloud Messaging
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
)
# Topic Messaging
topic = 'foo'
gcm.send_topic_message(topic=topic, data=data)
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)
# Successfully handled registration_ids
# Keep in mind that a registration id listed in response['success'] can also be in response['canonical'] if the registration id has changed
if response and 'success' in response:
for reg_id, success_id in response['success'].items():
print('SUCCESS for reg_id %s' % reg_id)
# 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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.