addAdvancedMsgListener API는 V2TimAdvancedMsgListener 프로토콜에 정의된 콜백과 함께 모든 유형의 메시지(텍스트, 사용자 지정 및 리치 미디어 메시지)를 수신하는 데 사용됩니다.addAdvancedMsgListener (상세 보기)를 호출하여 고급 메시지 리스너를 추가합니다. 채팅 페이지가 초기화된 후와 같이 초기에 호출하여 App에서 적시에 메시지를 수신할 수 있도록 하는 것이 좋습니다.// 메시지 리스너 생성V2TimAdvancedMsgListener listener = V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (List<V2TimMessageReceipt> receiptList) {//일대일 메시지 읽기 콜백},onRecvMessageModified: (V2TimMessage message) {// msg는 수정된 메시지 객체},onRecvMessageReadReceipts: (List<V2TimMessageReceipt> receiptList) {//그룹 메시지 읽기 콜백receiptList.forEach((element) {element.groupID; // 그룹 idelement.msgID; // 수신 확인 메시지 IDelement.readCount; // 최신 그룹 메시지 읽음 수element.unreadCount; // 최신 그룹 메시지 읽지 않음 수element.userID; // C2C 메시지 상대방 ID});},onRecvMessageRevoked: (String messageid) {// 로컬 점검 메시지에서 상대방이 철회한 메시지 처리},onRecvNewMessage: (V2TimMessage message) async {// 텍스트 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT) {message.textElem?.text;}// 사용자 정의 메시지 사용if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_CUSTOM) {message.customElem?.data;message.customElem?.desc;message.customElem?.extension;}// 이미지 메시지 사용if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE) {message.imageElem?.path; // 이미지 업로드 경로. 이 필드는 경험을 최적화하기 위해 미리 화면에 이미지를 표시하는 데 사용할 수 있는 메시지 발신자에게만 적용됩니다.message.imageElem?.imageList?.forEach((element) {// 대형 이미지, 원본 이미지 및 썸네일 트래버스// 이미지 속성 구문 분석element?.height;element?.localUrl;element?.size;element?.type; // // 대형 이미지, 썸네일 또는 원본 이미지element?.url;element?.uuid;element?.width;});}// 영상 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO) {// 썸네일, 재생 주소, 너비와 높이, 크기와 같은 비디오 메시지 속성을 구문 분석합니다.message.videoElem?.UUID;message.videoElem?.duration;message.videoElem?.localSnapshotUrl;message.videoElem?.localVideoUrl;message.videoElem?.snapshotHeight;message.videoElem?.snapshotPath;// ...}// 오디오 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_SOUND) {// 오디오 메시지의 재생 주소, 로컬 주소, 크기 및 지속 시간을 구문 분석합니다.message.soundElem?.UUID;message.soundElem?.dataSize;message.soundElem?.duration;message.soundElem?.localUrl;message.soundElem?.url;// ...}// 파일 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_FILE) {// 파일 메시지의 파일 이름, 크기, URL 및 기타 정보를 구문 분석합니다message.fileElem?.UUID;message.fileElem?.fileName;message.fileElem?.fileSize;message.fileElem?.localUrl;message.fileElem?.path;message.fileElem?.url;}// 위치 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_LOCATION) {// 위도, 경도, 설명과 같은 지리적 위치 정보를 구문 분석합니다message.locationElem?.desc;message.locationElem?.latitude;message.locationElem?.longitude;}// 이모티콘 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_FACE) {message.faceElem?.data;message.faceElem?.index;}// 그룹 tips 문자 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS) {message.groupTipsElem?.groupID; // 그룹message.groupTipsElem?.type; // 그룹 Tips 유형message.groupTipsElem?.opMember; // 운영자 프로필message.groupTipsElem?.memberList; // 운용 중인 사용자 프로필message.groupTipsElem?.groupChangeInfoList; // 그룹 정보 변경 내역message.groupTipsElem?.memberChangeInfoList; // 그룹 구성원 변경 정보message.groupTipsElem?.memberCount; // 현재 온라인 그룹 구성원 수}// 병합된 메시지 처리if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_MERGER) {message.mergerElem?.abstractList;message.mergerElem?.isLayersOverLimit;message.mergerElem?.title;V2TimValueCallback<List<V2TimMessage>> download =await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMergerMessage(msgID: message.msgID!,);if (download.code == 0) {List<V2TimMessage>? messageList = download.data;}}if (message.textElem?.nextElem != null) {//첫 번째 Elem 객체의 nextElem 메소드를 통해 다음 Elem 객체를 가져옵니다. 다음 Elem 객체가 있으면 Elem 객체 인스턴스가 반환됩니다. 그렇지 않으면 null이 반환됩니다.}},onSendMessageProgress: (V2TimMessage message, int progress) {//파일 업로드 진행률 콜백},);// 고급 메시지 이벤트 리스너 추가TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);
// listener 생성V2TimAdvancedMsgListener listener = V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageModified: (V2TimMessage message) {},onRecvMessageReadReceipts: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageRevoked: (String messageid) {},onRecvNewMessage: (V2TimMessage message) {},onSendMessageProgress: (V2TimMessage message, int progress) {},);// listener 등록TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);// listener 제거TencentImSDKPlugin.v2TIMManager.getMessageManager().removeAdvancedMsgListener(listener: listener);
addAdvancedMsgListener를 호출하십시오.onRecvNewMessage (상세 보기) 콜백을 수신합니다.removeAdvancedMsgListener 를 호출하여 리스너를 제거하십시오. 이 단계는 선택 사항이며 필요에 따라 수행할 수 있습니다.V2TimAdvancedMsgListener listener = V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageModified: (V2TimMessage message) {},onRecvMessageReadReceipts: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageRevoked: (String messageid) {},onRecvNewMessage: (V2TimMessage message) {// 텍스트 메시지 처리if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT){String text = message.textElem.text;}},onSendMessageProgress: (V2TimMessage message, int progress) {},);TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);
addAdvancedMsgListener를 호출하십시오.onRecvNewMessage (상세 보기) 콜백을 수신합니다.removeAdvancedMsgListener 를 호출하여 리스너를 제거하십시오. 이 단계는 선택 사항이며 필요에 따라 수행할 수 있습니다.V2TimAdvancedMsgListener listener = V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageModified: (V2TimMessage message) {},onRecvMessageReadReceipts: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageRevoked: (String messageid) {},onRecvNewMessage: (V2TimMessage message) {// 사용자 정의 메시지 사용if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_CUSTOM){String data = message.customElem.data;String desc = message.customElem.desc;String ext = message.customElem.extension;}},onSendMessageProgress: (V2TimMessage message, int progress) {},);TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);
addAdvancedMsgListener API를 호출하여 고급 메시지 리스너를 설정합니다.onRecvNewMessage (상세 보기) 콜백을 수신하여 V2TimMessage 메시지를 가져옵니다.removeAdvancedMsgListener를 호출하여 리스너를 제거하십시오. 이 단계는 선택 사항이며 필요에 따라 수행할 수 있습니다.V2TimAdvancedMsgListener listener = V2TimAdvancedMsgListener(onRecvC2CReadReceipt: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageModified: (V2TimMessage message) {},onRecvMessageReadReceipts: (List<V2TimMessageReceipt> receiptList) {},onRecvMessageRevoked: (String messageid) {},onRecvNewMessage: (V2TimMessage message) async {// 이미지 메시지 사용if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE) {String path = message.imageElem.path; // 이미지 업로드 경로. 이 필드는 경험을 최적화하기 위해 미리 화면에 이미지를 표시하는 데 사용할 수 있는 메시지 발신자에게만 적용됩니다.for (var item in message.imageElem.imageList) { // 대형 이미지, 원본 이미지 및 썸네일 트래버스// 이미지 속성 구문 분석int height = item.height;String localUrl = item.localUrl;int size = item.size;int type = item.type; // 대형 이미지, 썸네일, 원본 이미지String url = item.url;String uuid = item.uuid;int width = item.width;}}// 멀티미디어 메시지 URL 가져오기V2TimValueCallback<V2TimMessageOnlineUrl> getMessageOnlineUrlRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: '', // 메시지 id);if (getMessageOnlineUrlRes.code == 0) {// 가져오기 성공}// 멀티미디어 메시지 다운로드V2TimCallback downloadMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMessage(msgID: '', // 메시지 idmessageType: 3, // 메시지 유형imageType: 0, // 이미지 유형, messageType이 이미지 메시지인 경우에만 유효isSnapshot: false // 썸네일 여부, messageType이 비디오 메시지인 경우에만 유효);if (downloadMessageRes.code == 0) {// 다운로드 성공}},onSendMessageProgress: (V2TimMessage message, int progress) {},);TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);
if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO){// 썸네일, 재생 주소, 너비와 높이, 크기와 같은 비디오 메시지 속성을 구문 분석합니다.message.videoElem.UUID;message.videoElem.duration;message.videoElem.localSnapshotUrl;message.videoElem.localVideoUrl;message.videoElem.snapshotHeight;message.videoElem.snapshotPath;// ...}// 멀티미디어 메시지 URL 가져오기V2TimValueCallback<V2TimMessageOnlineUrl> getMessageOnlineUrlRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: '', // 메시지 id);if (getMessageOnlineUrlRes.code == 0) {// 가져오기 성공}// 멀티미디어 메시지 다운로드V2TimCallback downloadMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMessage(msgID: '', // 메시지 idmessageType: 5, // 메시지 유형imageType: 0, // 이미지 유형, messageType이 이미지 메시지인 경우에만 유효isSnapshot: false // 썸네일 여부, messageType이 비디오 메시지인 경우에만 유효);if (downloadMessageRes.code == 0) {// 다운로드 성공}
if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_SOUND){// 오디오 메시지의 재생 주소, 로컬 주소, 크기 및 지속 시간을 구문 분석합니다.message.soundElem.UUID;message.soundElem.dataSize;message.soundElem.duration;message.soundElem.localUrl;message.soundElem.url;// ...// 멀티미디어 메시지 URL 가져오기V2TimValueCallback<V2TimMessageOnlineUrl> getMessageOnlineUrlRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: '', // 메시지 id);if (getMessageOnlineUrlRes.code == 0) {// 가져오기 성공}// 멀티미디어 메시지 다운로드V2TimCallback downloadMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMessage(msgID: '', // 메시지 idmessageType: 4, // 메시지 유형imageType: 0, // 이미지 유형, messageType이 이미지 메시지인 경우에만 유효isSnapshot: false // 썸네일 여부, messageType이 비디오 메시지인 경우에만 유효);if (downloadMessageRes.code == 0) {// 다운로드 성공}}
if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_FILE){// 파일 메시지의 파일 이름, 크기, URL 및 기타 정보를 구문 분석합니다message.fileElem.UUID;message.fileElem.fileName;message.fileElem.fileSize;message.fileElem.localUrl;message.fileElem.path;message.fileElem.url;// 멀티미디어 메시지 URL 가져오기V2TimValueCallback<V2TimMessageOnlineUrl> getMessageOnlineUrlRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: '', // 메시지 id);if (getMessageOnlineUrlRes.code == 0) {// 가져오기 성공}// 멀티미디어 메시지 다운로드V2TimCallback downloadMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMessage(msgID: '', // 메시지 idmessageType: 6, // 메시지 유형imageType: 0, // 이미지 유형, messageType이 이미지 메시지인 경우에만 유효isSnapshot: false // 썸네일 여부, messageType이 비디오 메시지인 경우에만 유효);if (downloadMessageRes.code == 0) {// 다운로드 성공}}
locationElem에서 직접 위도 및 경도 정보를 구문 분석할 수 있습니다.
다음 샘플 코드는 V2TimMessage에서 지리적 위치 콘텐츠를 구문 분석하는 방법을 보여줍니다.if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_LOCATION){// 위도, 경도, 설명과 같은 지리적 위치 정보를 구문 분석합니다message.locationElem.desc;message.locationElem.latitude;message.locationElem.longitude;}
faceElem (상세 보기)의 정의를 참고하십시오. 여기에서 index와 data를 사용자 정의할 수 있습니다.if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_FACE) {message.faceElem.data;message.faceElem.index;}
V2TIMGroupTipsElem의 각 필드를 구문 분석합니다
2. type에 따라 tips 메시지 유형을 식별합니다
3. 유형에 따라 표시할 콘텐츠에 다른 필드를 병합합니다.V2TIM_GROUP_TIPS_TYPE_GROUP_INFO_CHANGE로 구문 분석하여 이것이 그룹 프로필 변경 알림임을 나타냅니다.
수신자는 opMember에서 운영자 정보를, groupChangeInfoList에서 수정된 그룹 이름을 가져올 수 있습니다.
이 시점에서 수신자는 ‘운영자’와 ‘수정된 그룹 이름’을 병합하여 ‘alice가 그룹 이름을 group123으로 이름을 바꿨습니다’와 같은 그룹 팁을 만들 수 있습니다.if(message.elemType == MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS){message.groupTipsElem.groupID; // 그룹message.groupTipsElem.type; // 그룹 Tips 유형message.groupTipsElem.opMember; // 운영자 프로필message.groupTipsElem.memberList; // 운용 중인 사용자 프로필message.groupTipsElem.groupChangeInfoList; // 그룹 정보 변경 내역message.groupTipsElem.memberChangeInfoList; // 그룹 구성원 변경 정보message.groupTipsElem.memberCount; // 현재 온라인 그룹 구성원 수}
if(message.textElem.nextElem!=null){// 다음 메시지가 있습니다.}
피드백