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

求助:OneSignal通知无法唤起已关闭应用,无日志报错

解决OneSignal推送点击通知无法唤起关闭状态应用的问题

Hey Kevin,我帮你梳理下几个最可能导致这个问题的原因和对应的排查步骤,你可以一步步核对:

1. 检查OneSignal初始化是否完整

从你贴的代码来看,你的OneSignalPushApplication类里只注释了日志设置,没有完成OneSignal的核心初始化步骤。这会导致应用关闭时,系统找不到OneSignal的回调处理逻辑,自然无法唤起应用。

你需要在onCreate()里补充完整的初始化代码:

@Override
public void onCreate() {
    super.onCreate();
    // 开启日志调试(发布正式版前记得关闭)
    OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.WARN);
    // 初始化OneSignal,替换成你自己的App ID
    OneSignal.initWithContext(this);
    OneSignal.setAppId("YOUR_ONESIGNAL_APP_ID");
}

一定要确保setAppId和initWithContext这两行代码都执行了,这是OneSignal正常工作的基础。

2. 核对AndroidManifest的配置是否正确

Manifest里的配置错误是这类问题的高发区,你需要检查以下几点:

  • 添加OneSignal的广播接收器:确保Manifest里有这个接收器,用来接收推送消息:
<receiver android:name="com.onesignal.GcmBroadcastReceiver"
          android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>
  • 确保主Activity能被唤起:给你的主启动Activity添加DEFAULT category,让系统能通过通知唤起它:
<activity android:name=".YourMainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- 必须添加这个category -->
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

另外,暂时把主Activity的launchMode改成standard(如果之前设置了singleInstance或singleTask),避免启动模式冲突导致无法唤起。

3. 检查推送Payload的配置

如果你是通过OneSignal控制台自定义推送,需要确保Payload里指定了正确的打开目标:

  • 在推送的Advanced > Additional Data里添加自定义字段,明确指定要打开的Activity:
{"activity": "com.yourpackage.YourMainActivity"}

如果没有指定,OneSignal会尝试打开Manifest里的默认启动Activity,但如果默认Activity配置有问题,就会失效。

4. 检查系统权限和后台限制

有时候系统层面的限制也会导致这个问题:

  • 确认应用的通知权限已经开启:去系统设置 > 应用 > 你的应用 > 权限,确保通知权限是允许状态。
  • 关闭应用的电池优化:系统的电池优化可能会阻止应用在关闭状态下被唤起,去设置 > 电池 > 电池优化,找到你的应用,设置为“不优化”。

5. 开启日志排查细节

你之前注释了日志代码,建议重新开启,然后测试关闭应用后的推送,查看Logcat里的OneSignal相关日志:

OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.WARN);

在Logcat里过滤标签OneSignal,查看有没有“Notification opened”的相关记录,或者有没有权限、初始化失败的异常信息,这些日志能帮你定位更细节的问题。

先从前面两点(初始化和Manifest配置)入手排查,这两个是最常见的原因,应该能解决你的问题。

内容的提问来源于stack exchange,提问作者Kevin Dias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:13:44