如何使用RN Firebase推送通知实现应用前台收新通知时触发声音提醒
前台状态推送无提示音问题解决方案
核心原因
移动端操作系统(Android、iOS)默认策略中,仅当应用处于后台、被杀死状态时,系统会直接读取推送服务端配置的声音等属性,自动触发通知提示音、横幅等展示行为;应用处于前台活跃状态时,推送会直接回调到应用内部处理,不会走系统默认通知触发逻辑,因此服务端配置的声音属性无法自动生效。
Android 端适配方案
- 确认你所使用的推送服务(FCM、各厂商系统推送等)的前台消息回调方法,所有前台状态下收到的推送都会进入该自定义回调,不会自动创建系统通知
- 在回调方法中主动创建通知,并手动指定和服务端配置一致的声音属性,Android 8.0及以上版本需提前创建对应通知渠道,示例代码如下:
// 获取系统默认通知声音,也可替换为自定义声音资源Uri val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) val notification = NotificationCompat.Builder(context, YOUR_CHANNEL_ID) .setContentTitle(notificationTitle) .setContentText(notificationContent) .setSound(soundUri) // 显式设置通知声音 .setPriority(NotificationCompat.PRIORITY_HIGH) .build() - 部分厂商系统推送默认会拦截前台应用的通知提示,需检查厂商开放平台的推送配置,开启前台通知提示权限。
iOS 端适配方案
- iOS默认前台状态收到APNs推送不会触发系统提示,需要在AppDelegate中实现前台通知回调方法
- 在回调中显式指定需要触发的提示类型,包含声音即可,示例代码如下:
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { // 按需配置前台展示效果,可同时开启声音、横幅、角标 completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionBanner); } - 提前确认应用已获得通知声音权限,避免权限限制导致声音无法播放。
注意:可根据产品需求增加场景判断,若不需要用户在应用内操作时被提示音打扰,可在触发上述逻辑前增加用户操作场景校验,按需播放声音。
内容的提问来源于stack exchange,提问作者Jayesh Patil
相关产品推荐
相关产品推荐

