Flutter华为Push插件新版本无法捕获远程通知点击事件
解决华为Push Kit Flutter插件远程通知点击事件捕获问题
1. 先确认插件版本
把pubspec.yaml里的huawei_push升级到官方最新稳定版,旧版本可能存在远程通知点击回调未触发的兼容性问题。
2. 正确注册远程通知点击回调
在Flutter初始化逻辑里(比如main.dart的initState方法),注册插件内置的onNotificationOpenedApp监听,这个回调专门处理远程通知的点击事件:
@override void initState() { super.initState(); _initPushService(); } void _initPushService() async { // 初始化Push服务 await PushService.init(); // 监听远程通知点击事件 PushService.onNotificationOpenedApp.listen((RemoteMessage message) { // 从message中提取data参数 if (message.data.isNotEmpty) { // 处理你payload里的data格式:原payload中data是单引号包裹的字符串,需转成标准JSON格式解析 String rawData = message.data['data']; Map<String, dynamic> parsedData = jsonDecode(rawData.replaceAll("'", "\"")); String deepLink = parsedData['deepLink']; // 这里写你的DeepLink业务逻辑 print('点击通知获取到DeepLink: $deepLink'); } }); }
3. 优化推送Payload配置
你的现有payload有两处可调整的地方:
- data字段格式:建议直接用JSON对象而非字符串,避免额外的解析步骤,修改后payload示例:
{ "message":{ "data":{ "deepLink": "https://google.com" }, "token":[ "<你的设备Token>" ], "android":{ "notification":{ "title":"测试标题", "body":"测试内容", "click_action": { "type": 3 }, "foreground_show": false } } } }
- click_action配置:
type=3表示通知点击后打开应用内页面,这个配置是触发onNotificationOpenedApp回调的前提,无需额外配置Intent。
4. 基础配置排查
- 确认
AndroidManifest.xml中已包含官方示例默认的HuaweiPushActivity配置,不要自定义NotificationClickListener覆盖插件默认逻辑 - 升级测试设备(华为P8 Lite)上的华为服务到最新版本,旧版本服务可能存在推送逻辑兼容问题
额外测试建议
分别测试应用在前台、后台、完全杀死三种状态下的通知点击行为,确保回调在所有场景下都能触发。
内容的提问来源于stack exchange,提问作者Alex Usmanov
相关产品推荐
相关产品推荐

