Flutter小米推送服务插件xiao_mi_push_plugin的使用
Flutter小米推送服务插件xiao_mi_push_plugin的使用
xiao_mi_push_plugin
小米推送SDK Flutter插件
小米Push版本: v3.7.6
测试时请使用真机测试,模拟器将会出现 code = 10017, msg= 参数值非法
异常
讨论群

使用要求
Flutter Version >= 1.12
如果出现 22022
错误,请确保已启用推送服务,启用步骤参考: https://support.rongcloud.cn/ks/NzE5
配置
混淆
无需额外配置,已内部打入混淆
权限
修改 AndroidManifest.xml
文件,增加
<permission android:name="你的包名.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="你的包名.permission.MIPUSH_RECEIVE"/>
使用
接口
接口 | 说明 | 参数 |
---|---|---|
init | 初始化 | { appId: APP_ID , appKey: APP_KEY } |
setAlias | 设置别名 | { alias: 别名, category: 分类 } |
unsetAlias | 撤销别名 | { alias: 别名, category: 分类 } |
getAllAlias | 获得所有别名 | - |
setUserAccount | 设置用户账户 | { userAccount: 账户, category: 分类 } |
unsetUserAccount | 撤销设置用户账户 | { userAccount: 账户, category: 分类 } |
getAllUserAccount | 获得所有账户 | - |
subscribe | 设置标签 | { topic: 标签, category: 分类 } |
unsubscribe | 撤销设置标签 | { topic: 标签, category: 分类 } |
getAllTopic | 获得所有标签 | - |
getRegId | 获取客户端的 RegId | - |
监听器
添加监听器: XiaoMiPushPlugin.addListener
,移除监听器: XiaoMiPushPlugin.removeListener
监听器方法原型: typedef ListenerValue<P> = void Function(XiaoMiPushListenerTypeEnum type, P params);
类型 | 说明 | 格式 |
---|---|---|
NotificationMessageClicked | 接收服务器推送的通知消息,用户点击后触发 | MiPushMessageEntity |
RequirePermissions | 当所需要的权限未获取到的时候会回调该接口 | List |
ReceivePassThroughMessage | 接收服务器推送的透传消息 | MiPushMessageEntity |
CommandResult | 获取给服务器发送命令的结果 | MiPushCommandMessageEntity |
ReceiveRegisterResult | 获取给服务器发送注册命令的结果 | MiPushCommandMessageEntity |
NotificationMessageArrived | 接收服务器推送的通知消息,消息到达客户端时触发,还可以接受应用在前台时不弹出通知的通知消息(在MIUI上,只有应用处于启动状态,或者自启动白名单中,才可以通过此方法接受到该消息) | MiPushMessageEntity |
其它插件
我同时维护的还有以下插件,如果您感兴趣与我一起进行维护,请通过Github联系我,欢迎 issues 和 PR。
平台 | 插件 | 描述 | 版本 |
---|---|---|---|
Flutter | FlutterVideoPlayerLibrary-Desc | Flutter 最好用的播放器(UI库) | - |
Flutter | FlutterPerfectVolumeControl | Flutter 完美的音量控制器插件 | |
Flutter | FlutterTencentImPlugin | 腾讯云IM插件 | |
Flutter | FlutterTencentRtcPlugin | 腾讯云Rtc插件 | |
Flutter | FlutterXiaoMiPushPlugin | 小米推送SDK插件 | |
Flutter | FlutterHuaWeiPushPlugin | 华为推送(HMS Push)插件 | |
Flutter | FlutterTextSpanField | 自定义文本样式输入框 | |
Flutter | FlutterClipboardListener | 粘贴板监听器 | |
Flutter | FlutterQiniucloudLivePlugin | Flutter 七牛云直播云插件 | 暂未发布,通过 git 集成 |
示例代码
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:xiao_mi_push_plugin/xiao_mi_push_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
TextEditingController controller = TextEditingController();
Map<String, Function> methods = {};
[@override](/user/override)
void initState() {
super.initState();
this.methods = {
"init": () => XiaoMiPushPlugin.init(
appId: "2882303761518406102", appKey: "5981840633102"),
"setAlias": () =>
XiaoMiPushPlugin.setAlias(alias: "test", category: "test"),
"unsetAlias": () =>
XiaoMiPushPlugin.unsetAlias(alias: "test", category: "test"),
"getAllAlias": () async =>
controller.text = jsonEncode(await XiaoMiPushPlugin.getAllAlias()),
"setUserAccount": () =>
XiaoMiPushPlugin.setUserAccount(userAccount: "test", category: "test"),
"unsetUserAccount": () =>
XiaoMiPushPlugin.unsetUserAccount(userAccount: "test", category: "test"),
"getAllUserAccount": () async =>
controller.text = jsonEncode(await XiaoMiPushPlugin.getAllUserAccount()),
"subscribe": () =>
XiaoMiPushPlugin.subscribe(topic: "test", category: "test"),
"unsubscribe": () =>
XiaoMiPushPlugin.unsubscribe(topic: "test", category: "test"),
"getAllTopic": () async =>
controller.text = jsonEncode(await XiaoMiPushPlugin.getAllTopic()),
"getRegId": () async =>
controller.text = "${(await (XiaoMiPushPlugin.getRegId())) ?? "失败"}",
};
XiaoMiPushPlugin.addListener(onXiaoMiPushListener);
}
[@override](/user/override)
void dispose() {
super.dispose();
XiaoMiPushPlugin.removeListener(onXiaoMiPushListener);
}
/// 小米推送监听器
onXiaoMiPushListener(type, params) {
controller.text = ""
"======================\n"
"Listener ${type.toString().split(".")[1]}:\n"
"--------------------------------------------\n"
"${jsonEncode(params)}\n"
"======================";
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
children: <Widget>[
TextField(
controller: controller,
maxLines: 10,
),
Expanded(
child: Wrap(
runSpacing: 10,
spacing: 10,
children: methods.keys
.map(
(key) => OutlinedButton(
onPressed: methods[key] as void Function()?,
child: Text(key),
),
)
.toList(),
),
),
],
),
),
),
);
}
}
更多关于Flutter小米推送服务插件xiao_mi_push_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter小米推送服务插件xiao_mi_push_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用xiao_mi_push_plugin
插件来集成小米推送服务的示例代码。这个示例将展示如何初始化插件、注册设备并处理推送消息。
首先,确保你已经在pubspec.yaml
文件中添加了xiao_mi_push_plugin
依赖:
dependencies:
flutter:
sdk: flutter
xiao_mi_push_plugin: ^最新版本号 # 替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
1. 配置Android项目
在android/app/src/main/AndroidManifest.xml
中,添加小米推送服务所需的权限和服务声明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- 其他配置 -->
<!-- 小米推送服务权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 小米推送服务声明 -->
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
</service>
<service
android:name="com.xiaomi.mipush.sdk.RegistrationIntentService"
android:enabled="true"
android:exported="false" />
<!-- 其他配置 -->
</manifest>
2. 初始化小米推送服务
在你的Flutter项目中,创建一个Dart文件(例如main.dart
)来初始化小米推送服务。
import 'package:flutter/material.dart';
import 'package:xiao_mi_push_plugin/xiao_mi_push_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
initXiaomiPush();
}
void initXiaomiPush() async {
// 替换为你的小米开发者账号的AppID和AppKey
String appId = '你的小米AppID';
String appKey = '你的小米AppKey';
String appSecret = '你的小米AppSecret'; // 通常用于获取token,这里示例中不一定需要
try {
await XiaoMiPushPlugin.init(appId, appKey);
print('小米推送服务初始化成功');
// 注册设备,通常这里会返回注册ID
XiaoMiPushPlugin.registerDevice().then((registrationId) {
print('设备注册成功,注册ID: $registrationId');
}).catchError((error) {
print('设备注册失败: $error');
});
// 设置推送消息接收回调
XiaoMiPushPlugin.setMessageHandler((message) {
print('收到小米推送消息: $message');
});
} catch (e) {
print('小米推送服务初始化失败: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('小米推送服务示例'),
),
body: Center(
child: Text('检查控制台输出以查看推送服务状态'),
),
),
);
}
}
3. 处理推送消息
在上面的代码中,我们已经设置了推送消息接收回调。当应用收到小米推送服务发送的消息时,XiaoMiPushPlugin.setMessageHandler
中的回调将被触发。
注意事项
- 小米开发者账号:确保你已经在小米开发者平台注册并创建了应用,获取了
AppID
和AppKey
。 - 权限管理:在Android 6.0及以上版本中,动态申请所需权限可能是必要的。
- 测试推送:使用小米推送服务的控制台或API发送测试消息来验证集成是否成功。
这个示例代码展示了如何在Flutter项目中集成小米推送服务,并处理推送消息。根据你的具体需求,你可能需要调整代码以适应你的应用逻辑。