FCM 的 Python 客户端 - Firebase 云消息传递(Android、iOS 和 Web)
项目描述
FCM 的 Python 客户端 - Firebase 云消息传递(Android、iOS 和 Web)
Firebase 云消息传递 (FCM) 是 GCM 的新版本。它继承了可靠且可扩展的 GCM 基础架构以及新功能。强烈建议 GCM 用户升级到 FCM。
使用 FCM,您可以通知客户端应用程序有新的电子邮件或其他数据可供同步。您可以发送通知以推动用户重新参与和保留。对于即时消息传递等用例,一条消息可以将高达 4KB 的有效负载传输到客户端应用程序。
有关更多信息,请访问:https ://firebase.google.com/docs/cloud-messaging/
链接
皮皮: https ://pypi.python.org/pypi/pyfcm/
寻找 Django 版本?
结帐 fcm-django - 链接:https ://github.com/xtrinch/fcm-django
更新(重大更改)
主要更新(2017 年 8 月):https ://github.com/olucurious/PyFCM/releases/tag/1.4.0
快速开始
使用 pip 安装:
pip install pyfcm OR pip install git+https://github.com/olucurious/PyFCM.git
PyFCM 支持 Android、iOS 和 Web。
特征
涵盖所有 FCM 功能
龙卷风支持
例子
使用FCMNotification类发送通知:
# Send to single device.
from pyfcm import FCMNotification
push_service = FCMNotification(api_key="<api-key>")
# OR initialize with proxies
proxy_dict = {
"http" : "http://127.0.0.1",
"https" : "http://127.0.0.1",
}
push_service = FCMNotification(api_key="<api-key>", proxy_dict=proxy_dict)
# Your api-key can be gotten from: https://console.firebase.google.com/project/<project-name>/settings/cloudmessaging
registration_id = "<device registration_id>"
message_title = "Uber update"
message_body = "Hi john, your customized news for today is ready"
result = push_service.notify_single_device(registration_id=registration_id, message_title=message_title, message_body=message_body)
# Send to multiple devices by passing a list of ids.
registration_ids = ["<device registration_id 1>", "<device registration_id 2>", ...]
message_title = "Uber update"
message_body = "Hope you're having fun this weekend, don't forget to check today's news"
result = push_service.notify_multiple_devices(registration_ids=registration_ids, message_title=message_title, message_body=message_body)
print result
发送数据消息。
# With FCM, you can send two types of messages to clients:
# 1. Notification messages, sometimes thought of as "display messages."
# 2. Data messages, which are handled by the client app.
# 3. Notification messages with optional data payload.
# Client app is responsible for processing data messages. Data messages have only custom key-value pairs. (Python dict)
# Data messages let developers send up to 4KB of custom key-value pairs.
# Sending a notification with data message payload
data_message = {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
# To multiple devices
result = push_service.notify_multiple_devices(registration_ids=registration_ids, message_body=message_body, data_message=data_message)
# To a single device
result = push_service.notify_single_device(registration_id=registration_id, message_body=message_body, data_message=data_message)
# Sending a data message only payload, do NOT include message_body also do NOT include notification body
# To multiple devices
result = push_service.multiple_devices_data_message(registration_ids=registration_ids, data_message=data_message)
# To a single device
result = push_service.single_device_data_message(registration_id=registration_id, data_message=data_message)
# To send extra kwargs (notification keyword arguments not provided in any of the methods),
# pass it as a key value in a dictionary to the method being used
extra_notification_kwargs = {
'android_channel_id': 2
}
result = push_service.notify_single_device(registration_id=registration_id, data_message=data_message, extra_notification_kwargs=extra_notification_kwargs)
# To process background notifications in iOS 10, set content_available
result = push_service.notify_single_device(registration_id=registration_id, data_message=data_message, content_available=True)
# To support rich notifications on iOS 10, set
extra_kwargs = {
'mutable_content': True
}
# and then write a NotificationService Extension in your app
# Use notification messages when you want FCM to handle displaying a notification on your app's behalf.
# Use data messages when you just want to process the messages only in your app.
# PyFCM can send a message including both notification and data payloads.
# In such cases, FCM handles displaying the notification payload, and the client app handles the data payload.
发送低优先级消息。
# The default is low_priority == False
result = push_service.notify_multiple_devices(registration_ids=registration_ids, message_body=message, low_priority=True)
获取有效的注册 ID(用于清理数据库中的无效注册 ID)
registration_ids = ['reg id 1', 'reg id 2', 'reg id 3', 'reg id 4', ...]
valid_registration_ids = push_service.clean_registration_ids(registration_ids)
# Shoutout to @baali for this
Appengine 用户应该定义他们的环境
push_service = FCMNotification(api_key="<api-key>", proxy_dict=proxy_dict, env='app_engine')
result = push_service.notify_multiple_devices(registration_ids=registration_ids, message_body=message, low_priority=True)
管理对主题的订阅
push_service = FCMNotification(SERVER_KEY)
tokens = [
<registration_id_1>,
<registration_id_2>,
]
subscribed = push_service.subscribe_registration_ids_to_topic(tokens, 'test')
# returns True if successful, raises error if unsuccessful
unsubscribed = push_service.unsubscribe_registration_ids_from_topic(tokens, 'test')
# returns True if successful, raises error if unsuccessful
向主题发送消息。
# Send a message to devices subscribed to a topic.
result = push_service.notify_topic_subscribers(topic_name="news", message_body=message)
# Conditional topic messaging
topic_condition = "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"
result = push_service.notify_topic_subscribers(message_body=message, condition=topic_condition)
# FCM first evaluates any conditions in parentheses, and then evaluates the expression from left to right.
# In the above expression, a user subscribed to any single topic does not receive the message. Likewise,
# a user who does not subscribe to TopicA does not receive the message. These combinations do receive it:
# TopicA and TopicB
# TopicA and TopicC
# Conditions for topics support two operators per expression, and parentheses are supported.
# For more information, check: https://firebase.google.com/docs/cloud-messaging/topic-messaging
其他参数选项
collapse_key (str, optional): Identifier for a group of messages
that can be collapsed so that only the last message gets sent
when delivery can be resumed. Defaults to `None`.
delay_while_idle (bool, optional): If `True` indicates that the
message should not be sent until the device becomes active.
time_to_live (int, optional): How long (in seconds) the message
should be kept in FCM storage if the device is offline. The
maximum time to live supported is 4 weeks. Defaults to ``None``
which uses the FCM default of 4 weeks.
low_priority (boolean, optional): Whether to send notification with
the low priority flag. Defaults to `False`.
restricted_package_name (str, optional): Package name of the
application where the registration IDs must match in order to
receive the message. Defaults to `None`.
dry_run (bool, optional): If `True` no message will be sent but
request will be tested.
获取响应数据。
# Response from PyFCM.
response_dict = {
'multicast_ids': list(), # List of Unique ID (number) identifying the multicast message.
'success': 0, #Number of messages that were processed without an error.
'failure': 0, #Number of messages that could not be processed.
'canonical_ids': 0, #Number of results that contain a canonical registration token.
'results': list(), #Array of dict objects representing the status of the messages processed.
'topic_message_id': None or str
}
# registration_id: Optional string specifying the canonical registration token for the client app that the message
# was processed and sent to. Sender should use this value as the registration token for future requests. Otherwise,
# the messages might be rejected.
# error: String specifying the error that occurred when processing the message for the recipient
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
pyfcm_tsn-1.5.2.tar.gz
(17.9 kB
查看哈希)
内置分布
pyfcm_tsn-1.5.2-py3-none-any.whl
(16.1 kB
查看哈希)