186 lines
5.8 KiB
Dart
186 lines
5.8 KiB
Dart
![]() |
import 'package:logger/logger.dart';
|
|||
|
import 'package:loopin/IM/im_result.dart';
|
|||
|
import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart';
|
|||
|
import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart';
|
|||
|
import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart';
|
|||
|
import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart';
|
|||
|
import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';
|
|||
|
|
|||
|
final logger = Logger();
|
|||
|
|
|||
|
class IMMessage {
|
|||
|
/// 发送文本消息
|
|||
|
Future<ImResult> sendText({
|
|||
|
required String text,
|
|||
|
String? toUserID,
|
|||
|
String? groupID,
|
|||
|
String? data,
|
|||
|
}) async {
|
|||
|
// 必须且只能设置一个:toUserID(单聊)或 groupID(群聊)
|
|||
|
if ((toUserID == null && groupID == null) || (toUserID != null && groupID != null)) {
|
|||
|
return ImResult(
|
|||
|
success: false,
|
|||
|
code: -1,
|
|||
|
desc: "只能指定一个 receiver(toUserID)或 groupID",
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
// 创建消息
|
|||
|
final createRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: text);
|
|||
|
|
|||
|
if (createRes.code != 0 || createRes.data == null) {
|
|||
|
return ImResult(
|
|||
|
success: false,
|
|||
|
code: createRes.code,
|
|||
|
desc: "创建消息失败",
|
|||
|
);
|
|||
|
}
|
|||
|
final V2TimMessage? messageInfo = createRes.data?.messageInfo;
|
|||
|
|
|||
|
V2TimValueCallback<V2TimMessage> sendRes;
|
|||
|
|
|||
|
// 单聊
|
|||
|
if (toUserID != null) {
|
|||
|
sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
|
|||
|
message: messageInfo,
|
|||
|
receiver: toUserID,
|
|||
|
groupID: "",
|
|||
|
priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT,
|
|||
|
onlineUserOnly: false,
|
|||
|
isExcludedFromUnreadCount: false,
|
|||
|
isExcludedFromLastMessage: false,
|
|||
|
needReadReceipt: false,
|
|||
|
offlinePushInfo: OfflinePushInfo(title: "新消息", desc: text),
|
|||
|
cloudCustomData: "",
|
|||
|
localCustomData: "",
|
|||
|
);
|
|||
|
} else {
|
|||
|
// 群聊
|
|||
|
sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
|
|||
|
message: messageInfo,
|
|||
|
receiver: "",
|
|||
|
groupID: groupID!,
|
|||
|
priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT,
|
|||
|
onlineUserOnly: false,
|
|||
|
isExcludedFromUnreadCount: false,
|
|||
|
isExcludedFromLastMessage: false,
|
|||
|
needReadReceipt: false,
|
|||
|
offlinePushInfo: OfflinePushInfo(title: "新群聊消息", desc: text),
|
|||
|
cloudCustomData: "",
|
|||
|
localCustomData: "",
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
return ImResult(
|
|||
|
success: sendRes.code == 0,
|
|||
|
code: sendRes.code,
|
|||
|
desc: sendRes.desc,
|
|||
|
data: sendRes.data,
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
/// 发送自定义消息
|
|||
|
Future<ImResult> sendCustomMessage({
|
|||
|
required String data,
|
|||
|
String? toUserID,
|
|||
|
String? groupID,
|
|||
|
String? description,
|
|||
|
String? extension,
|
|||
|
}) async {
|
|||
|
// 校验逻辑:单聊或群聊,二选一
|
|||
|
if ((toUserID == null && groupID == null) || (toUserID != null && groupID != null)) {
|
|||
|
return ImResult(
|
|||
|
success: false,
|
|||
|
code: -1,
|
|||
|
desc: "只能指定一个 receiver(toUserID)或 groupID",
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
// 1. 创建自定义消息
|
|||
|
final createRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(
|
|||
|
data: data,
|
|||
|
desc: description ?? '',
|
|||
|
extension: extension ?? '',
|
|||
|
);
|
|||
|
|
|||
|
if (createRes.code != 0 || createRes.data?.id == null) {
|
|||
|
return ImResult(
|
|||
|
success: false,
|
|||
|
code: createRes.code,
|
|||
|
desc: "创建自定义消息失败",
|
|||
|
);
|
|||
|
}
|
|||
|
final V2TimMessage? messageInfo = createRes.data?.messageInfo;
|
|||
|
|
|||
|
// 2. 发送消息
|
|||
|
final sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
|
|||
|
message: messageInfo,
|
|||
|
receiver: toUserID ?? '',
|
|||
|
groupID: groupID ?? '',
|
|||
|
priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT,
|
|||
|
onlineUserOnly: false,
|
|||
|
isExcludedFromUnreadCount: false,
|
|||
|
isExcludedFromLastMessage: false,
|
|||
|
needReadReceipt: false,
|
|||
|
offlinePushInfo: OfflinePushInfo(
|
|||
|
title: "自定义消息",
|
|||
|
desc: description ?? '您收到一条自定义消息',
|
|||
|
),
|
|||
|
cloudCustomData: "",
|
|||
|
localCustomData: "",
|
|||
|
);
|
|||
|
|
|||
|
return ImResult(
|
|||
|
success: sendRes.code == 0,
|
|||
|
code: sendRes.code,
|
|||
|
desc: sendRes.desc,
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
/// 构造单聊伪消息
|
|||
|
Future<ImResult> insertTimeLabel(String data, String userId) async {
|
|||
|
final customMsgRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(
|
|||
|
data: data,
|
|||
|
desc: "时间标签",
|
|||
|
extension: "",
|
|||
|
);
|
|||
|
|
|||
|
if (customMsgRes.code != 0 || customMsgRes.data?.id == null) {
|
|||
|
return ImResult(
|
|||
|
success: false,
|
|||
|
code: customMsgRes.code,
|
|||
|
desc: "创建时间标签消息失败",
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
final timeMsg = customMsgRes.data!.messageInfo;
|
|||
|
timeMsg!.localCustomData = 'time_label';
|
|||
|
|
|||
|
return ImResult(
|
|||
|
success: true,
|
|||
|
code: customMsgRes.code,
|
|||
|
desc: "success",
|
|||
|
data: timeMsg,
|
|||
|
);
|
|||
|
|
|||
|
// final sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
|
|||
|
// message: timeMsg,
|
|||
|
// receiver: userId,
|
|||
|
// groupID: "",
|
|||
|
// onlineUserOnly: false,
|
|||
|
// isExcludedFromUnreadCount: true,
|
|||
|
// isExcludedFromLastMessage: true,
|
|||
|
// needReadReceipt: false,
|
|||
|
// cloudCustomData: "",
|
|||
|
// localCustomData: "time_label",
|
|||
|
// );
|
|||
|
|
|||
|
// return ImResult(
|
|||
|
// success: sendRes.code == 0,
|
|||
|
// code: sendRes.code,
|
|||
|
// desc: sendRes.code == 0 ? "时间标签发送成功" : sendRes.desc,
|
|||
|
// data: timeMsg,
|
|||
|
// );
|
|||
|
}
|
|||
|
}
|