爱吃土豆丝的打工人

爱吃土豆丝的打工人

我们处在一个信息大爆炸的时代,各种通知鱼龙混杂,如何让用户快速识别不同的通知,提高应用活跃度?此时,自定义铃声的使用,就恰好解决用户和开发者共同的痛点。试想一下,收款类应用,推送铃声是一个金币哗啦啦的音乐;网课类应用,推送铃声是一个上课铃的音乐;视频类应用,推送铃声是用户关注的偶像声音等等。与众不同的铃声也许是让用户记住并喜欢上某个应用的一个好方法。本文通过简单易懂的场景,讲解如何在华为推送中使用自定义铃声,帮助开发者提高通知消息的曝光。

基本思路

设置华为推送通知的铃声,主要分为2个角度:
1. 设置华为推送渠道(服务与通讯)的默认铃声,如下图①适用于通知类型比较单一的App,开发成本低
2. 设置并使用自定义渠道的铃声,如下图②适用于包含多种不同类型通知的App,开发成本稍高

如何自定义Android推送提示音,让你的应用与众不同?-LMLPHP

详细开发步骤

一、 设置华为推送渠道(服务与通讯)的默认铃声
1. 受限说明:default_sound和sound字段需要EMUI 9.1.0版本(及以上),推送服务应用9.1.1版本(及以上)
Tips:打开设置-应用-应用管理,搜索“推送服务”即可查看应用版本信息

如何自定义Android推送提示音,让你的应用与众不同?-LMLPHP

2. 客户端配置
1)仅支持在应用的/res/raw路径下,放置需要使用的铃声;
2)支持的文件格式包括MP3、WAV、MPEG等。
举例:将待使用的bell.mp3文件放在/res/raw路径下。

如何自定义Android推送提示音,让你的应用与众不同?-LMLPHP

3. 服务端配置
1)构造普通下行消息请求
2)请求中,设置importance为NORMAL,即设置消息为服务与通讯类消息
3)请求中,设置default_sound为false,即设置使用sound自定义铃声
4)请求中,设置sound为客户端存储的自定义铃声。
举例:对于客户端bell.mp3文件,sound字段设置为“/raw/bell”

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "importance": "NORMAL",
                "title": "测试铃声",
                "body": "此通知使用自定义铃声bell",
                "click_action": {
                    "type": 3
                },
                "default_sound": false,
                "sound": "/raw/bell"
            }
        },
        "token": [
            "xxx"
        ]
    }
}

4. 效果展示

如何自定义Android推送提示音,让你的应用与众不同?-LMLPHP

二、设置并使用自定义渠道的铃声
受限说明:自定义通知渠道需要EMUI 10.0.0版本(及以上),推送服务应用10.0.0版本(及以上)
1. 客户端配置
1)准备铃声文件,放入/assets或/res/raw目录下
举例:将待使用的bell.mp3文件放在/res/raw路径下。
2)新建通知渠道(注意:通知渠道需要设置NotificationManager.IMPORTANCE_DEFAULT以上级别,才能设置铃声)
3)设置渠道铃声
举例:新建通知渠道test,并设置渠道铃声/res/raw/bell.mp3

createNotificationChannel("test", "自定义渠道1", NotificationManager.IMPORTANCE_DEFAULT);

    private String createNotificationChannel(String channelID, String channelNAME, int level) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            NotificationChannel channel = new NotificationChannel(channelID, channelNAME, level);
            channel.setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bell), Notification.AUDIO_ATTRIBUTES_DEFAULT);
            manager.createNotificationChannel(channel);
            return channelID;
        } else {
            return "";
        }
    }

2. 服务端配置
1)构造普通下行消息请求
2)请求中,设置importance为NORMAL,即设置消息为服务与通讯类消息
3)请求中,设置channel_id为客户端新建的渠道id,即指定消息要展示在哪个通知渠道上
举例:对于客户端新建的test渠道,channel_id字段设置为”test”

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "importance": "NORMAL",
                "title": "测试铃声",
                "body": "此通知使用客户端自建test渠道的铃声",
                "click_action": {
                    "type": 3
                },
                "channel_id": "test"
            }
        },
        "token": [
            "xxx"
        ]
    }
}

3. 效果展示

如何自定义Android推送提示音,让你的应用与众不同?-LMLPHP

更多注意事项
1. 应用通知设置中的铃声设置的优先级最高。即如果用户手动修改了渠道的通知铃声,则以用户的设定为准
2. 下行消息中各个字段对铃声的影响(不考虑消息智能分类)

push渠道状态(渠道是否已创建)

default_sound

sound

importanceEMUI 10.0.0版本及以上)

channel_id

铃声

任意

任意值

任意值

LOW

任意值

未创建

true

任意值

NORMAL

系统默认铃声

未创建

false

“/raw/bell”

NORMAL

bell.mp3

未创建

false

NORMAL

系统默认铃声

任意

任意值

任意值

NORMAL

“test”

test渠道铃声

已创建

任意值

任意值

NORMAL

原有渠道铃声,不会修改

已创建

任意值

任意值

NORMAL

“test”

原有test渠道铃声,不会修改

>>访问华为推送服务官网,了解更多相关内容
>>获取华为推送服务开发指导文档
>>华为HMS Core官方论坛
>>华为推送服务开源仓库地址:GitHubGitee

点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~

06-18 13:41