Cordova迁移Capacitor后Android端浮动通知默认禁用问题求助
问题成因
这个差异本质是两个插件对Android通知渠道的默认配置不同,和「应用能不能修改系统设置」完全无关:
- Android 8.0(API 26)及以上系统中,所有通知都必须绑定专属的通知渠道,浮动通知(横幅通知)的开关是绑定到单个通知渠道的属性,应用可以在首次创建渠道的时候自定义默认值,这个是系统允许的开放能力,不属于修改系统全局设置。
- cordova-plugin-firebasex在创建默认通知渠道时,默认将
importance参数设置为IMPORTANCE_HIGH(对应数值4),这个优先级的通知默认允许弹出浮动横幅,对应开关默认处于启用状态。 - Capacitor官方Push Notifications插件创建默认渠道时,默认
importance参数为IMPORTANCE_DEFAULT(对应数值3),这个优先级的通知默认仅在通知栏展示,不会弹出浮动横幅,对应开关默认禁用。
解决方法
你只需要在应用初始化推送逻辑的阶段,主动创建自定义通知渠道,指定高优先级即可,步骤如下:
- 在前端推送初始化代码中调用创建渠道的API,参考代码:
import { PushNotifications } from '@capacitor/push-notifications'; // 应用启动、请求通知权限后执行 const initCustomChannel = async () => { await PushNotifications.createChannel({ id: 'fcm_default_channel', // 需和后端发推送时指定的android_channel_id保持一致,无特殊配置用默认值即可 name: '消息通知', description: '应用推送消息展示渠道', importance: 4, // 高优先级,默认开启浮动通知 sound: 'default', vibration: true }); };
- 注意:通知渠道一旦创建成功,后续修改配置不会覆盖已有的系统记录,测试时可以卸载重装应用,线上发布如果不想影响老用户,可以换一个新的渠道ID。
为什么Cordova插件可以实现默认启用
它并没有突破系统限制,只是在首次创建默认通知渠道的时候,主动设置了高优先级的默认值,和上面给出的解决方法逻辑完全一致。
内容的提问来源于stack exchange,提问作者E.ws
相关产品推荐
相关产品推荐

