2

我正在尝试使用 python 向所有用户发送推送通知。但是,我知道使用应用程序无法做到这一点,您必须使用主题(据我所知)。有没有办法可以从应用程序中创建主题?谢谢编辑:我对firebase完全陌生(如果我很困难,很抱歉)

4

3 回答 3

3

首先你需要了解一个主题不需要创建(它会自动创建),你只需要定义主题名称,例如如果你正在创建应用程序以在天气变化时接收推送通知,那么主题名称可能是“天气”。

现在您需要 2 个组件:移动和后端

1. 移动:在您的移动应用中,您只需要集成 Firebase SDK订阅“天气”主题,您是如何做到的?

Firebase.messaging.subscribeToTopic("weather")

不要忘记检查文档。

2. 后端:在您的服务器中,您需要实现基于 FCM SDK 的发送者脚本。如果您是初学者,我建议您使用 Postman 发送推送通知,然后将 FCM 集成到您的后端应用程序中。

您可以通过 Postman 发送此有效负载(不要忘记在标头中设置您的 API KEY)

https://fcm.googleapis.com/fcm/send

{
  "to": "/topics/weather",
  "notification": {
    "title": "The weather changed",
    "body": "27 °C"
  }
}

如果可行,您可以将 FCM SDK 添加到您的后端

$ sudo pip install firebase-admin
default_app = firebase_admin.initialize_app()

最后,您可以按照文档所述发送通知

from firebase_admin import messaging

topic = 'weather'

message = messaging.Message(
    notification={
        'title': 'The weather changed',
        'body': '27 °C',
    },
    topic=topic,
)
response = messaging.send(message)

更多细节在这里:https ://github.com/firebase/firebase-admin-python/blob/eefc31b67bc8ad50a734a7bb0a52f56716e0e4d7/snippets/messaging/cloud_messaging.py#L24-L40

您需要对文档有耐心,我希望我有所帮助。

于 2020-12-20T18:22:00.007 回答
1

要为 Android 客户端订阅主题,请按照有关订阅主题的文档中的说明进行操作:

FirebaseMessaging.getInstance().subscribeToTopic("weather")

然后,您可以从受信任的环境(例如您的开发机器、您控制的服务器或 Cloud Functions)向该主题发送消息。有关这方面的示例,请参阅如何通过 CURL 向所有设备发送 Firebase 通知?

于 2020-12-20T17:12:20.623 回答
0

上述解决方案已贬值且已过时。

让我包括用于 python 的 firebase-admin SDK 的最新实现。

import firebase_admin
from firebase_admin import credentials, messaging

cred = credentials.Certificate(
    "<path-to-your-credential-json>")
firebase_admin.initialize_app(cred)

topic = 'notification'

message = messaging.Message(
    notification=messaging.Notification(
        title='The weather changed', body='27 °C'),
    topic=topic,
)
response = messaging.send(message)

print(response)

*注意一些配置:

  1. 在您的 firebase 控制台中获取您的 credential.json:“项目设置”->“服务帐户”->“生成新私钥”
  2. 确保为服务器和客户端应用程序订阅了正确的主题名称。每个订阅相同主题的客户端应用程序,无论哪些设备都会收到相应的通知。

祝你有美好的一天~

于 2021-12-05T09:20:54.607 回答