firebase 如何向主题发送通知

ncecgwcz  于 2023-03-31  发布在  其他
关注(0)|答案(5)|浏览(172)

我想要一个代码,用于将特定主题的通知从一个设备发送到多个设备,并且我想在订阅该主题的设备上显示该通知?我将使用firestore存储数据和存储令牌,还将使用Firebase消息传递发送通知

ijnw1ujt

ijnw1ujt1#

这是我发送特定主题通知的代码

我希望这对新开发者有帮助。

import 'package:http/http.dart' as http;

Future<void> sendNotification(subject,title) async{

final postUrl = 'https://fcm.googleapis.com/fcm/send';

String toParams = "/topics/"+'yourTopicName';

final data = {
"notification": {"body":subject, "title":title},
"priority": "high",
"data": {
"click_action": "FLUTTER_NOTIFICATION_CLICK",
"id": "1",
"status": "done",
"sound": 'default',
"screen": "yourTopicName",
},
"to": "${toParams}"};

final headers = {
'content-type': 'application/json',
'Authorization': 'key=key'

};

final response = await http.post(postUrl,
body: json.encode(data),
encoding: Encoding.getByName('utf-8'),
headers: headers);

if (response.statusCode == 200) {
// on success do 
print("true");
} else {
// on failure do 
print("false");

}
}

使用订阅

FirebaseMessaging _firebaseMessaging =  FirebaseMessaging();
_firebaseMessaging.subscribeToTopic("yourTopicName");
tez616oj

tez616oj2#

发送消息设备需要调用Firebase Cloud Messaging API并指定FCM Server Key。顾名思义,此密钥应仅在受信任的环境中使用,例如您的开发机器、您控制的服务器或Cloud Functions等环境。之所以需要此密钥,是因为任何拥有您的FCM服务器密钥的人都可以向您的应用的所有用户发送消息。
最简单的方法是运行一个curl命令或类似的东西,调用legacy FCM REST API。请看下面的例子:How can I send a Firebase Cloud Messaging notification without use the Firebase Console?要发送到主题,请确保to值类似于"/topics/your_topic"
对于更高的生产级别,您可能需要引入服务器或使用Cloud Functions。然后发送消息就变成了一个多步骤的过程,如:
1.想要发送消息、将消息写入数据库或调用API的客户端。
1.此写入操作会触发您的服务器或Cloud Functions,后者会验证请求(确定此用户是否有权发送此消息)。
1.然后,服务器端代码调用Firebase Admin API向主题发送消息。
关于这个的一个例子,请参见folder in the functions-samples repo
另见:

ff29svar

ff29svar3#

您可以使用firebase_messagingFirebaseMessaging.subscribeToTopic * 订阅主题 *:

FirebaseMessaging().subcribeToTopic('topic_name');

您可以使用Firebase控制台或某些后端代码(例如Cloud Functions)向主题发送通知。
Learn more.

ki1q1bka

ki1q1bka4#

根据firebase_messaging readme页面,在最后一节中,您无法使用flutter firebase_messaging库发送发送消息。
要为用户订阅主题,请执行以下操作:

FirebaseMessaging _firebaseMessaging =  FirebaseMessaging();
_firebaseMessaging.subscribeToTopic("MyTopic");

这将为该设备订阅主题MyTopic
您也可以通过以下方式取消订阅:

_firebaseMessaging.unsubscribeFromTopic("MyTopic");
nvbavucw

nvbavucw5#

在Main.dart文件中添加主题名称

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
  FirebaseMessaging fcmMessage = FirebaseMessaging.instance;
  await fcmMessage.subscribeToTopic('testNotification');
  runApp(const MyApp());
}

添加HTTP POST请求

final data = {
      'to': '/topics/testNotification',
      'notification': {
        'body':'Simple Notification',
        'title': 'Test Notification',
        
      }
    };
    String url = 'https://fcm.googleapis.com/fcm/send';
    try {
      final result = await http.post(
        Uri.parse(url),
        body: jsonEncode(data),
        headers: {
          'Content-type': 'application/json',
          'Authorization':
              'key=AAAAm5+++++++++++++++Authorization Token+++++++++++++'
        },
      );
      print(jsonDecode(result.body));
      return jsonDecode(result.body);
    } catch (e) {
      print(e);
      return {'error': e};
    }

相关问题