push-den is a Python wrapper library for sending push notifications through Firebase Cloud Messaging (FCM) and Apple Push Notification service (APNs).
Current version: 1.3.3
Release history: CHANGELOG.md
https://pypi.org/project/push-den/
- Python 3.8 or above
pip install push-denFor local build/install:
python -m build
pip install dist/push_den-<version>-py3-none-any.whlCreate a .env file from .env.example and set the required values.
import os
from push_den.processor import NotificationProcessor
fcm_credential_path = os.getenv("FIREBASE_ADMIN_PRIVATE_KEY")
apns = {
"APNS_AUTH_KEY": os.getenv("APNS_AUTH_KEY"),
"TEAM_ID": os.getenv("TEAM_ID"),
"ALGORITHM": os.getenv("ALGORITHM", "ES256"),
"APNS_KEY_ID": os.getenv("APNS_KEY_ID"),
"BUNDLE_ID": os.getenv("BUNDLE_ID"),
"IOS_HTTP_URL": os.getenv("IOS_HTTP_URL", "api.push.apple.com:443"),
"IOS_HTTP_SANDBOX_URL": os.getenv("IOS_HTTP_SANDBOX_URL"),
}
notification_processor = NotificationProcessor(fcm=fcm_credential_path, apns=apns)payload = {
"type": "fcm",
"send_mode": "single",
"device_token": "<fcm-device-token>",
"notification": {
"message_title": "Hello",
"message_body": "Welcome",
"priority": "high",
"ttl": 60,
},
}
response = notification_processor.process_message(payload)
print(response.message_id, response.success, response.exception)payload = {
"type": "fcm",
"send_mode": "multiple_data",
"device_tokens": ["<token-1>", "<token-2>"],
"notification": {
"data": {
"event": "order.created",
"order_id": "1001",
},
"priority": "normal",
"ttl": 120,
},
}
response = notification_processor.process_message(payload)
print(response.success_count, response.failure_count)payload = {
"type": "apns",
"send_mode": "alert",
"device_token": "<apns-device-token>",
"notification": {
"title": "New Message",
"data": "You have a new notification",
"ttl": 3600,
},
}
response = notification_processor.process_message(payload)
print(response.status, response.read().decode("utf-8"))payload = {
"type": "apns",
"send_mode": "immutable_alert",
"device_tokens": ["<token-1>", "<token-2>"],
"notification": {
"title": "Account Notice",
"message_body": "Your profile has been updated.",
"ttl": 3600,
},
}
response = notification_processor.process_message(payload)
print(response)from push_den.notificationfactory.fcm_factory.fcm_notification import FcmNotification
from push_den.notificationfactory.apns_factory.apns_notification import ApnsNotification
fcm_size = FcmNotification.calculate_payload_size(payload)
apns_size = ApnsNotification.calculate_payload_size(payload)
print(fcm_size)
print(apns_size)