Flutter订阅主题管理插件fcm_subscribed_topics的使用
Flutter订阅主题管理插件fcm_subscribed_topics的使用
Features(功能)
Flutter包用于在Firebase Cloud Messaging中获取已订阅的主题。
Getting Started(开始使用)
要使用fcm_subscribed_topics
插件,首先需要实例化FcmSubscribedTopcisServices
类,并传入服务账户的JSON文件。
FcmSubscribedTopcisServices subscribedTopcisServices = FcmSubscribedTopcisServices(jsonFile: {});
Usage(使用方法)
要使用该插件,首先需要将服务账户的JSON文件传递给FcmSubscribedTopcisServices
类。然后可以通过调用getSubscribeTopcis
方法来获取指定FCM Token的已订阅主题列表。
示例代码
以下是一个完整的示例代码,展示如何使用fcm_subscribed_topics
插件来管理订阅主题。
import 'package:fcm_subscribed_topics/fcm_subscribed_topics_services.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 实例化FcmSubscribedTopcisServices类,并传入服务账户的JSON文件
FcmSubscribedTopcisServices subscribedTopcisServices = FcmSubscribedTopcisServices(jsonFile: {
"type": "service_account",
"project_id": "your_project_id",
"private_key_id": "your_private_key_id",
"private_key": "your_private_key",
"client_email": "firebase-adminsdk-uvk5z@xxxxxxx.iam.gserviceaccount.com",
"client_id": "your_client_id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-uvk5z%xxxxxxx.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
});
// 获取指定FCM Token的已订阅主题列表
Future<void> getTopics(String fcmToken) async {
final topcies = await subscribedTopcisServices.getSubscribeTopcis(fcmToken);
print("已订阅的主题: $topcies");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
// 替换为实际的FCM Token
getTopics("your_fcm_token");
},
child: Text("获取订阅主题"),
),
],
),
),
);
}
}
说明
-
服务账户JSON文件:
- 在
jsonFile
参数中,需要填写从Firebase控制台下载的服务账户JSON文件。 - 替换
your_project_id
、your_private_key_id
、your_private_key
等占位符为实际值。
- 在
-
FCM Token:
- 使用
getSubscribeTopcis
方法时,需要传入设备的FCM Token。可以通过Firebase SDK生成。
- 使用
-
获取订阅主题:
- 调用
getSubscribeTopcis
方法后,会返回一个字符串列表,表示当前设备已订阅的主题。
- 调用
输出示例
运行上述代码后,点击按钮将打印类似以下内容:
已订阅的主题: [news, sports]
更多关于Flutter订阅主题管理插件fcm_subscribed_topics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter订阅主题管理插件fcm_subscribed_topics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
fcm_subscribed_topics
是一个用于管理 Firebase Cloud Messaging (FCM) 主题订阅的 Flutter 插件。它允许你在应用中订阅和取消订阅 FCM 主题,以便接收与这些主题相关的推送通知。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 fcm_subscribed_topics
插件的依赖:
dependencies:
flutter:
sdk: flutter
fcm_subscribed_topics: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装插件。
初始化 FCM
在使用 fcm_subscribed_topics
之前,你需要确保已经正确初始化了 FCM。通常,你需要在 main.dart
中初始化 FCM:
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging messaging = FirebaseMessaging.instance;
// 请求通知权限
NotificationSettings settings = await messaging.requestPermission(
alert: true,
badge: true,
sound: true,
);
// 获取 FCM 令牌
String? token = await messaging.getToken();
print("FCM Token: $token");
runApp(MyApp());
}
使用 fcm_subscribed_topics
插件
订阅主题
要订阅一个 FCM 主题,你可以使用 FcmSubscribedTopics
的 subscribeToTopic
方法:
import 'package:fcm_subscribed_topics/fcm_subscribed_topics.dart';
void subscribeToTopic(String topic) async {
try {
await FcmSubscribedTopics.subscribeToTopic(topic);
print("Subscribed to topic: $topic");
} catch (e) {
print("Failed to subscribe to topic: $e");
}
}
取消订阅主题
要取消订阅一个 FCM 主题,你可以使用 FcmSubscribedTopics
的 unsubscribeFromTopic
方法:
void unsubscribeFromTopic(String topic) async {
try {
await FcmSubscribedTopics.unsubscribeFromTopic(topic);
print("Unsubscribed from topic: $topic");
} catch (e) {
print("Failed to unsubscribe from topic: $e");
}
}
获取已订阅的主题
你可以使用 FcmSubscribedTopics
的 getSubscribedTopics
方法来获取当前设备已订阅的主题列表:
void getSubscribedTopics() async {
try {
List<String> topics = await FcmSubscribedTopics.getSubscribedTopics();
print("Subscribed topics: $topics");
} catch (e) {
print("Failed to get subscribed topics: $e");
}
}
示例代码
以下是一个简单的示例,展示了如何在 Flutter 应用中使用 fcm_subscribed_topics
插件来管理 FCM 主题订阅:
import 'package:flutter/material.dart';
import 'package:fcm_subscribed_topics/fcm_subscribed_topics.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('FCM Topics Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => subscribeToTopic('example_topic'),
child: Text('Subscribe to Topic'),
),
ElevatedButton(
onPressed: () => unsubscribeFromTopic('example_topic'),
child: Text('Unsubscribe from Topic'),
),
ElevatedButton(
onPressed: getSubscribedTopics,
child: Text('Get Subscribed Topics'),
),
],
),
),
),
);
}
void subscribeToTopic(String topic) async {
try {
await FcmSubscribedTopics.subscribeToTopic(topic);
print("Subscribed to topic: $topic");
} catch (e) {
print("Failed to subscribe to topic: $e");
}
}
void unsubscribeFromTopic(String topic) async {
try {
await FcmSubscribedTopics.unsubscribeFromTopic(topic);
print("Unsubscribed from topic: $topic");
} catch (e) {
print("Failed to unsubscribe from topic: $e");
}
}
void getSubscribedTopics() async {
try {
List<String> topics = await FcmSubscribedTopics.getSubscribedTopics();
print("Subscribed topics: $topics");
} catch (e) {
print("Failed to get subscribed topics: $e");
}
}
}