You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成OneSignal与华为推送后用户未订阅问题求助

问题:Flutter集成OneSignal后华为设备提示用户未订阅(未清除应用数据)

在Flutter项目中完成OneSignal配置及华为应用市场相关设置后,出现用户未删除或清除应用数据,但系统仍提示用户未订阅的问题。当前调用OneSignal的代码如下:

await OneSignal.shared.setAppId('appid');

await OneSignal.shared
    .promptUserForPushNotificationPermission()
    .then((accepted) {
  // ignore: avoid_print
  print('accepted');
});

排查与解决步骤

  • 检查华为推送依赖服务状态
    华为设备的推送依赖HMS Core,先确认基础服务是否正常:

    1. 进入设备「设置 > 应用和服务 > 应用管理 > HMS Core」,检查应用是否启用、是否为最新版本
    2. 确认你的应用已获取「推送通知」权限,且未被系统限制后台活动(比如电池优化里设为“允许后台活动”)
  • 完善OneSignal订阅校验逻辑
    现有代码仅申请权限,未主动校验和恢复订阅状态。修改代码,在权限申请后主动检查订阅状态,异常时触发重新订阅:

    await OneSignal.shared.setAppId('appid');
    
    // 获取当前权限与订阅状态
    final state = await OneSignal.shared.getPermissionSubscriptionState();
    if (state.permissionStatus.hasPermission) {
      // 有权限但未订阅,尝试重新订阅
      if (!state.subscriptionStatus.subscribed) {
        await OneSignal.shared.subscribe();
      }
    } else {
      // 无权限则申请,申请成功后主动订阅
      final accepted = await OneSignal.shared.promptUserForPushNotificationPermission();
      if (accepted) {
        await OneSignal.shared.subscribe();
      }
    }
    
  • 核对华为开发者后台配置

    1. 确认华为开发者后台中,应用的「推送服务」已开启,OneSignal配置的App ID、华为推送的AppSecret等参数与项目完全一致
    2. 检查应用签名是否与华为后台配置的签名匹配——签名不匹配会导致订阅失败且无明显报错,可通过华为签名校验工具验证
  • 适配华为系统后台限制
    部分华为机型会在应用后台闲置时自动取消推送订阅,可做以下优化:

    • 引导用户将应用加入「后台保护」列表(路径:设置 > 电池 > 应用启动管理 > 找到你的应用 > 手动管理并允许后台活动)
    • 在应用每次启动时,调用getPermissionSubscriptionState()校验订阅状态,发现未订阅则立即触发重新订阅

内容的提问来源于stack exchange,提问作者Abdullah Ahmed ShekhMohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:55:24