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

Android端动态换图标后OneSignal推送通知无法打开应用求助

问题分析

使用flutter_dynamic_icon_plus切换Android应用图标后,OneSignal推送通知无法唤起应用,核心原因是动态图标切换后,推送的Intent未正确匹配到可唤起的Activity,或是系统启动组件变化导致Intent传递异常。

解决方案

1. 给MainActivity添加自定义Intent Filter

在AndroidManifest.xml的MainActivity中新增专属Intent Filter,用于OneSignal推送唤起,确保无论图标状态如何,都能精准匹配到MainActivity:

<activity android:name=".MainActivity" 
          android:exported="true" 
          android:enabled="true" 
          android:launchMode="singleTop" 
          ...>
    <!-- 原有LAUNCHER过滤器保留 -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <!-- 新增推送唤起专用过滤器 -->
    <intent-filter>
        <action android:name="com.your_package_name.OPEN_FROM_NOTIFICATION"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

替换com.your_package_name为你的应用实际包名。

2. 配置OneSignal推送的Intent目标

  • 控制台推送:在OneSignal控制台推送的「Advanced」设置中,添加intent参数,值为intent://com.your_package_name.OPEN_FROM_NOTIFICATION#Intent;action=com.your_package_name.OPEN_FROM_NOTIFICATION;launchFlags=0x10000000;end
  • 代码推送:在Flutter端发送推送时指定自定义Action:
await OneSignal.Notifications.postNotification(OSCreateNotification(
  content: "测试推送内容",
  heading: "通知标题",
  additionalData: {
    "action": "com.your_package_name.OPEN_FROM_NOTIFICATION"
  },
));

3. 手动处理通知点击事件

在Flutter端监听OneSignal通知点击事件,强制唤起应用主页面,规避Intent匹配问题:

@override
void initState() {
  super.initState();
  OneSignal.initialize("YOUR_ONESIGNAL_APP_ID");
  // 监听通知点击
  OneSignal.Notifications.addClickListener((event) {
    if (mounted) {
      // 清空栈并跳转到主页面
      Navigator.pushAndRemoveUntil(
        context,
        MaterialPageRoute(builder: (context) => const MainScreen()),
        (route) => false,
      );
    }
  });
}

4. 确认动态图标切换后的Activity状态

确保flutter_dynamic_icon_plus仅修改activity-alias的enabled状态,不要禁用MainActivity本身(你的Manifest中MainActivity已设置android:enabled="true",保持此配置即可)。所有activity-alias的targetActivity必须正确指向.MainActivity,且exported="true"。

验证步骤
  1. 切换应用图标到任意非默认状态
  2. 发送OneSignal测试推送
  3. 点击通知,确认应用正常唤起并跳转到主页面

内容的提问来源于stack exchange,提问作者Muhammet Berktaş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:03:22