doocs/qcloud-im-server-sdk-java高级功能
腾讯云IM服务端SDK提供了离线推送、消息回执、内容审核、敏感词过滤、多设备登录同步以及自定义回调等高级功能,帮助开发者实现高效的消息管理和业务扩展。
离线推送与消息回执
腾讯云 IM 服务端 SDK 提供了强大的离线推送和消息回执功能,确保消息在用户离线时仍能及时送达,并提供消息状态的可视化追踪。以下将详细介绍这两个功能的使用方法和实现细节。
离线推送
离线推送功能允许在用户离线时,通过第三方推送服务(如 APNs、华为推送等)将消息推送到用户设备。腾讯云 IM SDK 通过 OfflinePushInfo 类配置推送参数。
关键配置参数
| 参数名 | 类型 | 说明 |
|---|---|---|
PushFlag | Integer | 推送开关,0 表示关闭推送,1 表示开启推送。 |
Title | String | 推送标题,用于在通知栏显示。 |
Desc | String | 推送内容描述。 |
Ext | String | 扩展字段,用于携带额外信息。 |
AndroidInfo | AndroidInfo | 安卓设备推送配置,包括声音、渠道 ID 等。 |
ApnsInfo | ApnsInfo | iOS 设备推送配置,包括声音、角标模式等。 |
示例代码
以下是一个配置离线推送的示例:
OfflinePushInfo pushInfo = OfflinePushInfo.builder()
.pushFlag(1) // 开启推送
.title("新消息通知")
.desc("您有一条未读消息")
.ext("{\"key\":\"value\"}")
.androidInfo(AndroidInfo.builder()
.sound("default")
.huaweiChannelId("IM")
.build())
.apnsInfo(ApnsInfo.builder()
.sound("default")
.badgeMode(1)
.build())
.build();
SendMsgRequest request = SendMsgRequest.builder()
.fromAccount("user1")
.toAccount("user2")
.msgBody(Collections.singletonList(new TIMMsgElement()))
.offlinePushInfo(pushInfo)
.build();
消息回执
消息回执功能允许发送方确认消息是否被接收方成功接收。腾讯云 IM SDK 提供了以下两类回执:
- 单聊消息回执:通过
C2cMsgReadReceiptRequest实现。 - 群聊消息回执:通过
GroupMsgReceiptRequest和GetGroupMsgReceiptRequest实现。
单聊消息回执
单聊消息回执用于标记消息已被对方阅读。
示例代码
C2cMsgInfoItem msgInfo = C2cMsgInfoItem.builder()
.fromAccount("user1")
.toAccount("user2")
.msgKey("msg123")
.build();
C2cMsgReadReceiptRequest request = C2cMsgReadReceiptRequest.builder()
.operatorAccount("user1")
.peerAccount("user2")
.c2cMsgInfoItemList(Collections.singletonList(msgInfo))
.build();
群聊消息回执
群聊消息回执用于获取群成员对消息的阅读状态。
示例代码
MsgSeqItem msgSeq = MsgSeqItem.builder()
.msgSeq(12345L)
.build();
GroupMsgReceiptRequest request = GroupMsgReceiptRequest.builder()
.groupId("group1")
.fromAccount("user1")
.msgSeqList(Collections.singletonList(msgSeq))
.build();
状态查询
通过 GetGroupMsgReceiptDetailRequest 可以查询群消息的详细回执状态,包括已读和未读成员列表。
示例代码
GetGroupMsgReceiptDetailRequest request = GetGroupMsgReceiptDetailRequest.builder()
.groupId("group1")
.msgSeq(12345L)
.filter(0) // 0 表示查询所有成员
.cursor("") // 分页游标
.count(100) // 每页数量
.build();
流程图
以下是一个消息回执的流程示例:
通过以上功能,开发者可以实现高效的消息推送和状态追踪,提升用户体验。
内容审核与敏感词过滤
腾讯云 IM 服务端 SDK 提供了强大的内容审核与敏感词过滤功能,帮助开发者高效管理聊天内容,确保平台内容的合规性和安全性。本节将详细介绍 SDK 中的相关功能及其使用方法。
内容审核功能
内容审核功能允许开发者对聊天内容进行实时或批量审核,支持多种审核类型(如文本、图片、视频等)。以下是核心功能点:
-
单条内容审核
通过ContentModerationRequest类,开发者可以提交单条内容进行审核。审核结果将返回内容的合规性状态。ContentModerationRequest request = new ContentModerationRequest( "text", // 审核类型 "这是一条测试内容", // 待审核内容 "text" // 内容类型 ); ContentModerationResult result = client.audit.contentModeration(request); -
批量内容审核
通过BatchContentModerationRequest类,开发者可以批量提交多条内容进行审核,提高审核效率。List<AuditContentItem> contents = Arrays.asList( new AuditContentItem("text1", "这是一条测试内容1"), new AuditContentItem("text2", "这是一条测试内容2") ); BatchContentModerationRequest request = new BatchContentModerationRequest("text", contents); BatchContentModerationResult result = client.audit.batchContentModeration(request);
敏感词管理
SDK 提供了本地和云端敏感词管理功能,支持敏感词的添加、删除和查询。
-
本地敏感词管理
开发者可以通过AddLocalAuditKeywordsRequest和DeleteLocalAuditKeywordsRequest类管理本地敏感词库。// 添加本地敏感词 List<LocalAuditWord> words = Arrays.asList(new LocalAuditWord("敏感词1"), new LocalAuditWord("敏感词2")); AddLocalAuditKeywordsRequest addRequest = new AddLocalAuditKeywordsRequest(1400554812, words); client.audit.addLocalAuditKeywords(addRequest); // 删除本地敏感词 DeleteLocalAuditKeywordsRequest deleteRequest = new DeleteLocalAuditKeywordsRequest(1400554812, words); client.audit.deleteLocalAuditKeywords(deleteRequest); -
云端敏感词管理
通过AddCloudAuditKeywordsRequest和GetCloudAuditKeyWordsIdsRequest类,开发者可以管理云端敏感词库。// 添加云端敏感词 List<UserKeyword> keywords = Arrays.asList(new UserKeyword("云端敏感词1"), new UserKeyword("云端敏感词2")); AddCloudAuditKeywordsRequest cloudAddRequest = new AddCloudAuditKeywordsRequest(1400554812, "libId", keywords); client.audit.addCloudAuditKeywords(cloudAddRequest); // 查询云端敏感词 GetCloudAuditKeyWordsIdsRequest cloudQueryRequest = new GetCloudAuditKeyWordsIdsRequest(1400554812, 0, 10); GetCloudAuditKeywordsIdsResult cloudQueryResult = client.audit.getCloudAuditKeywordsIds(cloudQueryRequest);
审核结果处理
审核结果包含内容的合规性标签和状态,开发者可以根据结果采取相应的处理措施(如拦截、警告等)。
if (result.getLabel() == ContentModerationLabel.VIOLATION) {
// 内容违规,执行拦截逻辑
System.out.println("内容违规,已拦截");
} else {
// 内容合规,放行
System.out.println("内容合规");
}
流程图示例
以下是一个内容审核的流程图示例:
通过以上功能,开发者可以轻松实现内容审核与敏感词过滤,确保平台内容的安全性和合规性。
多设备登录与同步
腾讯云 IM 服务端 SDK 提供了强大的多设备登录与消息同步功能,确保用户在不同设备上能够无缝切换并保持消息的一致性。以下将详细介绍这一功能的核心实现和使用方法。
多设备登录机制
腾讯云 IM 支持用户同时在多个设备上登录同一账号,并通过以下方式确保多设备间的协同工作:
- 设备标识管理:每个设备在登录时会生成唯一的设备标识,用于区分不同设备的会话。
- 会话状态同步:服务端会实时同步各设备的在线状态和消息接收情况。
消息同步策略
通过 SyncOtherMachine 参数,开发者可以灵活控制消息的同步行为。该参数支持以下选项:
| 值 | 描述 |
|---|---|
1 | 消息同步到其他设备 |
2 | 消息不同步到其他设备 |
3 | 消息同步到其他设备(但不推送通知) |
代码示例
以下是一个发送消息并控制同步行为的示例:
SendMsgRequest request = SendMsgRequest.builder()
.fromAccount("user1")
.toAccount("user2")
.syncOtherMachine(SyncOtherMachine.SYNC) // 同步到其他设备
.msgBody(Collections.singletonList(
new TIMMsgElement.TextElement("Hello, this is a test message.")
))
.build();
try {
SendMsgResult result = client.message.sendMsg(request);
System.out.println("消息发送成功: " + result);
} catch (IOException e) {
System.err.println("消息发送失败: " + e.getMessage());
}
多设备消息一致性
为确保消息在多设备间的一致性,腾讯云 IM 实现了以下机制:
- 消息序列号:每条消息分配唯一的序列号,确保消息顺序一致。
- 离线消息拉取:设备上线后自动拉取未同步的消息。
- 已读回执:通过已读回执同步消息的阅读状态。
高级配置
开发者可以通过 ClientConfiguration 类进一步配置多设备同步行为,例如设置消息同步的超时时间和重试策略:
ClientConfiguration config = ClientConfiguration.builder()
.syncOtherMachineTimeout(5000) // 同步超时时间(毫秒)
.enableMessageSyncRetry(true) // 启用同步重试
.build();
ImClient client = ImClient.getInstance(appId, userId, key, config);
通过以上功能,腾讯云 IM 服务端 SDK 为多设备场景提供了完善的解决方案,确保用户体验的一致性和可靠性。
自定义扩展与回调处理
腾讯云 IM 服务端 SDK 提供了丰富的回调机制,允许开发者通过自定义扩展实现业务逻辑的灵活控制。回调处理是 SDK 的核心功能之一,支持在特定事件发生时触发自定义逻辑,例如消息发送前、群组创建后等场景。以下将详细介绍回调机制的设计与实现。
回调机制概述
回调机制通过 CallbackCommand 标识不同的事件类型,开发者可以根据需求实现对应的回调逻辑。每个回调事件都对应一个特定的 CallbackCommand 值,例如:
BeforeSendMsgCallback:消息发送前回调AfterSendGroupMsgCallback:群组消息发送后回调AfterGroupOwnerChangeCallback:群主变更后回调
回调事件通过 HTTP 请求发送到开发者配置的服务器地址,开发者需实现相应的接口来处理这些回调请求。
回调数据结构
所有回调事件均继承自统一的回调基类,包含以下核心字段:
public class BaseCallback {
@JsonProperty("CallbackCommand")
private String callbackCommand;
// 其他公共字段...
}
其中:
CallbackCommand:标识回调事件的类型。- 其他字段根据具体事件类型动态扩展。
回调事件示例
以下是一个典型的回调事件实现(以 BeforeSendMsgCallback 为例):
public class BeforeSendMsgCallback extends BaseCallback {
@JsonProperty("From_Account")
private String fromAccount;
@JsonProperty("To_Account")
private String toAccount;
@JsonProperty("MsgBody")
private List<TIMMsgElement> msgBody;
// Getter 和 Setter 方法...
}
回调处理流程
-
配置回调地址
在腾讯云 IM 控制台中配置回调地址,确保 SDK 能将事件推送到指定服务器。 -
实现回调接口
开发者需实现一个 HTTP 服务,接收并处理回调请求。例如:@RestController @RequestMapping("/callback") public class CallbackController { @PostMapping("/handle") public ResponseEntity<String> handleCallback(@RequestBody BaseCallback callback) { switch (callback.getCallbackCommand()) { case "BeforeSendMsg": // 处理消息发送前逻辑 break; case "AfterGroupCreated": // 处理群组创建后逻辑 break; default: return ResponseEntity.badRequest().body("Unsupported callback type"); } return ResponseEntity.ok("Success"); } } -
返回处理结果
回调接口需返回 JSON 格式的响应,SDK 会根据响应决定后续行为。例如:{ "ActionStatus": "OK", "ErrorCode": 0, "ErrorInfo": "" }
# 总结 腾讯云IM服务端SDK通过离线推送、消息回执、内容审核、多设备同步和自定义回调等功能,为开发者提供了全面的消息管理解决方案,确保消息的及时性、安全性和一致性,同时支持灵活的扩展以满足不同业务场景需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



