简介:Firebase Cloud Messaging (FCM) 是一种跨平台消息传递解决方案,可供您可靠地传递消息,且无需任何费用。使用 FCM,您可以通知客户端App有新的电子邮件或其他数据等待同步。您可以发送通知消息与用户互动并留住他们。
主要功能:发送通知消息或数据消息
工作原理:
FCM 实现包括用于发送和接收的两个主要组件:
一个受信任的环境,例如 Cloud Functions for Firebase 或用于构建、定位和发送消息的应用服务器。
一个通过针对具体平台的相应传输服务接收消息的 Apple、Android 或 Web (JavaScript) 客户端应用。
您可以通过 Firebase Admin SDK 或 FCM 服务器协议发送消息。
工作原理图解说明
发送消息的方式:
发送消息的方式有两种:按设备注册token、按主题
每个安装了集成FCM SDK的客户端,都可以生成唯一的register_token,这个register_token会由App客户端给到App服务端。服务端拿到这个register_token,就可以只给这个设备推送消息。
每个设备也可以订阅主题,订阅主题后,可以直接给这个主题推送消息。这样所有订阅过该主题的设备都可以收到推送消息。
目前,FCM Admin SDK支持五种服务端编程语言:Node.js、Java、Python、Go、C#
前提条件:
设置Firebase项目和服务账号
创建Firebase项目
# Firebase控制台:https://console.firebase.google.com
# 创建流程
1. 在 Firebase 控制台中,点击添加项目
2. 如果出现 Firebase 条款提示,请查看并接受。
3. 点击继续。
4. 为您的项目设置 Google Analytics(可选)
5. 点击创建项目(如果使用现有的 Google Cloud 项目,则点击添加 Firebase)
1. 在 Firebase 控制台中,打开设置 > 服务帐号。
2. 点击生成新的私钥,然后点击生成密钥进行确认。
3. 妥善存储包含密钥的 JSON 文件.
Firebase Admin Python SDK 可通过 pip 获得。
pip3 install firebase-admin
通过服务帐号进行授权时,有两种方式可为您的应用提供凭据。
方式1(推荐)
(1)将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含服务帐号密钥的 JSON 文件的文件路径
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
(2)完成上述步骤后,应用默认凭据 (ADC) 能够隐式确定您的凭据
import firebase_admin
default_app = firebase_admin.initialize_app()
方式2:直接在代码中写死JSON文件路径
import firebase_admin
from firebase_admin import credentials
cred = credentials.Certificate("path/to/service_account.json")
default_app = firebase_admin.initialize_app(credential=cred)
from firebase_admin import messaging
# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'
# See documentation on defining a message payload.
message = messaging.Message(
notification=messaging.Notification(
title='your_titme',
body='your_body',
image='your_img',
),
token=registration_token,
)
# Send a message to the device corresponding to the provided registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
创建主题后,使用服务器 API向主题发送消息,则订阅过该主题的设备都会受到消息。
from firebase_admin import messaging
# The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'
# See documentation on defining a message payload.
message = messaging.Message(
notification=messaging.Notification(
title='your_titme',
body='your_body',
image='your_img',
),
topic=topic,
)
# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
# Create a list containing up to 500 messages.
messages = [
messaging.Message(
notification=messaging.Notification('Price drop', '5% off all electronics'),
token=registration_token,
),
# ...
messaging.Message(
notification=messaging.Notification('Price drop', '2% off all books'),
topic='readers-club',
),
]
response = messaging.send_all(messages)
# See the BatchResponse reference documentation
# for the contents of response.
print('{0} messages were sent successfully'.format(response.success_count))
客户端SDK可以帮用户订阅主题,服务端可以通过接口帮用户订阅主题。
您可以为客户端应用实例订阅任何现有主题,也可创建新主题。当您使用 API 为客户端应用订阅新主题(您的 Firebase 项目中尚不存在的主题)时,系统会在 FCM 中创建一个使用该名称的新主题,随后任何客户端都可订阅该主题。
# 您可以将注册令牌列表传递给 Firebase Admin SDK 订阅方法,以便为相应的设备订阅主题
# These registration tokens come from the client FCM SDKs.
registration_tokens = [
'YOUR_REGISTRATION_TOKEN_1',
# ...
'YOUR_REGISTRATION_TOKEN_n',
]
# Subscribe the devices corresponding to the registration tokens to the
# topic.
response = messaging.subscribe_to_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were subscribed successfully')
注意:在单次请求中,您最多可以为 1000 台设备订阅或退订主题。
利用 Admin FCM API,您还可以将注册令牌传递给相应的方法,来为设备退订主题
# These registration tokens come from the client FCM SDKs.
registration_tokens = [
'YOUR_REGISTRATION_TOKEN_1',
# ...
'YOUR_REGISTRATION_TOKEN_n',
]
# Unubscribe the devices corresponding to the registration tokens from the
# topic.
response = messaging.unsubscribe_from_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were unsubscribed successfully')
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!?