Skip to main content

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/

快速开始

使用 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 查看哈希

已上传 source

内置分布

pyfcm_tsn-1.5.2-py3-none-any.whl (16.1 kB 查看哈希

已上传 py3