@@ -79,10 +79,15 @@ -(void)localSessionList:(NSString *)sessionId sessionType:(NSString *)sessionTyp
7979- (void )resendMessage : (NSString *)messageID {
8080 NSArray *currentMessage = [[[NIMSDK sharedSDK ] conversationManager ] messagesInSession: _session messageIds: @[messageID] ];
8181 NIMMessage *currentM = currentMessage[0 ];
82- if (currentM.isReceivedMsg ) {
83- [[[NIMSDK sharedSDK ] chatManager ] fetchMessageAttachment: currentM error: nil ];
82+ NSString *isFriend = [currentM.localExt objectForKey: @" isFriend" ];
83+ if ([isFriend length ]) {
84+
8485 }else {
85- [[[NIMSDK sharedSDK ] chatManager ] resendMessage: currentM error: nil ];
86+ if (currentM.isReceivedMsg ) {
87+ [[[NIMSDK sharedSDK ] chatManager ] fetchMessageAttachment: currentM error: nil ];
88+ }else {
89+ [[[NIMSDK sharedSDK ] chatManager ] resendMessage: currentM error: nil ];
90+ }
8691 }
8792}
8893
@@ -157,9 +162,15 @@ -(NSMutableArray *)setTimeArr:(NSArray *)messageArr{
157162 [dic setObject: @" send_succeed" forKey: @" status" ];
158163 break ;
159164 default :
160- [dic setObject: @" -1 " forKey: @" status" ];
165+ [dic setObject: @" send_failed " forKey: @" status" ];
161166 break ;
162167 }
168+ NSString *isFriend = [message.localExt objectForKey: @" isFriend" ];
169+ if ([isFriend length ]) {
170+ if ([isFriend isEqualToString: @" NO" ]) {
171+ [dic setObject: @" send_failed" forKey: @" status" ];
172+ }
173+ }
163174 [dic setObject: [NSNumber numberWithBool: message.isOutgoingMsg] forKey: @" isOutgoing" ];
164175 [dic setObject: [NSString stringWithFormat: @" %f " , message.timestamp] forKey: @" timeString" ];
165176 [dic setObject: [NSNumber numberWithBool: NO ] forKey: @" isShowTime" ];
@@ -363,21 +374,28 @@ - (void)stopPlay{
363374// 发送录音
364375-(void )sendAudioMessage : ( NSString *)file duration : ( NSString *)duration {
365376 if (file) {
366- [[[NIMSDK sharedSDK ] chatManager ] sendMessage: [NIMMessageMaker msgWithAudio: file andeSession: _session] toSession: _session error: nil ];
377+ NIMMessage *message = [NIMMessageMaker msgWithAudio: file andeSession: _session];
378+ if ([self isFriendToSendMessage: message]) {
379+ [[[NIMSDK sharedSDK ] chatManager ] sendMessage: message toSession: _session error: nil ];
380+ }
367381 }
368382}
369383// 发送文字消息
370384-(void )sendMessage : (NSString *)mess andApnsMembers : (NSArray *)members {
371385 NIMMessage *message = [NIMMessageMaker msgWithText: mess andApnsMembers: members andeSession: _session];
372386 // 发送消息
373- [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
387+ if ([self isFriendToSendMessage: message]) {
388+ [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
389+ }
374390}
375391// 发送图片
376392-(void )sendImageMessages : ( NSString *)path displayName : ( NSString *)displayName {
377393 UIImage *img = [[UIImage alloc ]initWithContentsOfFile:path];
378394 NIMMessage *message = [NIMMessageMaker msgWithImage: img andeSession: _session];
379395// NIMMessage *message = [NIMMessageMaker msgWithImagePath:path];
380- [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
396+ if ([self isFriendToSendMessage: message]) {
397+ [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
398+ }
381399}
382400
383401// 发送视频
@@ -388,6 +406,9 @@ -(void)sendTextMessage:( NSString *)path duration:( NSString *)duration width:
388406 // }else{
389407 message = [NIMMessageMaker msgWithVideo: path andeSession: _session];
390408 // }
409+ if ([self isFriendToSendMessage: message]) {
410+ [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
411+ }
391412 [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
392413
393414}
@@ -398,15 +419,19 @@ -(void)sendCustomMessage:( NSString *)attachment config:( NSString *)config{
398419 NIMObject *obj = [NIMObject initNIMObject ];
399420 obj.attachment =attachment;
400421 message = [NIMMessageMaker msgWithCustom: obj andeSession: _session];
401- [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
422+ if ([self isFriendToSendMessage: message]) {
423+ [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
424+ }
402425}
403426
404427// 发送地理位置消息
405428-(void )sendLocationMessage : ( NSString *)latitude longitude : ( NSString *)longitude address : ( NSString *)address {
406429 NIMLocationObject *locaObj = [[NIMLocationObject alloc ]initWithLatitude:[latitude doubleValue ] longitude: [longitude doubleValue ] title: address];
407430 NIMKitLocationPoint *locationPoint = [[NIMKitLocationPoint alloc ]initWithLocationObject:locaObj];
408431 NIMMessage *message = [NIMMessageMaker msgWithLocation: locationPoint andeSession: _session];
409- [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
432+ if ([self isFriendToSendMessage: message]) {
433+ [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
434+ }
410435}
411436// 发送自定义消息2
412437-(void )sendCustomMessage : (NSInteger )custType data : (NSDictionary *)dataDict {
@@ -415,7 +440,9 @@ -(void)sendCustomMessage:(NSInteger )custType data:(NSDictionary *)dataDict{
415440 obj.custType = custType;
416441 obj.dataDict = dataDict;
417442 message = [NIMMessageMaker msgWithCustomAttachment: obj andeSession: _session];
418- [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
443+ if ([self isFriendToSendMessage: message]) {
444+ [[NIMSDK sharedSDK ].chatManager sendMessage: message toSession: _session error: nil ];
445+ }
419446}
420447
421448// 发送提醒消息
@@ -518,6 +545,16 @@ - (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error
518545 [self refrashMessage: message From: @" send" ];
519546 [[NSUserDefaults standardUserDefaults ]setObject: [NSString stringWithFormat: @" %f " , message.timestamp] forKey: @" timestamp" ];
520547 }else {
548+ NSDictionary *userInfo = error.userInfo ;
549+ NSString *strEnum = [userInfo objectForKey: @" enum" ];
550+ if ([strEnum isEqualToString: @" NIMRemoteErrorCodeInBlackList" ]) {
551+ NSString * tip = @" 消息已发出,但被对方拒收了" ;
552+ NIMMessage *tipMessage = [self msgWithTip: tip];
553+ tipMessage.timestamp = message.timestamp ;
554+ [[NIMSDK sharedSDK ].conversationManager saveMessage: tipMessage forSession: _session completion: nil ];
555+ }
556+ message.localExt = @{@" isFriend" :@" NO" };
557+ [[NIMSDK sharedSDK ].conversationManager updateMessage: message forSession: _session completion: nil ];
521558 [self refrashMessage: message From: @" send" ];
522559 }
523560 NIMModel *model = [NIMModel initShareMD ];
@@ -544,9 +581,7 @@ - (void)onRecvMessages:(NSArray *)messages
544581 if ([message.session.sessionId isEqualToString: _sessionID]) {
545582 [self refrashMessage: message From: @" receive" ];
546583 NIMMessageReceipt *receipt = [[NIMMessageReceipt alloc ] initWithMessage: message];
547-
548- [[[NIMSDK sharedSDK ] chatManager ] sendMessageReceipt: receipt
549- completion: nil ];
584+ [[[NIMSDK sharedSDK ] chatManager ] sendMessageReceipt: receipt completion: nil ];
550585 // 标记已读消息
551586 [[NIMSDK sharedSDK ].conversationManager markAllMessagesReadInSession: _session];
552587
@@ -780,9 +815,15 @@ -(void)refrashMessage:(NIMMessage *)message From:(NSString *)from {
780815 [dic2 setObject: @" send_succeed" forKey: @" status" ];
781816 break ;
782817 default :
783- [dic2 setObject: @" -1 " forKey: @" status" ];
818+ [dic2 setObject: @" send_failed " forKey: @" status" ];
784819 break ;
785820 }
821+ NSString *isFriend = [message.localExt objectForKey: @" isFriend" ];
822+ if ([isFriend length ]) {
823+ if ([isFriend isEqualToString: @" NO" ]) {
824+ [dic2 setObject: @" send_failed" forKey: @" status" ];
825+ }
826+ }
786827 [dic2 setObject: [NSNumber numberWithBool: message.isOutgoingMsg] forKey: @" isOutgoing" ];
787828 [dic2 setObject: [NSString stringWithFormat: @" %f " , message.timestamp] forKey: @" timeString" ];
788829 [dic2 setObject: [NSNumber numberWithBool: NO ] forKey: @" isShowTime" ];
@@ -1135,4 +1176,33 @@ -(void)stopSession;
11351176 [[NIMSDK sharedSDK ].conversationManager removeDelegate: self ];
11361177 [[NIMSDK sharedSDK ].systemNotificationManager removeDelegate: self ];
11371178}
1179+ // 判断是不是好友
1180+ - (BOOL )isFriendToSendMessage : (NIMMessage *)message {
1181+ if (_session.sessionType == NIMSessionTypeP2P) {// 点对点
1182+ NSString *strSessionId = _session.sessionId ;
1183+ if ([[NIMSDK sharedSDK ].userManager isMyFriend: strSessionId]) {// 判断是否为自己好友
1184+ return YES ;
1185+ }else {
1186+ message.localExt = @{@" isFriend" :@" NO" };
1187+ [[NIMSDK sharedSDK ].conversationManager saveMessage: message forSession: _session completion: nil ];
1188+ NSString *strSessionName = @" " ;
1189+ NIMUser *user = [[NIMSDK sharedSDK ].userManager userInfo: strSessionId];
1190+ if ([user.alias length ]) {
1191+ strSessionName = user.alias ;
1192+ }else {
1193+ NIMUserInfo *userInfo = user.userInfo ;
1194+ strSessionName = userInfo.nickName ;
1195+ }
1196+
1197+ NSString * tip = [NSString stringWithFormat: @" %@ 开启了朋友验证,你还不是他(她)朋友。请先发送朋友验证请求,对方验证通过后,才能聊天。" ,strSessionName];
1198+ NIMMessage *tipMessage = [self msgWithTip: tip];
1199+ tipMessage.timestamp = message.timestamp +1 ;
1200+ [[NIMSDK sharedSDK ].conversationManager saveMessage: tipMessage forSession: _session completion: nil ];
1201+ return NO ;
1202+ }
1203+ }else {
1204+ return YES ;
1205+ }
1206+ }
1207+
11381208@end
0 commit comments