Flutter华为推送服务插件hua_wei_push_plugin的使用

Flutter华为推送服务插件hua_wei_push_plugin的使用

华为推送SDK Flutter插件
华为Push版本: v5.0.0.300

讨论群


点击加入群聊

使用要求

Flutter Version >= 1.12
如果非华为手机测试,则必须在手机上安装华为移动服务(HMS Core),否则会报Failed to find HMS apk错误。如果华为移动服务版本过低或权限不足(建议授予所有权限),会报client api invalid错误。

配置

Flutter

hua_wei_push_plugin: ^[最新版本号]

Android

  1. 生成证书,并前往华为开发者中心 [项目-应用] 中配置SHA256证书指纹。

  2. 修改android\app\build.gradle文件,在末尾加入:

    + apply plugin: 'com.huawei.agconnect'
    

    增加证书信息,例:

    android {
       
    +   signingConfigs {
    +       config {
    +           storeFile file('android.keystore')
    +           storePassword '123456'
    +           keyAlias 'android_test_key'
    +           keyPassword '123456'
    +           v1SigningEnabled true
    +           v2SigningEnabled true
    +       }
    +   }
       
        buildTypes {
    +       debug {
    +           signingConfig signingConfigs.config
    +       }
    +       release {
    +           // Signing with the debug keys for now, so `flutter run --release` works.
    +           signingConfig signingConfigs.config
    +       }
        }
    }
    
  3. 修改android\build.gradle文件:

    buildscript {
        repositories {
            google()
            jcenter()
    +       maven {url 'https://developer.huawei.com/repo/'}
        }
       
        dependencies {
    +       classpath 'com.huawei.agconnect:agcp:1.2.1.301'
        }
    }
    
  4. 前往华为开发者中心 [项目-应用] 下载agconnect-services.json

  5. agconnect-services.json放在android/app目录。

使用

接口

接口 说明 参数
getToken 获得Push Token { appId: APP_ID }
deleteToken 删除 Push Token { appId: APP_ID }
getId 获得ID -
getAAID 获得AAID -
deleteAAID 删除AAID -
getAppId 获得AppId -
getCreationTime 获得创建时间 -
getValue 获得agconnect-services.json文件的值,不同层级以 / 分开,例如 : client/package_name String key
turnOnPush 启用推送 -
turnOffPush 关闭推送 -
subscribe 订阅 String topic
unsubscribe 取消订阅 String topic
setAutoInitEnabled 设置自动初始化 bool enabled
isAutoInitEnabled 是否启用自动初始化 -

监听器

添加监听器:HuaWeiPushPlugin.addListener,移除监听器:HuaWeiPushPlugin.removeListener
监听器方法原形: typedef ListenerValue<P> = void Function(HuaWeiPushListenerTypeEnum type, P params);

类型 说明 参数格式
MessageReceived 接收透传消息 Map
MessageSent 发送上行消息成功回调方法 String
MessageDelivered 发送上行消息时如果使用了消息回执能力,消息到达App服务器后,App服务器的应答消息通过本方法回调给应用。 MessageExceptionEntity
SendError 发送上行消息失败回调方法 MessageExceptionEntity
NewToken 服务端更新token回调方法。 String
TokenError 申请token失败回调方法。 ExceptionEntity

示例代码

import 'package:flutter/material.dart';
import 'package:hua_wei_push_plugin/hua_wei_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, VoidCallback> methods = {};

  [@override](/user/override)
  void initState() {
    super.initState();
    HuaWeiPushPlugin.addListener((type, params) {
      controller.text = controller.text + "\n" + "收到监听器:$type,值为:$params";
    });

    this.methods = {
      "getToken": () async =>
          controller.text = await HuaWeiPushPlugin.getToken(),
      "deleteToken": () async {
        await HuaWeiPushPlugin.deleteToken();
        controller.text = "删除成功!";
      },
      "getId": () async => controller.text = await HuaWeiPushPlugin.getId(),
      "getAAID": () async => controller.text = await HuaWeiPushPlugin.getAAID(),
      "deleteAAID": () async {
        await HuaWeiPushPlugin.deleteAAID();
        controller.text = "删除成功!";
      },
      "getAppId": () async =>
          controller.text = await HuaWeiPushPlugin.getAppId(),
      "getCreationTime": () async =>
          controller.text = "${await HuaWeiPushPlugin.getCreationTime()}",
      "getValue(client/package_name)": () async => controller.text =
          "${await HuaWeiPushPlugin.getValue("client/package_name")}",
      "turnOnPush": () async =>
          controller.text = "${await HuaWeiPushPlugin.turnOnPush()}",
      "turnOffPush": () async =>
          controller.text = "${await HuaWeiPushPlugin.turnOffPush()}",
      "subscribe(123)": () async =>
          controller.text = "${await HuaWeiPushPlugin.subscribe("123")}",
      "unsubscribe(123)": () async =>
          controller.text = "${await HuaWeiPushPlugin.unsubscribe("123")}",
      "setAutoInitEnabled(true)": () async {
        await HuaWeiPushPlugin.setAutoInitEnabled(true);
        controller.text = "启用成功";
      },
      "setAutoInitEnabled(false)": () async {
        await HuaWeiPushPlugin.setAutoInitEnabled(false);
        controller.text = "关闭成功";
      },
      "isAutoInitEnabled": () async =>
          controller.text = "${await HuaWeiPushPlugin.isAutoInitEnabled()}",
    };
  }

  [@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],
                          child: Text(key),
                        ),
                      )
                      .toList(),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用华为推送服务插件 hua_wei_push_plugin 的一个示例代码案例。这个示例将展示如何配置插件、获取设备Token以及处理推送消息。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  hua_wei_push_plugin: ^最新版本号  # 请替换为实际可用的最新版本号

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

2. 配置 Android 项目

2.1. 在 android/app/build.gradle 中添加以下内容:

android {
    ...
    defaultConfig {
        ...
        applicationId "com.example.yourapp"  // 请替换为你的应用ID
        ...
        manifestPlaceholders = [
                'app_channel' : 'your_channel'  // 可选,用于区分不同的发布渠道
        ]
    }
    ...
}

dependencies {
    ...
    implementation 'com.huawei.hms:push:版本号'  // 请替换为实际的HMS Push SDK版本号
}

2.2. 在 android/app/src/main/AndroidManifest.xml 中添加必要的权限和配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <application
        ... >
        
        <!-- 华为推送服务所需权限 -->
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>

        <!-- 华为推送服务接收器 -->
        <receiver android:name="com.huawei.hms.support.api.push.service.PushReceiver"
            android:permission="com.huawei.permission.EXTERNAL_APP">
            <intent-filter>
                <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
            </intent-filter>
        </receiver>

        <!-- 其他必要的配置 -->
        <meta-data
            android:name="com.huawei.hms.client.appid"
            android:value="你的华为App ID"/>  <!-- 请替换为你的实际华为App ID -->
    </application>
</manifest>

3. 配置 iOS 项目(如果需要)

虽然华为推送服务主要针对Android设备,但如果你需要在iOS上进行集成,可以参考插件的官方文档进行额外配置。这里主要关注Android集成。

4. 初始化插件并获取设备Token

在你的 Dart 代码中,初始化插件并获取设备Token:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? deviceToken;

  @override
  void initState() {
    super.initState();
    _initHuaWeiPush();
  }

  Future<void> _initHuaWeiPush() async {
    try {
      // 初始化华为推送服务
      await HuaWeiPushPlugin.init();

      // 获取设备Token
      deviceToken = await HuaWeiPushPlugin.getToken();
      print("Device Token: $deviceToken");

      // 设置消息点击事件监听器
      HuaWeiPushPlugin.onMessageClicked.listen((message) {
        print("Message clicked: $message");
      });

      // 设置令牌刷新事件监听器
      HuaWeiPushPlugin.onTokenRefresh.listen((newToken) {
        print("Token refreshed: $newToken");
      });

    } catch (e) {
      print("Error initializing Huawei Push: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Huawei Push Demo'),
        ),
        body: Center(
          child: Text('Device Token: $deviceToken\n'),
        ),
      ),
    );
  }
}

5. 发送推送消息

要在服务器端发送推送消息,你需要使用华为开发者控制台或华为推送服务的REST API。这部分内容超出了Flutter客户端代码的范畴,但你可以在华为开发者文档中找到详细的指南。

结论

以上代码展示了如何在Flutter项目中集成华为推送服务插件 hua_wei_push_plugin,包括配置项目、初始化插件、获取设备Token以及处理推送消息。请确保你已经注册了华为开发者账号并创建了应用,获取了必要的App ID和配置信息。

回到顶部