Flutter消息推送插件unify_fcm的使用

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

Flutter消息推送插件unify_fcm的使用

Unify库 由UNICODE团队打造。

轻量级的Flutter包,用于通过Firebase Cloud Messaging (FCM) v1 API发送远程推送通知,并从服务账户生成访问令牌。阿拉伯文祝福:🇸🇦💙🇧🇩❤️🇪🇬

特性支持

  • 访问令牌:您可以使用项目的服务账户JSON文件创建Bearer访问令牌。
  • 文本通知:发送带有标题和正文的常规文本通知 📲。
  • 图像通知:如果您的应用支持图像通知,您还可以发送图像 😉。
  • 主题通知:向订阅了该主题的所有用户发送通知 📬。

开始使用

请参阅我们的示例项目以更好地理解实现方法。

main.dart文件中初始化插件以发送通知

// 初始化插件
UnifyServices.initUnify(
  config: UnifyConfig(
    fcmAccessToken: "your_fcm_access_token_here", // FCM访问令牌
    projectName: "your_firebase_project_name_here", // 你的Firebase项目名称
  ),
);

生成Bearer访问令牌

// 生成访问令牌
String? token = await UnifyServices.genTokenFromServiceAcc(
  serviceAccount: {
    "type": "service_account",
    "project_id": "", // 项目ID
    "private_key_id": "", // 私钥ID
    "private_key": "", // 私钥
    "client_email": "", // 客户端邮箱
    "client_id": "", // 客户端ID
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", // 授权URI
    "token_uri": "https://oauth2.googleapis.com/token", // 令牌URI
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", // 授权提供商X509证书URL
    "client_x509_cert_url": "", // 客户端X509证书URL
    "universe_domain": "googleapis.com" // 宇宙域
  },
);

使用FCM令牌发送通知

// 发送通知到用户
String? id = await UnifyServices.sendNotification(
  notification: UnifyNoficationModel(
    token: "your_user_fcm_token_here", // 用户FCM令牌
    notifyId: "1", // 通知ID
    title: "Hi Unify Fan :)", // 通知标题
    body: "Let's go to the Unify world ^_^", // 通知正文
    imageUrl: "https://images.pexels.com/photos/9551192/pexels-photo-9551192.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1", // 图像URL
  ),
);

向主题频道发送通知

// 发送通知到主题频道
String? id = await UnifyServices.sendNotification(
  notification: UnifyNoficationModel(
    topic: "your_topic_name_here", // 主题名称
    notifyId: "1", // 通知ID
    title: "Hi Unify Fans :)", // 通知标题
    body: "Let's go to the Unify world ^_^", // 通知正文
    imageUrl: "https://images.pexels.com/photos/9551192/pexels-photo-9551192.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1", // 图像URL
  ),
);

如果你喜欢它,请给它一个星⭐️和赞👍🏻。更多艺术作品和手工艺品,请访问我们的团队:UNICODE团队。下次再见,继续编码并保持出色😉。

示例代码

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:unify_fcm/unify_fcm.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  UnifyServices.initUnify(
    config: UnifyConfig(
      fcmAccessToken: "your_fcm_access_token_here", // FCM访问令牌
      projectName: "your_firebase_project_name_here", // 你的Firebase项目名称
    ),
  );
  
  runApp(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text("Unify Example"),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.max,
            children: [
              const Text('欢迎来到Unify世界 ;)'),
              const SizedBox(height: 50),
              ElevatedButton(
                child: const Text("生成令牌"),
                onPressed: () async {
                  String? token = await UnifyServices.genTokenFromServiceAcc(
                    serviceAccount: {
                      "type": "service_account",
                      "project_id": "", // 项目ID
                      "private_key_id": "", // 私钥ID
                      "private_key": "", // 私钥
                      "client_email": "", // 客户端邮箱
                      "client_id": "", // 客户端ID
                      "auth_uri": "https://accounts.google.com/o/oauth2/auth", // 授权URI
                      "token_uri": "https://oauth2.googleapis.com/token", // 令牌URI
                      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", // 授权提供商X509证书URL
                      "client_x509_cert_url": "", // 客户端X509证书URL
                      "universe_domain": "googleapis.com" // 宇宙域
                    },
                  );

                  log(token ?? "");
                },
              ),
              const SizedBox(height: 10),
              ElevatedButton(
                child: const Text("发送测试通知"),
                onPressed: () async {
                  String? id = await UnifyServices.sendNotification(
                    notification: UnifyNoficationModel(
                      token: "your_user_fcm_token_here", // 用户FCM令牌
                      notifyId: "1", // 通知ID
                      title: "Hi Unify Fan :)", // 通知标题
                      body: "Let's go to the Unify world ^_^", // 通知正文
                      imageUrl: "https://images.pexels.com/photos/9551192/pexels-photo-9551192.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1", // 图像URL
                    ),
                  );
                  debugPrint("消息ID: $id");
                },
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter消息推送插件unify_fcm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter消息推送插件unify_fcm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用unify_fcm插件来实现消息推送的示例代码。这个插件结合了Firebase Cloud Messaging (FCM) 服务,可以方便地在Flutter应用中实现消息推送功能。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加unify_fcm依赖:

dependencies:
  flutter:
    sdk: flutter
  unify_fcm: ^latest_version  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

2. 配置Firebase

在Firebase控制台中为你的应用创建一个项目,并下载google-services.json文件,将其放置在android/app/目录下。

对于iOS,你需要配置AppDelegate.swiftAppDelegate.m文件,并下载GoogleService-Info.plist文件,将其放置在ios/Runner/目录下。

3. 初始化unify_fcm

在你的Flutter应用的入口文件(通常是main.dart)中初始化unify_fcm

import 'package:flutter/material.dart';
import 'package:unify_fcm/unify_fcm.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化FCM
  await UnifyFcm.instance.initialize(
    android: AndroidInitializationSettings(
      defaultChannelKey: 'default_channel', // 替换为你的默认通知渠道ID
      defaultChannelName: 'Default Channel', // 替换为你的默认通知渠道名称
      defaultChannelDescription: 'Default Channel Description', // 替换为你的默认通知渠道描述
      defaultChannelImportance: Importance.max, // 设置通知的重要性
    ),
    ios: IOSInitializationSettings(
      requestAlertPermission: true,
      requestBadgePermission: true,
      requestSoundPermission: true,
    ),
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();

    // 监听FCM消息
    UnifyFcm.instance.onMessageReceived.listen((RemoteMessage message) {
      print('收到消息: ${message.data}');
      // 在这里处理收到的消息
    });

    // 监听FCM通知点击事件
    UnifyFcm.instance.onMessageOpenedApp.listen((RemoteMessage message) {
      print('用户点击了通知: ${message.data}');
      // 在这里处理用户点击通知后的逻辑
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter FCM Demo'),
      ),
      body: Center(
        child: Text('等待消息推送...'),
      ),
    );
  }
}

4. 发送测试消息

你可以使用Firebase控制台发送测试消息到你的设备,确保你的设备已经注册到Firebase项目中,并且FCM插件已经正确配置。

注意事项

  • 确保你的Firebase项目配置正确,包括下载并放置正确的配置文件。
  • 在iOS上,你可能需要在Xcode中进行额外的配置,比如启用Background Modes中的Remote Notifications。
  • 在Android上,确保你的应用有必要的权限,比如INTERNETACCESS_NETWORK_STATE

这个示例代码展示了如何在Flutter中使用unify_fcm插件来初始化FCM服务,并监听消息接收和通知点击事件。根据你的需求,你可以进一步扩展这个示例,比如处理不同类型的数据消息、显示本地通知等。

回到顶部