Flutter订阅主题管理插件fcm_subscribed_topics的使用

发布于 1周前 作者 sinazl 来自 Flutter

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("获取订阅主题"),
            ),
          ],
        ),
      ),
    );
  }
}

说明

  1. 服务账户JSON文件

    • jsonFile参数中,需要填写从Firebase控制台下载的服务账户JSON文件。
    • 替换your_project_idyour_private_key_idyour_private_key等占位符为实际值。
  2. FCM Token

    • 使用getSubscribeTopcis方法时,需要传入设备的FCM Token。可以通过Firebase SDK生成。
  3. 获取订阅主题

    • 调用getSubscribeTopcis方法后,会返回一个字符串列表,表示当前设备已订阅的主题。

输出示例

运行上述代码后,点击按钮将打印类似以下内容:

已订阅的主题: [news, sports]

更多关于Flutter订阅主题管理插件fcm_subscribed_topics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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 主题,你可以使用 FcmSubscribedTopicssubscribeToTopic 方法:

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 主题,你可以使用 FcmSubscribedTopicsunsubscribeFromTopic 方法:

void unsubscribeFromTopic(String topic) async {
  try {
    await FcmSubscribedTopics.unsubscribeFromTopic(topic);
    print("Unsubscribed from topic: $topic");
  } catch (e) {
    print("Failed to unsubscribe from topic: $e");
  }
}

获取已订阅的主题

你可以使用 FcmSubscribedTopicsgetSubscribedTopics 方法来获取当前设备已订阅的主题列表:

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");
    }
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!