Flutter+OneSignal动态调整通知渠道优先级失效问题排查
问题原因及解决方法
问题原因
- 你通过flutterLocalNotificationsPlugin动态修改通知渠道优先级,但OneSignal后台选择「Created in App」渠道发送通知时,只会读取该渠道在OneSignal后台存储的初始配置优先级(而非App内动态修改后的),如果这个初始优先级是默认级别,后台收到通知就不会显示横幅。
- 手动设置高优先级能正常显示,是因为手动指定的优先级会直接覆盖渠道的默认配置,不受渠道原有设置的限制。
解决方法
- 放弃App内动态修改渠道优先级的方式,改用OneSignal的通知拦截逻辑配合生命周期:
- 监听
didChangeAppLifecycleState,在App前台时,用OneSignal.setNotificationWillShowInForegroundHandler拦截通知,设置不显示横幅;后台时不做拦截,让通知按高优先级正常弹出横幅。
- 监听
- 在OneSignal后台把「sound」渠道的默认优先级设为高,然后在App前台收到通知时,通过flutterLocalNotificationsPlugin的回调隐藏横幅,后台则保持系统默认的高优先级显示。
- 切换到OneSignal后台创建的渠道,直接在后台管控渠道的优先级配置,再结合App内的生命周期逻辑调整通知的显示行为,避免「Created in App」渠道的配置不同步问题。
内容的提问来源于stack exchange,提问作者Suthura Sudharaka
相关产品推荐
相关产品推荐

