Android设备重启后OneSignal推送通知无法接收的解决方案问询
解决方案
安卓端适配(问题大多出在安卓系统)
- 首先升级OneSignal SDK到4.x及以上正式版本,新版SDK已经内置了开机广播监听逻辑,设备重启后会自动在后台重新完成推送注册,无需额外开发,也不会启动应用前台界面,用户完全无感知。
- 如果因为项目原因无法升级SDK,需要手动添加权限和广播接收器:
- 在
AndroidManifest.xml中添加开机接收权限:<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> - 注册开机广播接收器,收到广播后在后台直接初始化OneSignal,完成推送token的重新注册,全程不需要启动应用的Activity。
- 在
- 国内定制ROM适配:小米、华为、vivo、OPPO等国内系统默认会禁用第三方应用的自启权限,即使注册了开机广播也无法被触发,需要在应用首次启动时弹窗引导用户手动开启「自启动权限」和「后台活动权限」,该限制为ROM层面的安全策略,无通用绕过方案。
iOS端适配
iOS系统本身不允许第三方应用监听开机事件,正常情况下系统级的APNs推送通道会独立维护路由,设备重启后不需要应用启动就能正常收到推送。如果出现重启后收不到的情况,按以下步骤排查:
- 确认已经正确配置OneSignal的通知服务扩展,推送证书没有过期
- 确认用户没有关闭应用的「允许通知」和「后台App刷新」权限
- iOS设备重启后首次解锁前,系统会临时拦截所有第三方应用推送,属于系统安全机制,为正常情况
通用注意事项
- 不需要采用开机自启应用再关闭的方案,该方案会被很多系统和应用商店判定为恶意行为,容易触发下架风险
- 确认服务端推送配置的TTL(存活时间)合理,如果推送的时效性设置过短,设备开机时通知已经过期,自然无法收到,OneSignal后台可配置默认的通知存活时长,重要通知建议设置为至少24小时。
内容的提问来源于stack exchange,提问作者ElonMuskofBadIdeas
相关产品推荐
相关产品推荐

