Flutter小米推送服务插件xiao_mi_push_plugin的使用

Flutter小米推送服务插件xiao_mi_push_plugin的使用

xiao_mi_push_plugin

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

讨论群

[点击加入群聊](https://jq.qq.com/?_wv=1027&k=QxCWMlUf)

使用要求

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

1 回复

更多关于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中的回调将被触发。

注意事项

  1. 小米开发者账号:确保你已经在小米开发者平台注册并创建了应用,获取了AppIDAppKey
  2. 权限管理:在Android 6.0及以上版本中,动态申请所需权限可能是必要的。
  3. 测试推送:使用小米推送服务的控制台或API发送测试消息来验证集成是否成功。

这个示例代码展示了如何在Flutter项目中集成小米推送服务,并处理推送消息。根据你的具体需求,你可能需要调整代码以适应你的应用逻辑。

回到顶部