Android 8.0 以下系统
1. 定制的铃音资源文件,Android 添加到工程 raw 目录下,iOS 链接进 Xcode 工程。
2. 请您发送消息调用接口 setAndroidSound() 和 setIOSSound()。
V2TIMOfflinePushInfo v2TIMOfflinePushInfo = new V2TIMOfflinePushInfo();v2TIMOfflinePushInfo.setAndroidSound("铃音名称");v2TIMOfflinePushInfo.setIOSSound("铃音名称.mp3");String msgID = V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, isGroup ? null : userID, isGroup ? groupID : null,V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, v2TIMOfflinePushInfo, new V2TIMSendCallback<V2TIMMessage>() {@Overridepublic void onProgress(int progress) {}@Overridepublic void onError(int code, String desc) {}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {}});
注意:
IMSDK 6.1.2155 及以上版本支持。
接口支持华为、小米、FCM 和 APNS。
Android 8.0 及以上系统
华为 和 ANPS
OPPO
1. 将定制的铃音资源文件放在工程资源的 raw 目录下,然后通过以下方式创建通知 channel。
// 自定义创建示例if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager nm = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); NotificationChannel notificationChannel = new NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_HIGH); notificationChannel.enableLights(true); notificationChannel.enableVibration(true); notificationChannel.setShowBadge(true); notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); // "android.resource://包名/raw/private_ring" notificationChannel.setSound(Uri.parse("sound"), null); nm.createNotificationChannel(notificationChannel); }
2. 使用创建的 channel。
创建私信通道。
推送消息携带 channelID 字段,详情请参见 setAndroidOPPOChannelID,控制台设置见证书编辑 channelID 字段,两者设置一个即可。
小米
1. 登录厂商控制台 创建 channel 和配置,其中铃音文件需要添加到您本地 Android Studio 工程的 raw 目录下。
2. 发送消息指定自定义铃音的 channelID,详情请参见 setAndroidXiaoMiChannelID。
V2TIMOfflinePushInfo v2TIMOfflinePushInfo = new V2TIMOfflinePushInfo();v2TIMOfflinePushInfo.setAndroidXiaoMiChannelID("厂商申请的 channel ID");String msgID = V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, isGroup ? null : userID, isGroup ? groupID : null,V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, v2TIMOfflinePushInfo, new V2TIMSendCallback<V2TIMMessage>() {@Overridepublic void onProgress(int progress) {TUIChatUtils.callbackOnProgress(callBack, progress);}@Overridepublic void onError(int code, String desc) {TUIChatUtils.callbackOnError(callBack, TAG, code, desc);}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {}});
FCM
1. 将定制的铃音资源文件放在工程资源的 raw 目录下,然后通过以下方式创建通知 channel。
// 自定义创建示例if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager nm = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); NotificationChannel notificationChannel = new NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_HIGH); notificationChannel.enableLights(true); notificationChannel.enableVibration(true); notificationChannel.setShowBadge(true); notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); // "android.resource://包名/raw/private_ring" notificationChannel.setSound(Uri.parse("sound"), null); nm.createNotificationChannel(notificationChannel); }
2. 发送消息指定自定义铃音的 channelID,详情请参见 setAndroidFCMChannelID。
V2TIMOfflinePushInfo v2TIMOfflinePushInfo = new V2TIMOfflinePushInfo();v2TIMOfflinePushInfo.setAndroidFCMChannelID(PrivateConstants.fcmPushChannelId);String msgID = V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, isGroup ? null : userID, isGroup ? groupID : null,V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, v2TIMOfflinePushInfo, new V2TIMSendCallback<V2TIMMessage>() {@Overridepublic void onProgress(int progress) {TUIChatUtils.callbackOnProgress(callBack, progress);}@Overridepublic void onError(int code, String desc) {TUIChatUtils.callbackOnError(callBack, TAG, code, desc);}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {}});
注意:
IMSDK 7.0.3754 及以上版本支持。
FCM 自定义铃声或者设置 ChannnelID 仅支持证书模式。
1. 请在调用 sendMessage 发送消息的时候设置 V2TIMOfflinePushInfo 的 iOSSound 字段, iOSSound 传语音文件名。
说明:
离线推送声音设置(仅对 iOS 生效), 当 iOSSound = kIOSOfflinePushNoSound,表示接收时不会播放声音。
当 iOSSound = kIOSOfflinePushDefaultSound,表示接收时播放系统声音。
如果要自定义 iOSSound,需要先把语音文件链接进 Xcode 工程,然后把语音文件名(带后缀名)设置给 iOSSound。
iOS 自定义铃音长度不能超过 30s。
V2TIMOfflinePushInfo *pushInfo = [[V2TIMOfflinePushInfo alloc] init];pushInfo.title = @"push title";pushInfo.iOSSound = @"phone_ringing.mp3"; // your voice file's name[[V2TIMManager sharedInstance] sendMessage:msg receiver:receiver groupID:groupID priority:V2TIM_PRIORITY_DEFAULT onlineUserOnly:NO offlinePushInfo:pushInfo progress:nil succ:^{} fail:^(int code, NSString *msg) {}];
2. 请在调用 sendMessage 发送消息的时候设置 V2TIMOfflinePushInfo 的
AndroidSound
字段, AndroidSound
传语音文件名。说明:
离线推送声音设置(仅对 Android 生效, 仅 imsdk 6.1 及以上版本支持) 只有华为和谷歌手机支持设置铃音提示。
小米铃音设置请您参见:服务端 Java SDK 文档。
如果要自定义 AndroidSound,需要先把语音文件放到 Android 工程的 raw 目录中,然后把语音文件名(不需要后缀名)设置给 AndroidSound。
V2TIMOfflinePushInfo *pushInfo = [[V2TIMOfflinePushInfo alloc] init];pushInfo.title = @"push title";pushInfo.AndroidSound = @"phone_ringing"; // your voice file's name[[V2TIMManager sharedInstance] sendMessage:msg receiver:receiver groupID:groupID priority:V2TIM_PRIORITY_DEFAULT onlineUserOnly:NO offlinePushInfo:pushInfo progress:nil succ:^{} fail:^(int code, NSString *msg) {}];
注意:
接口支持华为、小米、FCM 和 APNS。
定制的铃音资源文件,Android 添加到工程 raw 目录下,iOS 链接进 Xcode 工程。
具体各厂商配置,请参阅 Android 及 iOS 模块的内容。调用的方法均在 Flutter 版本的 IM SDK 中有同名方法。
接收端
定制的铃音资源文件,添加到项目 nativeResources/android/res/raw 目录下,如下图所示:
设置私信通道和自定义铃音(仅 OPPO 需要设置)
说明:
1. TencentCloud-TIMPush ≥ 1.2.0。
2. OPPO 使用自定义铃音需要先设置私信通道和自定义铃音。
3. 因为 OPPO 属于 android 厂商,需要增加平台判断,防止 iOS 平台下调用报错。
完上述步骤后,您可以调用 TIMPush.createNotificationChannels 设置 OPPO 私信通道和自定义铃音。
接口
TIMPush.createNotificationChannels(options);
参数 options 为 Object 类型,包含的属性值如下:
Name | Type | Description |
notificationChannelList | Array<notificationChannel> | 私信通道或者自定义铃音设置列表 |
参数 notificationChannel 为 Object 类型,包含的属性值如下:
Name | Type | Description |
channelID | String | |
channelName | String | 自定义名称。 |
channelDesc | String | 自定义描述。 |
channelSound | String | 自定义铃音的名称且不需要后缀名, 如:private_ring |
在 APP.vue 中设置 OPPO 私信通道。如图所示:
const TIMPush = uni.requireNativePlugin('TencentCloud-TIMPush');// #ifdef APP-ANDROIDconst notificationChannelInfo = {notificationChannelList: [{channelID: '', // 控制台配置 oppo 的 channelIDchannelName: '', // 自定义名称channelDesc: '', // 自定义描述channelSound: '' // 自定义铃音的名称且不需要后缀名}],};TIMPush.createNotificationChannels(notificationChannelInfo);// #endif
注意:
iOS 自定义铃音,uniapp 必须为正式包。
iOS 自定义铃音长度不能超过 30s。
定制的铃音资源文件,添加到项目 nativeResources/ios/Resources 目录下,如下图所示:
发送端
1. 升级 @tencentcloud/chat 到最新版本。
npm install @tencentcloud/chat@latest
在浏览器控制台查看 TencentCloudChat.VERSION 版本号,来确认 @tencentcloud/chat ≥ 3.3.2 如图所示:
在 HBuilder 日志中查看 TencentCloudChat.VERSION 版本号,来确认 @tencentcloud/chat ≥ 3.3.2 如图所示:
在小程序开发者工具控制台查看 TencentCloudChat.VERSION 版本号,来确认 @tencentcloud/chat ≥ 3.3.2 如图所示:
2. 发送消息,设置 offlinePushInfo 自定义铃音的相关参数。
注意:
小米手机在 Android 8.0 及以上版本必须设置 androidInfo.XiaoMiChannelID,请您参见:小米自定义铃声。
谷歌手机 FCM 推送在 Android 8.0 及以上系统设置声音提示,必须设置 androidInfo.FCMChannelID。
注意:
当 apnsInfo.sound = TUIChatEngine.TYPES.IOS_OFFLINE_PUSH_NO_SOUND,表示接收时不会播放声音。
当 apnsInfo.sound = TUIChatEngine.TYPES.IOS_OFFLINE_PUSH_DEFAULT_SOUND,表示接收时播放系统声音。
在 UIKit 中使用 TUIChatService 发送消息时,设置 offlinePushInfo 相关参数,如发送普通文本消息,代码如下:
// 发送普通文本消息let promise = TUIChatService.sendTextMessage({payload: { text: 'Hello world!' }},{// 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。接入侧可自定义离线推送的标题及内容offlinePushInfo: {androidInfo: { // Android 推送配置sound: 'private_ring.mp3', // Andorid 自定义铃音XiaoMiChannelID: '', // 小米手机在 Android 8.0 及以上版本必须设置 XiaoMiChannelIDFCMChannelID: '', // 谷歌手机 FCM 在 Android 8.0 及以上系统设置声音提示,必须设置 FCMChannelID。OPPOChannelID: '', // OPPO手机必须设置 OPPOChannelID},apnsInfo: { // APNs 推送配置// apnsInfo.sound = TUIChatEngine.TYPES.IOS_OFFLINE_PUSH_NO_SOUND,表示接收时不会播放声音。// apnsInfo.sound = TUIChatEngine.TYPES.IOS_OFFLINE_PUSH_DEFAULT_SOUND,表示接收时播放系统声音。sound: 'private_ring.mp3', // iOS 自定义铃音}}});promise.catch((error) => {// 调用异常时业务侧可以通过 promise.catch 捕获异常进行错误处理});
参考文档:
注意:
当 apnsInfo.sound = TencentCloudChat.TYPES.IOS_OFFLINE_PUSH_NO_SOUND,表示接收时不会播放声音。
当 apnsInfo.sound = TencentCloudChat.TYPES.IOS_OFFLINE_PUSH_DEFAULT_SOUND,表示接收时播放系统声音。
在 chat 发送消息时,设置 offlinePushInfo 相关字段,代码如下:
// 消息发送选项chat.sendMessage(message, {// 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。接入侧可自定义离线推送的标题及内容offlinePushInfo: {androidInfo: { // Android 推送配置sound: 'private_ring.mp3', // Andorid 自定义铃音XiaoMiChannelID: '', // 小米手机在 Android 8.0 及以上版本必须设置 XiaoMiChannelIDFCMChannelID: '', // 谷歌手机 FCM 在 Android 8.0 及以上系统设置声音提示,必须设置 FCMChannelID。OPPOChannelID: '', // OPPO手机必须设置 OPPOChannelID},apnsInfo: { // APNs 推送配置// apnsInfo.sound = TencentCloudChat.TYPES.IOS_OFFLINE_PUSH_NO_SOUND,表示接收时不会播放声音。// apnsInfo.sound = TencentCloudChat.TYPES.IOS_OFFLINE_PUSH_DEFAULT_SOUND,表示接收时播放系统声音。sound: 'private_ring.mp3', // iOS 自定义铃音}}});