diff --git a/android/src/main/java/com/im/easemob/ChatManager.java b/android/src/main/java/com/im/easemob/ChatManager.java index f182336..c290148 100644 --- a/android/src/main/java/com/im/easemob/ChatManager.java +++ b/android/src/main/java/com/im/easemob/ChatManager.java @@ -290,6 +290,20 @@ public void markAllMessagesAsRead(ReadableMap params, Promise promise) { EMClient.getInstance().chatManager().getConversation(conversationId, chatType, true).markAllMessagesAsRead(); promise.resolve(null); } + + @ReactMethod + public void markMessageAsRead(final ReadableMap params, final Promise promise) { + if (CheckUtil.checkParamKey(params, new String[]{ "from", "messageId"}, promise)) { + return; + } + try { + EMClient.getInstance().chatManager().ackMessageRead(params.getString("from"), params.getString("messageId")); + promise.resolve(true); + } catch (Exception e) { + e.printStackTrace(); + promise.reject(e); + } + } private EMMessage buildSendMessage(Context context, ReadableMap params) { EMMessage.Type messageType = EasemobConverter.toMessageType(params.getInt("messageType")); diff --git a/android/src/main/java/com/im/easemob/EasemobListener.java b/android/src/main/java/com/im/easemob/EasemobListener.java index 34388e1..8a94173 100644 --- a/android/src/main/java/com/im/easemob/EasemobListener.java +++ b/android/src/main/java/com/im/easemob/EasemobListener.java @@ -30,6 +30,7 @@ import static com.im.easemob.IMConstant.GROUP_MANAGER_DELEGATE; import static com.im.easemob.IMConstant.GROUP_OWNER_DID_UPDATE; import static com.im.easemob.IMConstant.MESSAGE_DID_RECEIVE; +import static com.im.easemob.IMConstant.MESSAGE_DID_READ; import static com.im.easemob.IMConstant.USER_ACCOUNT_DID_LOGIN_FROM_OTHER_DEVICE; import static com.im.easemob.IMConstant.USER_ACCOUNT_DID_REMOVE_FROM_SERVER; import static com.im.easemob.IMConstant.USER_DID_JOIN_GROUP; @@ -217,7 +218,8 @@ public void onCmdMessageReceived(List list) { @Override public void onMessageRead(List list) { - + EasemobHelper.getInstance().sendEvent(CHAT_MANAGER_DELEGATE, MESSAGE_DID_READ, EasemobConverter + .convertList(list)); } @Override diff --git a/android/src/main/java/com/im/easemob/IMConstant.java b/android/src/main/java/com/im/easemob/IMConstant.java index 280cb0e..ac1a4bc 100644 --- a/android/src/main/java/com/im/easemob/IMConstant.java +++ b/android/src/main/java/com/im/easemob/IMConstant.java @@ -61,6 +61,7 @@ public static class EMMessageDirection { } public static final String MESSAGE_DID_RECEIVE = "messageDidReceive"; + public static final String MESSAGE_DID_READ = "messageDidRead"; public static final String CMD_MESSAGE_DID_RECEIVE = "cmdMessageDidReceive"; public static final String CONVERSATION_LIST_DID_UPDATE = "conversationListDidUpdate"; diff --git a/ios/easemob/ChatManager.m b/ios/easemob/ChatManager.m index 8a24b4c..be231c2 100644 --- a/ios/easemob/ChatManager.m +++ b/ios/easemob/ChatManager.m @@ -277,6 +277,22 @@ @implementation ChatManager } } +RCT_EXPORT_METHOD(markMessageAsRead:(NSString *)params + resolver:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { + NSDictionary *allParams = [params jsonStringToDictionary]; + NSString *from = [allParams objectForKey:@"from"]; + NSString *messageId = [allParams objectForKey:@"messageId"]; + + [[EMClient sharedClient].chatManager sendMessageReadAck:messageId toUser:from completion:^(EMError *aError){ + if(!aError){ + resolve(@"{}"); + }else{ + reject([NSString stringWithFormat:@"%ld", (NSInteger)aError.code], aError.errorDescription, nil); + } + }]; +} + RCT_EXPORT_METHOD(deleteAllMessages:(NSString *)params resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { diff --git a/ios/easemob/ChatManagerDelegate.m b/ios/easemob/ChatManagerDelegate.m index 857348a..7ab9514 100644 --- a/ios/easemob/ChatManagerDelegate.m +++ b/ios/easemob/ChatManagerDelegate.m @@ -36,6 +36,14 @@ - (void)cmdMessagesDidReceive:(NSArray *)aCmdMessages { [Client sendEventByType:eventType subType:@"cmdMessageDidReceive" data:dicArray]; } +- (void) messagesDidRead:(NSArray *)aMessages { + NSMutableArray *dicArray = [NSMutableArray array]; + [aMessages enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [dicArray addObject:[obj objectToDictionary]]; + }]; + [Client sendEventByType:eventType subType:@"messageDidRead" data:dicArray]; +} + - (void)conversationListDidUpdate:(NSArray *)aConversationList { NSMutableArray *dicArray = [NSMutableArray array]; [aConversationList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { diff --git a/src/eventemitter.js b/src/eventemitter.js index 55c3b7a..5a40f26 100644 --- a/src/eventemitter.js +++ b/src/eventemitter.js @@ -33,6 +33,11 @@ export const setMessageDidReceive = setCallback(ChatManager, 'messageDidReceive' */ export const setCmdMessageDidReceive = setCallback(ChatManager, 'cmdMessageDidReceive'); +/** + * 设置消息已读事件回调。 + */ + export const setMessageDidRead = setCallback(ChatManager,'messageDidRead'); + /** * 设置离开群组事件回调。 */