极光消息推送如何实现自定义铃声?
通知和自定义消息均支持自定义铃声,实现方式如下:
消息类型 | 实现方法 | 注意事项 |
---|---|---|
通知 | 1. 客户端创建自定义渠道并设置自定义铃声。2. 服务端指定渠道 ID(channel_id)下发推送。 | 仅部分厂商通道支持自定义铃声,详情参考 支持通道说明。 |
自定义消息 | 客户端收到自定义消息回调后,自行处理响铃逻辑。 | 自定义消息回调依赖极光推送长链接,App 必须在线才可以收到自定义消息,否则无法处理播报逻辑。 |
支持通道说明
消息类型 | 通道 | 备注 |
---|---|---|
通知 | 极光通道FCM 通道一加的 OPPO 通道小米通道华为通道 | 小米需要在小米官网上申请并创建。华为仅 数据处理位置 在海外地区支持 channel id,中国区需下发华为的 sound 和 default_sound 字段设置自定义铃声。其他通道直接创建带有自定义铃声的 channel,推送时带 channel_id 进行下发。 |
自定义消息 | 极光通道小米通道华为通道 | 自定义消息回调依赖极光推送长链接,App 必须在线才可以收到自定义消息。 |
从 Android 8.1(API 级别 27)开始,应用程序每秒不能多次发出通知声音。如果您的应用在一秒钟内发布多个通知,它们都会按预期显示,但每秒只有第一个通知发出声音。
极光/OPPO/FCM 通道通知实现
客户端设置
1.在项目工程 src/main/res/raw 下放入声音文件,这个文件对应服务端指定的 sound 字段(适配 8.0 以下系统)。
2.创建 channel 并设置 sound,详情参考 NotificationChannel 配置。
private void initChannel(){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (nm != null){NotificationChannelGroup notificationChannelGroup = new NotificationChannelGroup("MyGroupId", "自定义通知组");
nm.createNotificationChannelGroup(notificationChannelGroup);
NotificationChannel notificationChannel = new NotificationChannel("m_channel123", "自定义通知 1", NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setGroup("MyGroupId");
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);
notificationChannel.setSound(Uri.parse("android.resource:// 包名 /raw/ 铃声文件名称"), null);
nm.createNotificationChannel(notificationChannel);
}
}
}
服务端设置
推送时需要在 notification 下配置 sound 和 channel_id 字段,channel_id 需与客户端 创建的 channel 一致。
关键字 | 类型 | 选项 | 含义 | 说明 |
---|---|---|---|---|
sound | String | 可选 | 填写 Android 工程中 /res/raw/ 路径下铃声文件名称,无需文件名后缀 | 注意:针对 Android 8.0 以上,当传递了 channel_id 时,此属性不生效。 |
channel_id | String | 可选 | 通知栏消息分类 | 不超过 1000 字节,Android 8.0 开始可以进行 NotificationChannel 配置,这里根据 channel_id 来指定通知栏展示效果。 |
示例如下:
{
"notification": {
"android": {
"alert": "message alert",
"title": "title",
// 如果 sound 和 channel_id 都有传,那么会以 channel_id 的铃声为准
"sound": "coin",
"channel_id": "m_channel123"
}
}
}
小米通道通知实现
自 2021 年 5 月 20 日起,小米官方将消息分为重要级别和普通级别两大类。普通级别消息为运营消息,振动、响铃、呼吸灯、悬浮、锁屏效果均无;如有响铃、振动等需求,需要您申请和接入重要级别 channel,以便享受重要级别的权限。
申请渠道方法
1.以开发者账号登录 小米推送运营平台,单击“应用管理 – 通知类别”菜单。
2.在“通知类别”页面中单击“申请重要级别消息 Channel”,进入重要级别消息申请页面。
3.申请页面中默认展示“服务提醒”channel 的申请入口,如下图所示: 4.单击“服务提醒”操作栏中的“申请”,填写申请信息,单击“确认”提交申请。
5.特殊场景下,如果一个“服务提醒” channel 不能满足您的业务需要,您需要使用多个重要级别 channel 或者需要给不同的 channel 设置个性化的提醒效果,待“服务提醒” channel 的申请审核通过后变为“启用中”状态时,可点击“申请其他个性化重要级别消息 Channel”按钮申请其他 channel。
6.配置自定义铃声地址。配置放在 res/raw 目录下的铃声文件,不用加后缀,示例:android.resource://PACKAGENAME/raw/voice1
服务端处理
推送时在 notification 下指定 channel_id 字段进行下发。
{
"notification": {
"android": {
"alert": "你好!xiaomi",
"title": "你有一个快递信息",
"channel_id": "MyChannelId"
}
}
}
华为通道通知实现
根据消息内容,华为推送将通知分类为服务与通讯、资讯营销两大类别,并对不同类别消息的提醒方式、消息样式进行差异化管理,具体如下:
消息类型 | 服务与通讯 | 资讯营销 |
---|---|---|
推送内容 | 包括社交通讯类消息和服务提醒类消息。 | 包括资讯类消息和营销类消息,指的是运营人员向用户发送的活动信息、内容推荐、资讯等。 |
提醒方式(EMUI 10.0 及以上) | 锁屏、铃声、振动 | 静默通知,仅在下拉通知栏展示消息 |
消息样式 | 文本 + 小图 | 仅有文本 |
配置方式 | 需要向华为申请自分类权益,审核通过后将信任开发者提供的分类信息,消息不经过智能分类。 | 默认 |
注意:2021 年 11 月开始,若您在华为官网申请的应用数据处理位置为中国区时,channel_id 字段无效,所以华为通道仅海外地区可以使用 channel_id 来实自定义铃声。
- 自定义渠道功能不再适用于 数据处理位置 为中国区的应用,您的推送消息将按照智能分类系统或消息自分类权益确认的消息级别,归类为 服务与通讯类 或 资讯营销类 消息。
- 静默通知指的是消息到达终端没有震动、铃声、状态栏图标、弹窗和锁屏,只展示在下拉通知栏界面。
- 用户终端上对应渠道的开关控制和提醒方式决定消息最终提醒方式。
中国区设置
若您在华为官网申请的应用数据处理位置为中国区,可以通过服务端首次给应用推送 服务与通讯消息 时,携带 sound 和 default_sound 字段来实现自定义铃声,sound、 default_sound 和 importance 参数都在 option.third_party_channel.huawei 字段下。
注意:由于铃声是通知渠道的属性,因此铃声仅在首次创建渠道(设置 sound)有效,后续无法修改。
服务端设置
关键字 | 类型 | 选项 | 含义 | 说明 |
---|---|---|---|---|
sound | string | 可选 | 华为自定义铃声 | 铃声文件必须存放在应用的 /res/raw 路径下,例如“/res/raw/shake.mp3”,对应 sound 值参数为“/raw/shake”,无需后缀,支持的格式包括 MP3、WAV、MPEG 等。仅首次给应用推送服务与通讯消息时设置有效,需要配合 default_sound 一起使用。 |
default_sound | boolean | 可选 | 华为默认铃声控制开关 | 设置自定义铃声时与 sound 字段配合使用,且 default_sound 值设置为 false。注意:由于铃声是通知渠道的属性,因此自定义铃声仅在首次创建渠道(设置 sound)有效,后续无法修改。true:使用系统默认铃声。false:使用 sound 自定义铃声。 |
importance | string | 可选 | 华为通知栏消息智能分类 | 取值为 “LOW” 时,表示消息为资讯营销类型。取值为 “NORMAL” 时,表示消息为服务与通讯类型。 |
{
"platform": "all",
"audience": {
"registration_id": ["1104a8979278ae64e75"]
},
"notification": {
"android": {
"alert": "message alert"
}
},
"options": {
"third_party_channel": {
"huawei": {
"sound":"/raw/shake",
"default_sound":false,
"importance": "NORMAL"//表示消息为服务与通讯类型
}
}
}
}
海外地区设置
客户端设置
若您在华为官网申请的应用数据处理位置为非中国区时,可以使用自定义渠道去设置自定义铃声,客户端设置详情参考 创建自定义渠道。
华为自分类权益申请
创建渠道后,需要申请服务与通讯类型的通知,申请详情参见 华为消息分类管理方案。
- 若应用没有自分类权益,则应用的推送消息将通过智能分类进行自动归类。
- 若应用有自分类权益,将信任开发者提供的分类信息,消息不经过智能分类。
服务端设置
消息分类的申请审核通过后,即可在 options.third_party_channel.huawei 字段下指定 channel_id 和 importance 参数进行下发。
关键字 | 类型 | 选项 | 含义 | 说明 |
---|---|---|---|---|
channel_id | string | 可选 | 通知栏消息分类 | 不超过 1000 字节,Android 8.0 开始可以进行 NotificationChannel 配置,这里根据 channel_id 来指定通知栏展示效果。 |
importance | string | 可选 | 华为通知栏消息智能分类 | 取值为 “LOW” 时,表示消息为资讯营销。取值为 “NORMAL” 时,表示消息为服务与通讯。 |
{
"platform": "all",
"audience": {
"registration_id": ["1104a8979278ae64e75"]
},
"notification": {
"android": {
"alert": "message alert"
}
},
"options": {
"third_party_channel": {
"huawei": {
"channel_id": "自定义 channel id"
"importance": "NORMAL"//表示消息为服务与通讯类型
}
}
}
}
自定义消息实现
若需要动态播报自定义铃声,可下发自定义消息,客户端在自定义消息回调中自行处理播放逻辑。
import cn.jpush.android.service.JPushMessageReceiver;
public class PushMessageReceiver extends JPushMessageReceiver {
private static final String TAG = "PushMessageReceiver";
@Override
public void onMessage(Context context, CustomMessage customMessage) {Log.e(TAG,"[onMessage]"+customMessage);
// 在此回调中处理播报
}
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/15854/
部分内容来自网络投稿,如有侵权联系立删