如何实现自定义铃声
最近更新:2022-03-14
展开全部

如何实现自定义铃声

通知和自定义消息均支持自定义铃声,实现方式如下:

消息类型 实现方法 注意事项
通知
1. 客户端创建自定义渠道并设置自定义铃声。2. 服务端指定渠道 ID(channel_id)下发推送。
仅部分厂商通道支持自定义铃声,详情参考 支持通道说明
自定义消息
客户端收到自定义消息回调后,自行处理响铃逻辑。 自定义消息回调依赖极光推送长链接,App 必须在线才可以收到自定义消息,否则无法处理播报逻辑。

支持通道说明

消息类型
通道
备注
通知
  • 极光通道
  • FCM 通道
  • 一加的 OPPO 通道
  • 小米通道
  • 华为通道(海外地区)
  • 小米需要在小米官网上申请并创建。
  • 华为仅海外地区支持 channel id。
  • 其他通道直接创建带有自定义铃声的 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); } } }
              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 可选 android 通知 channel_id 不超过 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" } } }
              {
        "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" } } }
              {
        "notification": {
            "android": {
                "alert": "你好!xiaomi",
                "title": "你有一个快递信息",
                "channel_id": "MyChannelId"
            }
        }
    }
    
            
    此代码块在浮窗中显示

    华为通道通知实现

    根据消息内容,华为推送将通知分类为服务与通讯、资讯营销两大类别,并对不同类别消息的提醒方式、消息样式进行差异化管理,具体如下:

    消息类型 服务与通讯 资讯营销
    推送内容 包括社交通讯类消息和服务提醒类消息。 包括资讯类消息和营销类消息,指的是运营人员向用户发送的活动信息、内容推荐、资讯等。
    提醒方式(EMUI 10.0 及以上) 锁屏、铃声、振动 静默通知,仅在下拉通知栏展示消息
    消息样式 文本 + 小图 仅有文本
    配置方式 需要向华为申请自分类权益,审核通过后将信任开发者提供的分类信息,消息不经过智能分类。 默认

    注意:2021 年 11 月开始,若您在华为官网申请的应用数据处理位置为中国区时,channel_id 字段无效,所以华为通道仅海外地区可以使用 channel_id 来实自定义铃声。

    • 自定义渠道功能不再适用于 数据处理位置 为中国区的应用,您的推送消息将按照智能分类系统或消息自分类权益确认的消息级别,归类为 服务与通讯类资讯营销类 消息。
    • 静默通知指的是消息到达终端没有震动、铃声、状态栏图标、弹窗和锁屏,只展示在下拉通知栏界面。
    • 用户终端上对应渠道的开关控制和提醒方式决定消息最终提醒方式。

    客户端设置

    若您在华为官网申请的应用数据处理位置为非中国区时,可以使用自定义渠道去设置自定义铃声,详情参考 创建自定义渠道

    华为自分类权益申请

    自分类申请详情参见 华为消息分类管理方案

    • 若应用没有自分类权益,则应用的推送消息将通过智能分类进行自动归类。
    • 若应用有自分类权益,将信任开发者提供的分类信息,消息不经过智能分类。

    服务端设置

    消息分类的申请审核通过后,即可指定 importance 进行下发,该参数在 options 可选参数的 third_party_channel 字段下。

    关键字 类型 选项 含义 说明
    importance string 可选 华为通知栏消息智能分类
  • 取值为 "LOW" 时,表示消息为资讯营销。
  • 取值为 "NORMAL" 时,表示消息为服务与通讯。
  • { "platform": "all", "audience": { "registration_id": ["1104a8979278ae64e75"] }, "notification": { "android": { "alert": "message alert", "channel_id": "自定义 channel id" } }, "options": { "third_party_channel": { "huawei": {"importance": "NORMAL"} } } }
              {
        "platform": "all",
        "audience": {
            "registration_id": ["1104a8979278ae64e75"]
        },
        "notification": {
            "android": {
                "alert": "message alert",
                "channel_id": "自定义 channel id"
            }
        },
        "options": {
            "third_party_channel": {
                "huawei": {"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); // 在此回调中处理播报 }
              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);
            // 在此回调中处理播报
    
      }
    
            
    此代码块在浮窗中显示
    文档内容是否对您有帮助?

    Copyright 2011-2022, jiguang.cn, All Rights Reserved. 粤ICP备12056275号-13 深圳市和讯华谷信息技术有限公司

    在文档中心打开