Flutter消息服务插件messaging_service的使用

Flutter消息服务插件messaging_service的使用

特性

  • 可测试
  • 封装FirebaseMessaging依赖
  • 为每种类型的消息创建不同的调度器
  • 请求用户权限

工作原理

当接收到Firebase消息时,MessagingService会遍历所有已注册的调度器,并调用其dispatch方法,直到其中一个返回true,表示该调度器识别到传入的消息。

调度器负责解析传入的消息,并将其转换为T对象,然后发送到其流中。T是将生成的消息类。

为了识别消息,调度器会在Firebase消息(RemoteMessage)的数据中查找具有特定值的字段。

使用方法

首先,创建一个代表您的消息服务的类:

class MyMessagingService extends MessagingService {
}

对于每种类型的消息,创建一个表示接收数据的类和一个用于该类型消息的调度器。调度器负责分析接收到的数据并将其转换为类。

示例:聊天消息

假设聊天消息在数据中有一个键为’type’且值为’chat’。

  • 创建一个表示聊天消息的类:
class ChatMessage {
  final DateTime when;
  final String msg;
  final bool isMe;

  ChatMessage(this.when, this.msg, this.isMe);
}
  • 创建一个针对该类型消息的调度器。请注意super('chat')中的’chat’,它是识别接收到的消息的值。默认键为’type’。
class MessagingChatDispatcher extends MessagingDispatcher<ChatMessage> {
  MessagingChatDispatcher() : super('chat');

  @override
  ChatMessage getMessage(RemoteMessage message) {
    var data = message.data;
    return ChatMessage(
      DateTime.parse(data['when']),
      data['msg'],
      data['isMe'] == 'true',
    );
  }
}
  • 修改您的消息服务以提供新的消息类型:
class MyMessagingService extends MessagingService {
  Stream<ChatMessage> messagingChat() => stream<ChatMessage>();
}

完成以上步骤后,要启动MyMessagingService,您需要注册新的调度器并调用initialize方法:

var messagingService = MyMessagingService();
var messagingChatDispatcher = MessagingChatDispatcher();
messagingService.registerDispatcher<ChatMessage>(messagingChatDispatcher);
messagingService.initialize();

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

1 回复

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


在Flutter中,messaging_service 可能不是一个官方或广泛认可的插件名称,但基于你的需求,我假设你指的是集成消息服务(如Firebase Cloud Messaging, FCM)的功能。在Flutter中,处理消息服务通常使用的是 firebase_messaging 插件。

以下是一个简单的示例,展示如何在Flutter应用中使用 firebase_messaging 插件来处理消息服务。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.10.0 # 确保你使用了最新版本的firebase_core
  firebase_messaging: ^11.2.0 # 确保你使用了最新版本的firebase_messaging

然后运行 flutter pub get 来获取依赖。

2. 配置Firebase

在Firebase控制台为你的应用创建一个项目,并下载 google-services.json 文件,将其放置在 android/app/ 目录下。对于iOS,你需要配置 GoogleService-Info.plist 文件在 ios/Runner/ 目录下。

3. 初始化Firebase和Firebase Messaging

在你的 main.dart 文件中,初始化Firebase和Firebase Messaging服务:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  // 获取Firebase Messaging实例
  FirebaseMessaging messaging = FirebaseMessaging.instance;

  // 配置前台消息处理
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    print('收到消息: ${message.notification?.body}');
    // 在这里处理前台接收到的消息
  });

  // 配置后台消息处理(当应用处于后台时)
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

  runApp(MyApp());
}

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  // 如果在iOS上收到数据消息,需要在这里处理
  if (message.data.isNotEmpty) {
    print('后台消息数据: ${message.data}');
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase Messaging Demo'),
        ),
        body: Center(
          child: Text('检查控制台以查看消息日志'),
        ),
      ),
    );
  }
}

4. 请求消息权限(可选)

如果你的应用需要显示通知,你可能需要请求用户授予消息权限:

Future<void> _requestNotificationPermissions() async {
  // 请求通知权限
  await messaging.requestNotificationPermissions(
    const IosNotificationSettings(sound: true, badge: true, alert: true),
  );

  // 获取设备的token
  String? token = await messaging.getToken();
  print('设备Token: $token');
}

你可以在应用的初始化部分调用 _requestNotificationPermissions() 方法。

5. 发送测试消息

在Firebase控制台中,你可以发送测试消息到你的设备,以验证消息服务是否配置正确。

这个示例展示了如何在Flutter应用中集成Firebase Messaging服务,包括前台和后台消息处理。根据你的具体需求,你可能需要进一步定制这些代码。注意,这个示例是基于最新的 firebase_messagingfirebase_core 插件版本,确保你使用的是与你的Flutter SDK兼容的版本。

回到顶部