GCM推送自定义铃声异常:Cordova混合安卓APP无铃声仅振动
解决Cordova混合APP GCM推送铃声不生效问题
我之前也碰到过类似的Cordova推送铃声不触发的坑,折腾了好一阵子才捋顺,结合你的情况给你几个具体的排查和解决方向:
1. 先确认推送插件的通知渠道配置(Android O+必看)
从Android 8.0(API 26)开始,所有通知必须归属到通知渠道,渠道的铃声设置会直接覆盖推送 payload 里的 sound 参数。如果你的插件没有正确配置渠道,或者渠道没绑定铃声,就算payload里写对路径也没用。
如果你用的是主流的cordova-plugin-fcm-with-dependecy-updated插件,可以直接在config.xml里配置渠道铃声:
<plugin name="cordova-plugin-fcm-with-dependecy-updated" spec="^7.4.0"> <variable name="ANDROID_FCM_CHANNEL_ID" value="app_notifications"/> <variable name="ANDROID_FCM_CHANNEL_NAME" value="App Notifications"/> <variable name="ANDROID_FCM_CHANNEL_SOUND" value="notify"/> <!-- 这里只传文件名,不要带.mp3后缀 --> </plugin>
如果是自定义插件或者需要原生代码配置渠道,你可以在APP启动时创建渠道并绑定铃声:
// 原生Android代码示例,可放在Cordova的插件初始化逻辑里 NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); String channelId = "app_notifications"; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( channelId, "App Notifications", NotificationManager.IMPORTANCE_DEFAULT ); // 绑定raw目录下的铃声文件 Uri soundUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notify); AudioAttributes audioAttrs = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_NOTIFICATION) .build(); channel.setSound(soundUri, audioAttrs); notificationManager.createNotificationChannel(channel); }
2. 修正推送payload里的sound参数格式
你之前试的几个路径格式都不对,Android资源的正确URI格式应该是:
android.resource://[你的APP包名]/raw/notify
注意几个关键点:
- 必须替换
[你的APP包名]为实际的包名(比如com.yourcompany.yourapp) - 不需要带
.mp3后缀,Android会自动识别资源文件 - 文件名必须是全小写(Android资源文件名不允许大写字母)
所以你的PHP推送代码里,sound参数应该改成:
'sound' => "android.resource://com.yourcompany.yourapp/raw/notify"
3. 核对铃声文件的实际位置和命名
- 确认
notify.mp3确实放在res/raw目录下(注意是res/raw,不是www/res/raw,Cordova打包时会把res目录下的资源打包到APK的原生资源目录) - 文件名必须是
notify.mp3,不能有大写、空格或特殊字符(比如Notify.mp3或者notify sound.mp3都会导致资源找不到) - 可以解压APK文件,检查
res/raw目录下是否存在这个文件,确认打包时没有被遗漏
4. 检查系统层面的声音设置
有时候问题不在代码,而是设备设置:
- 确保设备的媒体音量不是静音(通知铃声走的是媒体音量通道)
- 进入设备的「设置-应用和通知-你的APP-通知」,确认对应的通知渠道铃声已开启,并且没有被设置为静音
按这几步排查下来,应该能解决铃声不响的问题。我当时就是因为没注意Android O的通知渠道要求,折腾了好久才发现问题所在。
内容的提问来源于stack exchange,提问作者asad
相关产品推荐
相关产品推荐

