升级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要求,同时兼容性更稳定):
- 卸载旧插件:
cordova plugin remove onesignal-cordova-plugin - 安装2.15.3版本:
cordova plugin add onesignal-cordova-plugin@2.15.3 - 重新构建项目,验证插件功能和Play Store审核状态
内容的提问来源于stack exchange,提问作者HorribleNightDev
相关产品推荐
相关产品推荐

