为什么收到了消息没有声音提醒?我该怎样自定义 App 的通知铃声?

一、收到通知消息没有声音提醒

1.1 设备检查

  1. 检查下手机-设置-通知栏-自己的 App-通知声音是否打开。
  2. 手机系统声音是否打开。

    1.2 系统检查

  3. iOS 10 系统以下,在前台收到消息时,是不会有声音提醒的,这是 iOS 系统规则。
  4. iOS 10 新增了前台展示 apns 通知,这个方法可以自主选择一下提醒的方式,但也同样受到手机系统设置的限制

null

  1. 注册 apns 代码时有提供提醒类型选择:
    entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;

    1.3 推送信息检查

  2. 检查推送消息时的 sound 字段的传值,不要将 sound 字段放在 extra 中。
  3. 如果不需要自定义声音,推送时,iOS 的 sound 值请保持默认(default),不要传空。

1.4 之前声音正常,某天无故消失

可能原因:

  • 你是否 Xcode 连接手机覆盖安装了 App?

  • 如果是第一次安装应用,应该是可以收到自定义声音的

  • 但是不卸载的情况下,Xcode 连接手机覆盖安装 App,就恢复默认了,这是 Xcode 的一个 Bug

1.5 语音播报相关

  1. 如果你实现了语音播报文字,没有成功播报,可能是通知栏的声音提示阻挡了语音播报文字的设置。
  2. iOS 10 开始提供了 service extension 功能,可以实现语音播报,参考:iOS,推送+后台语音播报,推送+程序杀死仍语音播报,看这一篇就够啦!

二、iOS 自定义声音

2.1 客户端设置

  1. 客户端需要在工程特定位置添加自定义声音的资源,详细说明阅读本帖

null

  1. Apple 要求自定义声音文件不超过 30 s。

2.2 服务端设置

设置声音&默认声音名称大全

声音文件的播放与横幅的展示时长有关(一般是会自动消失的),如果手机端选择「提醒」这个方式(不自动消失),应是可以播完声音

三、Android 自定义声音

338 版本以前,通知消息不支持和 iOS 一样自定义声音资源,只能自定义通知栏样式,设置系统声音或者关掉。

从 338 版本开始支持设置 sound,仅针对 Android 8.0 以上

  • 完全自己实现:

    • 推送自定义消息(只接收不展示)或者不展示的 Notification 消息(alert 为空,用附加字段传递信息)
      null
    • 自己在客户端对收到的自定义消息进行展示 ,同时去实现自定义声音
    • 示例:「 征文 」Jpush 自定义推送声音
  • 去掉极光 Notification 的默认声音展示,然后自己去实现声音提醒。

    • 使用自定义通知栏样式 175,可以简单控制下系统默认的声音,选择去掉默认的声音。
      • 注意客户端配置了通知栏样式后,setPushNotificationBuilder 会指定一个 ID 值,则你们 服务端推送时设置对应的 builder_id 来选择样式
      • 或者可以直接选择用 setDefaultPushNotificationBuilder 改变默认的编号为 0 的通知栏样式。
    • 还可以使用「设置通知静默时间 API」
  • 使用 Notification Channel

    • JPush Android SDK v3.3.4 开始支持,与 Android 8.0 原生功能一致
    • Android 文档
    • 推送消息时仍需服务端所传的字段控制:channel_id

如果对你有帮助,点个赞呗 ლ(╹◡╹ლ)

不吹不黑,关注「常见问题」专栏可以解决你 90% 的问题 (ノ◕ω◕)ノଘ_ଘ

如果还有你想知道的问题没有总结方案,来评论区跟我交流交流吖