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
-
生成证书,并前往华为开发者中心 [项目-应用] 中配置SHA256证书指纹。
-
修改
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 + } } }
-
修改
android\build.gradle
文件:buildscript { repositories { google() jcenter() + maven {url 'https://developer.huawei.com/repo/'} } dependencies { + classpath 'com.huawei.agconnect:agcp:1.2.1.301' } }
-
前往华为开发者中心 [项目-应用] 下载
agconnect-services.json
。 -
将
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
更多关于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和配置信息。