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

升级API 31后Play Store上传遇android:exported问题及OneSignal插件异常求助

问题:升级Target API 31后OneSignal插件兼容与Play Store审核冲突

问题背景

  • 原应用Target API 30上传Play Store无问题,升级到API 31后因缺少android:exported属性被拒
  • 手动给自身AndroidManifest.xml中所有带<intent-filter>的组件添加android:exported后,仍被拒,排查发现是OneSignal 2.11.3旧版本插件未适配API 31,其内部生成的组件未声明该属性
  • 升级OneSignal到3.1.0后,Play Store审核通过,但调试时插件报错plugin_not_installed,无法正常使用

已尝试操作

  • 在this.platform.ready()之后调用插件方法
  • 重新安装Android平台
  • 卸载并重新安装OneSignal插件
  • 删除node_modules、platforms、plugins、www文件夹,执行npm i后重新构建

解决方案

方案1:修复旧版OneSignal 2.11.3的android:exported问题(无需升级插件)

旧版OneSignal插件的内部组件(如通知相关的BroadcastReceiver)带有<intent-filter>但未声明android:exported,可通过在项目的AndroidManifest.xml中添加合并规则补全:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
    <application ...>
        <!-- 补全OneSignal NotificationOpenedReceiver的exported属性 -->
        <receiver
            android:name="com.onesignal.NotificationOpenedReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="com.onesignal.NotificationOpened" />
            </intent-filter>
        </receiver>

        <!-- 补全OneSignal NotificationReceivedReceiver的exported属性 -->
        <receiver
            android:name="com.onesignal.NotificationReceivedReceiver"
            android:exported="false" />

        <!-- 补全OneSignal BootUpReceiver的exported属性 -->
        <receiver
            android:name="com.onesignal.BootUpReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

添加后重新构建项目,即可满足API 31的审核要求,同时保留旧版插件功能。

方案2:解决OneSignal 3.1.0的plugin_not_installed报错

若坚持使用新版插件,按以下步骤排查:

  • 检查config.xml中的插件配置,确保参数正确:
<plugin name="onesignal-cordova-plugin" spec="3.1.0">
    <variable name="ONESIGNAL_APP_ID" value="你的OneSignal App ID" />
    <variable name="ONESIGNAL_GOOGLE_PROJECT_NUMBER" value="你的Google项目编号" />
</plugin>
  • 确认插件已正确安装:执行cordova plugin list,查看列表中是否存在onesignal-cordova-plugin 3.1.0
  • 升级cordova-android版本:API 31需要cordova-android@10.x及以上支持,执行cordova platform update android@10.1.1升级
  • 改用真机调试:部分Android模拟器可能存在插件加载异常,优先使用真机测试
  • 排查插件冲突:暂时禁用其他第三方插件,逐一验证是否存在与OneSignal 3.1.0冲突的插件

方案3:使用兼容API 31的OneSignal中间版本

如果3.1.0兼容性问题无法解决,可尝试2.15.x版本(该版本已适配API 31的android:exported要求,同时兼容性更稳定):

  1. 卸载旧插件:cordova plugin remove onesignal-cordova-plugin
  2. 安装2.15.3版本:cordova plugin add onesignal-cordova-plugin@2.15.3
  3. 重新构建项目,验证插件功能和Play Store审核状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:54:28