发送消息
本文主要描述了如何使用 IMLib SDK 向单聊会话、群聊会话、聊天室会话中发送消息。
如发送超级群消息,请参见超级群群文档 收发消息。
消息内容类型简介
IMLib SDK 定义的 RCMessage 对象的 content
属性中可包含两大类消息内容:普通消息内容和媒体消息内容。普通消息内容父类是 RCMessageContent,媒体消息内容父类是 RCMediaMessageContent。发送媒体消息和普通消息本质的区别为是否有上传数据过程。
功能 | 消息内容的类型 | 父类 | 描述 |
---|---|---|---|
文本消息 | RCTextMessage | RCMessageContent | 文本消息的内容。 |
引用回复 | RCReferenceMessage | RCMessageContent | 引用消息的内容,用于实现引用回复功能。 |
图片消息 | RCImageMessage | RCMediaMessageContent | 图片消息的内容,支持发送原图。 |
GIF 消息 | RCGIFMessage | RCMediaMessageContent | GIF 消息的内容。 |
文件消息 | RCFileMessage | RCMediaMessageContent | 文件消息的内容。 |
语音消息 | RCHQVoiceMessage | RCMediaMessageContent | 高清语音消息的内容。 |
提及他人(@ 消息) | 不适用 | 不适用 | @消息并非预定义的消息类型。详见如何发送 @ 消息。 |
以上为 IMLib SDK 内置的部分消息内容类型。您还可以创建自定义的消息内容类型,并使用 sendMessage
方法或sendMediaMessage
方法发送。详见自定义消息类型。
重要
- 发送普通消息使用
sendMessage
方法,发送媒体消息使用sendMediaMessage
方法。- 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
本文使用 IMLib SDK 核心类 RCIMClient
(也可以用 RCCoreClient
)的发送消息方法。
普通消息
普通消息指文本消息、引用消息等不涉及媒体文件上传的消息。普通消息的消息内容为 RCMessageContent
的子类的消息,例如文本消息内容(RCTextMessage),或自定义类型的普通消息内容。
构造普通消息
在发送前,需要先构造 RCMessage 对象,指定会话类型(单聊、群聊、聊天室),会话的 Target ID,消息方向(发送或接收),消息内容。以下示例中构造了一条包含文本消息内容(RCTextMessage)的消息对象。
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
RCConversationType conversationType = ConversationType_PRIVATE
RCMessage *message = [[RCMessage alloc]
initWithType:conversationType
targetId:@"targetId"
direction:MessageDirection_SEND
content:messageContent];
发送普通消息
如果 RCMessage 对象包含普通消息内容,使用 IMLib SDK 核心类 RCCoreClient
(也可以用 RCIMClient
)的 sendMessage
方法发送消息。
RCMessaage
的disableUpdateLastMessage
属性,可以控制是否更新到会话最新一条消息,默认 NO: 更新,YES: 不更新
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:messageContent];
[[RCCoreClient sharedRCCoreClient]
sendMessage:message
pushContent:nil
pushData:nil
attached:^(RCMessage *successMessage) {
//入库成功
}
successBlock:^(RCMessage *successMessage) {
//成功
}
errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
//失败
}];
sendMessage 方法中直接提供了用于控制推送通知内容(pushContent
)和推送附加信息(pushData
)的参数。另一种方式是使用消息推送属性配置 RCMessagePushConfig,其中包含了 pushContent
和 pushData
,并提供更多推送通知配置能力,例如标题、内容、图标、或其他第三方厂商个性化配置。详见远程推送通知。
关于是否需要配置输入参数或 RCMessage
的 messagePushConfig
属性中 pushContent
,请参考以下内容:
- 如果消息类型为即时通讯服务预定义消息类型中的用户内容类消息格式,例如 [TextMessage],
pushContent
可设置为null
。一旦消息触发离线推送通知时,远程推送通知默认使用服务端预置的推送通知内容。关于各类型消息的默认推送通知内容,详见用户内容类消息格式。 - 如果消息类型为即时通讯服务预定义消息类型中通知类、信令类("撤回命令消息" 除外),且需要支持远程推送通知,则必须填写
pushContent
,否则收件人不在线时无法收到远程推送通知。如无需触发远程推送,可不填该字段。 - 如果消息类型为自定义消息类型,请参考自定义消息如何支持远程推送。
- 请注意,聊天室会话不支持离线消息机制,因此也不支持离线消息转推送。
参数 | 类型 | 说明 |
---|---|---|
message | RCMessage | 要发送的消息体。必填属性包括会话类型(conversationType ),会话 ID(targetId ),消息内容(content )。详见[消息介绍] 中对 RCMessage 的结构说明。 |
pushContent | NSString | 修改或指定远程消息推送通知栏显示的内容。您也可以在 RCMessage 的推送属性(RCMessagePushConfig )中配置,会覆盖此处配置,详见配置消息的推送属性。 |
pushData | NSString | Push 附加信息。可设置为 nil 。您也可以在 RCMessage 的推送属性(RCMessagePushConfig )中配置,会覆盖此处配置,详见配置消息的推送属性。 |
attachedBlock | Block | 消息已成功存入消息数据库的回调。 |
successBlock | Block | 消息发送成功回调。 |
errorBlock | Block | 消息发送失败回调。 |
通过 RCCoreClient
的 sendMessage
方法的回调,融云服务器始终会通知您的消息是否已发送成功。当因任何问题导致发送失败时,可通过回调方法返回异常。
- 关于如何个性化配置接收方离线时收到的远程推送通知,详见下文远程推送通知。
- 自定义消息类型默认不支持离线消息转推送机制。如需支持,详见下文自定义消息如何支持远程推送。
媒体消息
媒体消息指图片、GIF、文件等需要处理媒体文件上传的消息。媒体消息的消息内容类型为 RCMeidaMessageContent
的子类,例如高清语音消息内容(RCHQVoiceMessage),或您自定义类型的媒体消息内容。
构造媒体消息
在发送前,需要先构造 RCMessage 对象。媒体消息 RCMessage
对象的 content
字段必须传入 RCMediaMessageContent 的子类对象,表示媒体消息内容。例如图片消息内容(RCImageMessage)、GIF 消息内容(RCGIFMessage),或继承自 RCMediaMessageContent 的自定义媒体消息内容。
图片消息内容(RCImageMessage)支持设置为发送原图。
RCImageMessage *mediaMessageContent = [RCImageMessage messageWithImageURI:@"path/to/image"];
mediaMessageContent.full YES; // 图片消息支持设置以原图发送
RCMessage *message = [[RCMessage alloc] initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:mediaMessageContent];
在发送前,图片会被压缩质量,以及生成缩略图,在聊天界面中展示。GIF 无缩略图,也不会被压缩。
- 图片消息的缩略图:SDK 会以原图 30% 质量生成符合标准大小要求的大图后再上传和发送。压缩后最长边不超过 240 px。缩略图用于在聊天界面中展示。
- 图片:发送消息时如未选择发送原图,SDK 会以原图 85% 质量生成符合标准大小要求的大图后再上传和发送。压缩后最长边不超过 1080 px。
一般情况下不建议修改 SDK 默认压缩配置。如需调整 SDK 压缩质量,详见知识库文档如何修改 SDK 默认的图片与视频压缩配置。
发送媒体消息
发送媒体消息需要使用 sendMediaMessage
方法。SDK 会为图片、小视频等生成缩略图,根据默认压缩配置进行压缩,再将图片、小视频等媒体文件上传到融云默认的文件服务器(文件存储时长),上传成功之后再发送消息。图片消息如已设置为发送原图,则不会进行压缩。
RCMessaage
的disableUpdateLastMessage
属性,可以控制是否更新 到会话最新一条消息,默认 NO: 更新,YES: 不更新
[[RCCoreClient sharedCoreClient] sendMediaMessage:message
pushContent:nil
pushData:nil
attached:^(RCMessage *successMessage) {
//入库成功
}
progress:^(int progress, RCMessage *progressMessage) {
//媒体上传进度
}
successBlock:^(RCMessage *successMessage) {
//成功
}
errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
//失败
}
cancel:^(RCMessage *cancelMessage) {
//取消
}];
sendMediaMessage 方法中直接提供了用于控制推送通知内容(pushContent
)和推送附加信息(pushData
)的参数。另一种方式是使用消息推送属性配置 RCMessagePushConfig,其中包含了 pushContent
和 pushData
,并提供更多推送通知配置能力,例如标题、内容、图标、或其他第三方厂商个性化配置。详见远程推送通知。
关于是否需要配置输入参数或 RCMessage
的 messagePushConfig
属性中 pushContent
,请参考以下内容:
- 如果消息类型为即时通讯服务预定义消息类型中的用户内容类消息格式,例如 RCTextMessage,
pushContent
可设置为nil
。一旦消息触发离线推送通知时,远程推送通知默认使用服务端预置的推送通知内容。关于各类型消息的默认推送通知内容,详见用户内容类消息格式。 - 如果消息类型为即时通讯服务预定义消息类型中通知类、信令类("撤回命令消息" 除外),且需要支持远程推送通知,则必须填写
pushContent
,否则收件人不在线时无法收到远程推送通知。如无需触发远程推送,可不填该字段。 - 如果消息类型为自定义消息类型,请参考自定义消息如何支持远程推送。
- 请注意,聊天室会话不支持离线消息机制,因此也不支持离线消息转推送。
参数 | 类型 | 说明 |
---|---|---|
message | RCMessage | 要发送的消息体。必填属性包括会话类型(conversationType ),会话 ID(targetId ),消息内容(content )。详见[消息介绍] 中对 RCMessage 的结构说明。 |
pushContent | NSString | 修改或指定远程消息推送通知栏显示的内容。您也可以在 RCMessage 的推送属性(RCMessagePushConfig )中配置,会覆盖此处配置,详见配置消息的推送属性。 |
pushData | NSString | Push 附加信息。可设置为 nil 。您也可以在 RCMessage 的推送属性(RCMessagePushConfig )中配置,会覆盖此处配置,详见配置消息的推送属性。 |
attachedBlock | Block | 消息已成功存入消息数据库的回调。 |
progressBlock | Block | 媒体上传进度的回调。 |
successBlock | Block | 消息发送成功回调。 |
errorBlock | Block | 消息发送失败回调。 |
cancel | Block | 取消发送的回调。 |
通过 RCCoreClient
的 sendMediaMessage
方法的回调方法,融云服务器始终会通知媒体文件上传进度,以及您的消息是否已发送成功。当因任何问题导致发送失败时,可通过回调方法返回异常。
发送媒体消息的方法默认将媒体文件上传到融云的文件服务器,您可以在客户端应用程序 下载媒体消息文件。融云对上传媒体文件大小进行了限制,GIF 大小限制为 2 MB,文件上传限制为 100 MB。如果您需要提高上限,可提交工单。
- 关于如何个性化配置接收方离线时收到的远程推送通知,详见下文远程推送通知。
- 自定义消息类型默认不支持离线消息转推送机制。如需支持,详见下文自定义消息如何支持远程推送。
发送媒体消息并且上传到自己的服务器
您可以直接发送您服务器上托管的文件。将媒体文件的 URL(表示其位置)作为参数,在构建媒体消息内容时传入。在这种情况下,您的文件不会托管在融云服务器上。当您发送带有远程 URL 的文件消息时,文件大小没有限制,您可以直接使用 sendMessage
方法发送消息。
如果您希望 SDK 在您上传成功后发送消息,您可以使用 RCCoreClient
的 sendMediaMessage 方法,具体操作如下:
- 上传媒体文件的过程中,可调用 RCUploadMediaStatusListener 的
updateBlock
、errorBlock
,通知 SDK 当前上传媒体文件的进度和状态。 - 上传完毕后,取得网络文件 URL。通过 RCUploadMediaStatusListener 的
currentMessage
属性获取当前RCMessage
对象,将RCMessage
对象的content
中的对应 URL 字段设置成上传成功的网络文件 URL。 - 调用 RCUploadMediaStatusListener 的
successBlock
,通知 SDK 文件上传完成。
RCImageMessage *mediaMessageContent = [RCImageMessage messageWithImageURI:@"path/to/image"];
mediaMessageContent.full = YES; // 图片消息支持设置以原图发送
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:mediaMessageContent];
[[RCCoreClient sharedCoreClient] sendMediaMessage:message
pushContent:nil
pushData:nil
attached:^(RCMessage * _Nullable msg) {
} uploadPrepare:^(RCUploadMediaStatusListener * _Nonnull uploadListener) {
RCMessage *currentMessage = uploadListener.currentMessage;
// App 在上传媒体文件时,需要在监听中调用 updateBlock、successBlock 与 errorBlock
if ([currentMessage.content isKindOfClass:[RCImageMessage class]]) {
RCImageMessage *content = (RCImageMessage *)currentMessage.content;
// 上传自己服务器后,获取到的图片 url 地址
content.remoteUrl = @"https://www.test.com/img/test.jpg";
uploadListener.successBlock(content);
}
} progress:^(int progress, long messageId) {
//媒体上传进度, 需要自行刷新 UI
} success:^(long messageId) {
} error:^(RCErrorCode errorCode, long messageId) {
} cancel:^(long messageId) {
}];
如何发送 @ 消息
@消息在融云即时通讯服务中不属于一种预定义的消息类型(详见服务端文档 消息类型概述)。融云通过在消息中携带 mentionedInfo
数据,帮助 App 实现提及他人(@)功能。
消息的 RCMessageContent
中的 RCMentionedInfo 字段存储了携带所 @ 人员的信息。无论是 SDK 内置消息类型,或者您自定义的消息类型,都直接或间接继承了 RCMessageContent 类。
融云支持在向群组和超级群中 发消息时,在消息内容中添加 mentionedInfo
。消息发送前,您可以构造 RCMentionedInfo
对象,并设置到消息的 RCMessageContent
中。
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"Test"];
messageContent.mentionedInfo = [[RCMentionedInfo alloc] initWithMentionedType:RC_Mentioned_Users userIdList:mentionedUserIdList mentionedContent:nil];
MentionedInfo
参数:
参数 | 类型 | 说明 |
---|---|---|
type | RCMentionedType | (必填)指定 MentionedInfo 的类型。RC_Mentioned_All 表示需要提及(@)所有人。RC_Mentioned_Users 表示需要 @ 部分人,被提及的人员需要在 userIdList 中指定。 |
userIdList | NSArray | 被提及(@)用户的 ID 集合。当 type 为 RC_Mentioned_Users 时必填。从 5.3.1 版本开始,支持当 type 为 RC_Mentioned_All 时同时在 userIdList 中提及部分人。接收端可通过 RCMentionedInfo 获取 userIdList 数据。 |
mentionedContent | NSString | 触发离线消息推送时,通知栏显示的内容。如果是 nil ,则显示默认提示内容(“有人 @ 你”)。@消息携带的 mentionedContent 优先级最高,会覆盖所有默认或自定义的 pushContent 数据。 |
以下示例展示了发送一条提及部分用户的文本消息,该消息发往一个群聊会话。
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
messageContent.mentionedInfo = [[RCMentionedInfo alloc]
initWithMentionedType:RC_Mentioned_Users
userIdList:@[@"userId1", @"userId2"]
mentionedContent:nil];
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_GROUP
targetId:@"targetId"
direction:MessageDirection_SEND
content:messageContent];
[[RCCoreClient sharedRCCoreClient]
sendMessage:message
pushContent:nil
pushData:nil
successBlock:^(RCMessage *successMessage) {
//成功
}
errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
//失败
}];
IMLib SDK 接收消息后,您需要处理 @ 消息中的数据。您可以在获取 RCMessage
(消息对象)后获取到消息对象携带的 RCMentionedInfo
对象。
远程推送通知
聊天室会话不支持离线消息机制,因此也不支持离线消息转推送。
如果您的应用已经在融云配置第三方推送,在消息接收方离线时,融云服务端会根据消息类型、接收方支持的推送通道、接收方的免打扰设置等,决定是否触发远程推送。
远程推送通知一般会展现在系统的通知栏。融云内置的消息类型默认会在通知栏展现通知标题和通知内容。关于各类型消息的默认推送通知内容,详见用户内容类消息格式。
如果您需要个性化的离线推送通知,可以通过以下方式,修改或指定远程推送的通知标题、通知内容其他属性。
- sendMessage 和 sendMediaMessage 方法的输入参数中直接提供了用于控制推送通知内容(
pushContent
)参数。 - 如果您需要控制离线推送通知的更多属性,例如标题、内容、图标、或根据第三方厂商通道 作个性化配置,请使用 RCMessage 的推送属性(RCMessagePushConfig)进行配置。消息推送属性中的
pushContent
配置会覆盖发送消息接口中的pushContent
。
配置消息推送属性
在发送消息时,您可以通过设置 RCMessage
的 messagePushConfig
属性,对单条消息的推送行为进行个性化配置。例如:
- 自定义推送标题、推送通知内容
- 自定义通知栏图标
- 添加远程推送附加信息
- 越过接收客户端的配置,强制在推送通知内显示通知内容
- 其他 APNs, HarmonyOS 或 Android 推送通道支持的个性化配置
相对于发送消息时输入参数中的 pushContent
和 pushData
,MessagePushConfig
中的配置具有更高优先级。发送消息时,如已配置 RCMessage
的 messagePushConfig
属性,则优先使用 messagePushConfig
中的配置。
RCTextMessage *txtMsg = [RCTextMessage messageWithContent:@"测试文本消息"];
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:txtMsg];
RCMessagePushConfig *pushConfig = [[RCMessagePushConfig alloc] init];
pushConfig.disablePushTitle = NO;
pushConfig.pushTitle = @"通知标题";
pushConfig.pushContent = @"通知内容";
pushConfig.pushData = @"通知的 pushData";
pushConfig.templateId = @"templateId";
pushConfig.iosConfig.threadId = @"iOS 用于通知分组的 id";
pushConfig.iosConfig.apnsCollapseId = @"iOS 用于通知覆盖的 id";
pushConfig.iosConfig.richMediaUri = @"iOS 推送自定义的通知栏消息右侧图标 URL";
pushConfig.androidConfig.notificationId = @"Android 的通知 id";
pushConfig.androidConfig.channelIdMi = @"小米的 channelId";
pushConfig.androidConfig.channelIdHW = @"华为的 channelId";
pushConfig.androidConfig.categoryHW = @"华为的 Category";
pushConfig.androidConfig.channelIdOPPO = @"OPPO 的 channelId";
pushConfig.androidConfig.typeVivo = @"vivo 的 classification";
pushConfig.androidConfig.categoryVivo = @"vivo 的 Category";
pushConfig.hmosConfig.imageUrl = "HarmonyOS 通知栏消息右侧大图标 URL";
pushConfig.hmosConfig.category = "HarmonyOS 推送消息分类";
pushConfig.forceShowDetailContent = YES;
message.messagePushConfig = pushConfig;
/// 调用 IMLib 发送消息方法
消息推送属性说明(RCMessagePushConfig)提供以下参数:
参数 | 类型 | 说明 |
---|---|---|
disablePushTitle | BOOL | 是否屏蔽通知标题,此属性只针目标用户为 iOS 平台时有效,Android 第三方推送平台的通知标题为必填项,所以暂不支持。 |
pushTitle | NSString | 推送标题,此处指定的推送标题优先级最高。如不设置,可参考 用户内容类消息格式 中对各内置消息类型默认推送通知标题与推送通知内容的说明。 |
pushContent | NSString | 推送内容。此处指定的推送内容优先级最高。如不设置,可参考 用户内容类消息格式 中对各内置消息类型默认推送通知标题与推送通知内容的说明。 |
pushData | NSString | 远程推送附加信息,如果没有,则使用发送消息的 pushData |
forceShowDetailContent | BOOL | 是否强制显示通知详情,当目标用户通过 RCPushProfile 中的 - (void)updateShowPushContentStatus:(BOOL)isShowPushContent success:(void (^)(void))successBlock error:(void (^)(RCErrorCode status))errorBlock; 设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情 |
templateId | NSString | 推送模板 ID,设置后根据目标用户通过 SDK RCPushProfile 中的 setPushLauguageCode 设置的语言环境,匹配模板中设置的语言内容进行推送,未匹配成功时使用默认内容进行推送。模板内容在“控制台-自定义推送文案”中进行设置,具体操作请参见 配置和使用自定义多语言推送模板。 |
iOSConfig | RCiOSConfig | iOS 平台相关配置。详见 RCiOSConfig 属性说明。 |
androidConfig | RCAndroidConfig | Android 平台相关配置。RCiOSConfig 属性说明。 |
hmosConfig | RCHarmonyOSConfig | HarmonyOS 平台相关配置。RCHarmonyOSConfig 属性说明。 |
-
RCiOSConfig 属性说明
参数 类型 说明 threadId NSString iOS 平台通知栏分组 ID,相同的 threadId 推送分为一组(iOS10 开始支持) apnsCollapseId NSString iOS 平台通知覆盖 ID,apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节(iOS10 开始支持) richMediaUri NSString iOS 推送自定义的通知栏消息右侧图标 URL,需要 App 自行解析 richMediaUri
并实现展示。图片要求:大小 120 * 120px,格式为 png 或者 jpg 格式。SDK 从 5.2.4 版本开始支持携带该字段。interruptionLevel NSString 适用于 iOS 15 及之后的系统。取值为 passive
,active
(默认),time-sensitive
,或critical
,取值说明详见对应的 APNs 的 interruption-level 字段。在 iOS 15 及以上版本中,系统的 “定时推送摘要”、“专注模式” 都可能导致重要的推送通知(例如余额变化)无法及时被用户感知的情况,可考虑设置该字段。SDK 5.6.7 及以上版本支持该字段。 -
RCAndroidConfig 属性说明
参数 类型 说明 notificationId NSString Android 平台 Push 唯一标识,目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用 channelIdMi NSString 小米的渠道 ID,该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId
时,可向 Android 端研发人员获取,channelId 由开发者自行创建miLargeIconUrl NSString (由于小米官方已停止支持该能力,该字段已失效)小米通知类型的推送所使用的通知图片 url。图片要求:大小120 * 120px,格式为 png 或者 jpg 格式。
此属性 5.1.7 及以上版本支持。支持 MIUI 国内版(国内版要求为 MIUI 12 及以上)和国际版。channelIdHW NSString 华为的渠道 ID,该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId
时,可向 Android 端研发人员获取,channelId 由开发者自行创建hwImageUrl NSString 华为推送通知中自定义的通知栏消息右侧小图片 URL,如果不设置,则不展示通知栏右侧图片。图标文件须小于 512 KB,图标建议规格大小:40dp x 40dp,弧角大小为 8dp,超出建议规格大小的图标会存在图片压缩或显示不全的情况。
此属性 5.1.7 及以上版本支持categoryHW NSString 华为推送通道的消息自分类标识,默认为空。category 取值必须为大写字母,例如 IM
。App 根据华为要求完成华为自分类权益申请 或 申请特殊权限 后可传入该字段有效。详见华为推送官方文档华为消息分类标准。该字段优先级高于控制台为 App Key 下的应用标识配置的华为推送 Category。SDK 5.4.0 及以上版本支持该字段。importanceHW RCImportanceHw 华为推送的消息提醒级别。 RCImportanceHwLow
表示通知栏消息预期的提醒方式为静默提醒,消息到达手机后,无铃声震动。RCImportanceHwNormal
表示通知栏消息预期的提醒方式为强提醒,消息到达手机后,以铃声、震动提醒用户。终端设备实际消息提醒方式将根据categoryHW
字段取值、或者控制台配置的category
字段取值,或者华为智能分类结果进行调整。SDK 5.1.3 及以上版本支持该字段。imageUrlHonor NSString 荣耀推送通知中用户自定义的通知栏右侧大图标 URL,如果不设置,则不展示通知栏右侧图标。图标文件须小于 512 KB,图标建议规格大小:40dp x 40dp,弧角大小为 8dp,超出建议规格大小的图标会存在图片压缩或显示不全的情况。SDK 5.6.7 及以上版本支持该字段。 importanceHonor RCimportanceHonor 荣耀推送的 Android 通知消息分类,决定用户设备消息通知行为。 RCImportanceHonorLow
表示资讯营销类消息。RCImportanceHonorNormal
(默认值)表示服务与通讯类消息。SDK 5.6.7 及以上版本支持该字段。typeVivo NSString VIVO 推送服务的消息类别。可选值 0
(运营消息) 和1
(系统消息)。该参数对应 VIVO 推送服务的classification
字段,详见 VIVO 推送消息分类说明categoryVivo NSString VIVO 推送服务的消息二级分类。例如 IM
(即时消息)。该参数对应 VIVO 推送服务的category
字段。详细的 category 取值请参见 VIVO 推送消息分类说明。如果指定二级分类categoryVivo
,必须同时指定typeVivo
(系统消息或运营消息)。请注意遵照 VIVO 官方要求,确保二级分类属于 VIVO 系统消息场景或运营消息场景下允许发送的内容。categoryVivo
字段优先级高于控制台为 App Key 下的应用标识配置的 VIVO 推送 Category。SDK 5.4.2 及以上版本支持该字段。channelIdOPPO NSString OPPO 的渠道 ID,该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId
时,可向 Android 端研发人员获取,channelId 由开发者自行创建fcmCollapseKey NSString FCM 推送的通知分组 ID。SDK 5.1.3 及以上版本支持该字段。注意,如使用该字段,请确保控制台的 FCM 推送配置中推送方式为通知消息方式。 fcmImageUrl NSString FCM 推送的通知栏右侧图标 URL。如果不设置,则不展示通知栏右侧图标。SDK 5.1.3 及以上版本支持该字段。注意,如使用该字段,请确保控制台的 FCM 推送配置鉴权方式为证书,推送方式为通知消息方式。 fcmChannelId NSString FCM 的渠道 ID,该条消息针对 FCM 推送渠道,如开发者集成了 FCM 推送,需要指定 channelId
时,可向 Android 端研发人员获取,channelId
由开发者自行创建Channel ID 需要由 Android 端开发者进行创建,创建方式如下:
推送通道 配置说明 华为 App 端,调用 Android SDK 创建 Channel ID 接口创建 Channel ID 小米 在小米开放平台管理台上创建 Channel ID 或通过小米服务端 API 创建 OPPO App 端,调用 Android SDK 创建 Channel ID;在 OPPO 管理台登记该 Channel ID,保持一致性 vivo 调用服务端 API 创建 Channel ID - RCHarmonyOSConfig 属性说明
参数 类型 说明 imageUrl NSString HarmonyOS通知栏消息右侧大图标 URL,通知栏右侧图片,格式支持 png、jpg、jpeg、heif、gif、bmp,图片长*宽 < 25000像素,图片不满足要求的情况下,终端不能显示通知消息 category NSString HarmonyOS 推送消息分类,默认为空,category 取值必须为大写字母)取值说明详见对应的鸿蒙 categroy 说明
自定义消息如何支持远程推送
融云为内置的消息类型默认支提供了远程通知标题和通知内容(详见用户内容类消息格式)。不过,如果您发送的是自定义类型的消息,则需要您自行提供 pushContent
字段,否则用户无法收到离线推送通知。具体如下:
- 如果消息类型为自定义消息类型,且需要支持离线推送通知,则必须向融云提供
pushContent
字段,否则用户无法收到离线推送通知。 - 如果消息类型为自定义消息类型,但不需要支持远程推送通知(例如通过自定义消息类型实现的 App 业务层操作指令),可将
pushContent
字段留空。
如果要自定义消息启用离线推送通知能力,请务必发送消息的入参或消息推送属性向融云提供 pushContent
字段内容,否则接收方用户无法收到离线推送通知。
为消息禁用推送通知
在接收者未上线时,融云服务端默认触发推送服务,将消息通过推送通道下发(服务端是否触发推送也会收到应用级别、用户级别免打扰设置的影响)。
有时 App 用户可能希望在发送消息时就指定该条消息不需要触发推送,该需求可通过 RCMessage
对象的 MessageConfig
配置实现。
以下示例中,我们将 messageConfig
的 disableNotification
设置为 YES
禁用该条消息的推送通知。接收方再次上线时会通过融云服务端的离线消息缓存(最多缓存 7 天)自动收取单聊、群聊、系统会话消息。超级群消息因不支持离线消息机 制,需要主动拉取。
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:MessageContent];
message.messageConfig.disableNotification = YES;
如何透传自定义数据
如果应用需要将自定义数据透传到对端,可通过以下方式实现:
- 消息内容 RCMessageContent 的附加信息字段,该字段会随即时消息一并发送到对端。接收方在线接收消息后,可从消息内容中获取该字段。请区别于
Message.extra
,Message.extra
为本地操作的字段,不会被发往服务端。 - 远程推送附加信息
pushData
。您可以在 sendMessage 和 sendMediaMessage 的输入参数中直接设置pushData
,也可以使用消息推送属性中的同名字段,后者中的pushData
会覆盖前者。pushData
仅会在消息触发离线远程推送时下发到对端设备。对端收到远程推送通知时,可通过推送数据中的appData
字段获取透传的数据内容。详见集成 APNs 远程推送中的获取推送数据。