Flutter消息管理插件mbmessages的使用
Flutter消息管理插件mbmessages的使用
MBMessages 是一个插件库,用于在应用内显示消息和管理推送通知。通过此库,您可以展示在 MBurger 仪表板上设置的消息,并且可以配置和管理与您的 MBurger 项目相关的推送通知。
MBMessages 依赖于以下包:
安装
您可以通过 pub 来安装 MBAudience SDK。在 pubspec.yaml
文件中添加以下内容:
dependencies:
mbmessages: ^2.0.0
然后从命令行运行以下命令来安装包:
$ flutter pub get
初始化
要初始化 SDK,您需要将 MBMessages
添加到 MBurger
的插件数组中:
MBManager.shared.apiToken = 'YOUR_API_TOKEN';
MBManager.shared.plugins = [MBMessages()];
为了正确显示应用内消息,您需要将主小部件嵌入到 MBMessagesBuilder
中:
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
...
home: MBMessagesBuilder(
child: Scaffold(
...
),
),
);
}
为什么?因为 MBMessages
使用 showDialog
函数来呈现应用内消息,而该函数需要一个 BuildContext
。将主 Scaffold
嵌入到 MBMessagesBuilder
中可以让 SDK 知道始终使用哪个上下文来显示应用内消息。
初始化MBMessages带参数
您可以在初始化 MBMessages
插件时设置一些参数:
MBMessages messagesPlugin = MBMessages(
messagesDelay: 1,
automaticallyCheckMessagesAtStartup: true,
debug: false,
themeForMessage: (context, message) => MBInAppMessageTheme(),
onButtonPressed: (button) => _buttonPressed(button),
);
参数说明:
messagesDelay
: 消息获取后显示的时间间隔。automaticallyCheckMessagesAtStartup
: 是否在启动时自动检查消息,默认为true
。debug
: 如果设置为true
,则服务器返回的所有消息都会被显示;如果设置为false
,则每个安装的应用只会显示一次消息,默认为false
。themeForMessage
: 提供应用内消息的主题(颜色和字体)。onButtonPressed
: 当应用内消息按钮被按下时调用的回调。
样式化应用内消息
如果您想指定消息显示的字体和颜色,可以使用 themeForMessage
函数并提供特定消息的主题。对于每条消息,您可以指定以下属性:
backgroundColor
: 背景颜色titleStyle
: 消息标题的文本样式bodyStyle
: 消息正文的文本样式closeButtonColor
: 关闭按钮的颜色closeButtonBackgroundColor
: 关闭按钮的背景颜色button1BackgroundColor
: 第一个按钮的背景颜色button1TextStyle
: 第一个按钮的文本样式button2BackgroundColor
: 第二个按钮的背景颜色button2BorderColor
: 第二个按钮的边框颜色button2TextStyle
: 第二个按钮的文本样式
示例:
...
MBManager.shared.plugins = [
MBMessages(
themeForMessage: (message) => _themeForMessage(message),
),
];
...
MBInAppMessageTheme _themeForMessage(MBInAppMessage message) {
if (message.style == MBInAppMessageStyle.bannerTop) {
return MBInAppMessageTheme(
titleStyle: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.blue,
),
);
} else {
return MBInAppMessageTheme(
titleStyle: TextStyle(
fontWeight: FontWeight.normal,
color: Colors.red,
),
);
}
}
推送通知
通过此插件,您还可以管理 MBurger 的推送通知部分。这是一个围绕 MPush 构建的包装器,因此您应该参阅 MPush 文档 来理解概念并开始推送集成。为了使用 MBMessages
而不是 MPush
,您需要进行以下更改:
设置推送令牌:
MBMessages.pushToken = "YOUR_PUSH_TOKEN";
配置回调和 Android 原生接口:
MBMessages.configurePush(
onNotificationArrival: (notification) {
print("Notification arrived: $notification");
},
onNotificationTap: (notification) {
print("Notification tapped: $notification");
},
androidNotificationsSettings: MPAndroidNotificationsSettings(
channelId: 'messages_example',
channelName: 'mbmessages',
channelDescription: 'mbmessages',
icon: '@mipmap/icon_notif',
),
);
为了配置 Android 部分,您需要传递一个 MPAndroidNotificationsSettings
到配置部分,它有两个参数:
channelId
: 通道 IDchannelName
: 通道名称channelDescription
: 通道描述icon
: 通知默认图标,在示例应用程序中,图标位于 res 文件夹中作为 mipmap,因此地址为@mipmap/icon_notif
,如果是 drawable,则使用@drawable/icon_notif
。
请求令牌
要请求一个通知令牌,您需要执行以下操作:
- 设置一个回调,当令牌从 APNS/FCM 正确接收时会被调用:
MBMessages.onToken = (token) {
print("Token retrieved: $token");
}
- 使用 MPush 请求令牌:
MBMessages.requestToken();
注册到主题
一旦您有了通知令牌,您可以注册设备以接收推送通知并注册到主题:
MBMessages.onToken = (token) async {
print("Token received $token");
await MBMessages.registerDevice(token).catchError(
(error) => print(error),
);
await MBMessages.registerToTopic(MPTopic(code: 'Topic')).catchError(
(error) => print(error),
);
print('Registered');
};
主题是 MPTopic
类的实例,具有三个属性:
code
: 主题的 ID[可选]
title
: 在仪表板上显示的主题可读标题,如果不设置,则等于code
。[可选]
single
: 如果此主题代表单个设备或一组设备,默认为false
。
MBurger主题
MBurger 有两个默认主题,您应该使用它们以确保参与平台的正确功能:
MBMessages.projectPushTopic()
: 这个主题表示为此项目注册的所有设备。MBMessages.devicePushTopic()
: 这个主题表示当前设备。
await MBMessages.registerToTopics(
[
await MBMessages.projectPushTopic(),
await MBMessages.devicePushTopic(),
MPTopic(code: 'Topic'),
],
);
启动通知
如果应用程序是从通知启动的,您可以像这样检索通知的数据,如果没有从通知启动,则为 null
:
Map<String, dynamic> launchNotification = await MBMessages.launchNotification();
print(launchNotification);
消息指标
使用 MBMessages
可以收集有关用户和推送的通知信息,这些信息将在 MBurger 仪表板上显示。如前一节所述,为了使这些数据正常工作,您必须告诉 MBMessages
有一个推送到达。如果您没有看到正确的数据,请确保已正确遵循 MPush 文档中描述的设置步骤。
自动化
如果消息启用了自动化,它们将被忽略并由 MBAutomation SDK 管理。因此,请确保正确包含和配置自动化 SDK。
示例代码
import 'package:flutter/material.dart';
import 'package:mbmessages/mbmessages.dart';
import 'package:mburger/mburger.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
MBManager.shared.apiToken = 'YOUR_API_TOKEN';
MBManager.shared.plugins = [
MBMessages(
onButtonPressed: (button) {
debugPrint(button.toString());
},
),
];
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MBMessagesBuilder(
child: Scaffold(
appBar: AppBar(
title: const Text('MBMessages example app'),
),
body: Center(
child: TextButton(
child: const Text(
'Configure push notifications',
),
onPressed: () => _configurePushNotifications(),
),
),
),
),
);
}
Future<void> _configurePushNotifications() async {
MBMessages.pushToken = 'YOUR_PUSH_API_KEY';
MBMessages.onToken = (token) async {
debugPrint("Token received $token");
await MBMessages.registerDevice(token).catchError(
(error) => debugPrint(error),
);
await MBMessages.registerToTopics(
[
await MBMessages.projectPushTopic(),
await MBMessages.devicePushTopic(),
const MPTopic(code: 'Topic'),
],
).catchError(
(error) => debugPrint(error),
);
debugPrint('Registered');
};
MBMessages.configurePush(
onNotificationArrival: (notification) {
debugPrint("Notification arrived: $notification");
},
onNotificationTap: (notification) {
debugPrint("Notification tapped: $notification");
},
androidNotificationsSettings: const MPAndroidNotificationsSettings(
channelId: 'mpush_example',
channelName: 'mpush',
channelDescription: 'mpush',
icon: '@mipmap/icon_notif',
),
);
MBMessages.requestToken();
Map<String, dynamic>? launchNotification =
await MBMessages.launchNotification();
debugPrint(launchNotification.toString());
}
}
更多关于Flutter消息管理插件mbmessages的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter消息管理插件mbmessages的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用mbmessages
插件进行消息管理的代码案例。这个插件通常用于处理应用内的消息传递,例如聊天应用或通知系统。请注意,具体的使用方法可能会根据插件的版本和API的更新有所不同,因此请参考最新的官方文档进行适配。
首先,确保你已经在pubspec.yaml
文件中添加了mbmessages
依赖:
dependencies:
flutter:
sdk: flutter
mbmessages: ^latest_version # 请替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,让我们编写一个简单的Flutter应用,展示如何使用mbmessages
插件进行消息管理。
主应用代码(main.dart
)
import 'package:flutter/material.dart';
import 'package:mbmessages/mbmessages.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter mbmessages Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MessageScreen(),
);
}
}
class MessageScreen extends StatefulWidget {
@override
_MessageScreenState createState() => _MessageScreenState();
}
class _MessageScreenState extends State<MessageScreen> {
final MBMessagesController _messagesController = MBMessagesController();
@override
void initState() {
super.initState();
// 初始化消息列表,可以从服务器或本地数据库加载消息
_loadMessages();
// 监听新消息事件
_messagesController.onMessageReceived.listen((message) {
setState(() {
// 更新UI以显示新消息
print("New message received: ${message.text}");
});
});
}
@override
void dispose() {
_messagesController.dispose();
super.dispose();
}
void _loadMessages() {
// 假设这是从服务器或本地数据库加载的消息列表
List<MBMessage> initialMessages = [
MBMessage(text: "Hello, this is a test message!", sender: "UserA", timestamp: DateTime.now()),
MBMessage(text: "How are you?", sender: "UserB", timestamp: DateTime.now().subtract(Duration(minutes: 5))),
];
_messagesController.addMessages(initialMessages);
}
void _sendMessage() {
String text = "This is a new message!";
MBMessage newMessage = MBMessage(text: text, sender: "CurrentUser", timestamp: DateTime.now());
_messagesController.addMessage(newMessage);
// 发送消息到服务器(这里省略了实际的网络请求代码)
print("Message sent: $text");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Message Screen'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
Expanded(
child: MBMessagesView(
controller: _messagesController,
),
),
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Type a message',
),
onSubmitted: (String value) {
_sendMessage();
},
),
],
),
),
);
}
}
解释
- 依赖添加:在
pubspec.yaml
中添加mbmessages
依赖。 - 主应用结构:
MyApp
是一个简单的Flutter应用,它包含一个MaterialApp
和一个MessageScreen
作为首页。 - 消息控制器:
MBMessagesController
用于管理消息列表和监听新消息事件。 - 初始化消息:在
_loadMessages
方法中,我们假设从服务器或本地数据库加载了一些初始消息,并将它们添加到消息控制器中。 - 监听新消息:使用
_messagesController.onMessageReceived.listen
来监听新消息事件,并在接收到新消息时更新UI。 - 发送消息:
_sendMessage
方法创建一个新消息对象,将其添加到消息控制器中,并模拟发送消息到服务器(实际应用中需要添加网络请求代码)。 - UI展示:使用
MBMessagesView
来展示消息列表,并在底部添加一个TextField
用于输入新消息。
请注意,mbmessages
插件的具体API可能会有所不同,上述代码仅为示例,用于展示如何集成和使用该插件的基本功能。实际项目中,请根据插件的文档和API进行调整。