From 2ac81266603c1c4447f34fc23660ffb81ef04ef4 Mon Sep 17 00:00:00 2001 From: zu Date: Mon, 29 Nov 2021 16:01:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=81=E4=BF=A1=E6=A8=A1=E5=9D=97=EF=BC=9A?= =?UTF-8?q?=E5=8F=91=E9=80=81=E7=A7=81=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 6 + xplan-ios/Main/Message/NIMMessageMaker.h | 34 ++++++ xplan-ios/Main/Message/NIMMessageMaker.m | 114 ++++++++++++++++++ .../Main/Message/Session/SendMessageView.h | 10 +- .../Main/Message/Session/SendMessageView.m | 12 +- .../Message/Session/SessionViewController.m | 21 +++- .../MenuContainerView/XPRoomSendTextView.m | 2 +- 7 files changed, 187 insertions(+), 12 deletions(-) create mode 100644 xplan-ios/Main/Message/NIMMessageMaker.h create mode 100644 xplan-ios/Main/Message/NIMMessageMaker.m diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 7bfd9835..1618c274 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -100,6 +100,7 @@ 18EE3FEE2750CE6D00A452BF /* NIMMessageUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */; }; 18EE3FF12750D2AD00A452BF /* NIMTimeUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */; }; 18EE3FF42750FA3700A452BF /* UIView+NIM.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FF32750FA3700A452BF /* UIView+NIM.m */; }; + 18EE401A2754BA9F00A452BF /* NIMMessageMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE40182754BA9F00A452BF /* NIMMessageMaker.m */; }; 73FFADDC93E195344047A2EC /* Pods_xplan_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_xplan_ios.framework */; }; 9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0E1C5826E77022005D4442 /* BaseNavigationController.m */; }; 9B7D804A2753783D003DAC0C /* SessionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B7D80492753783D003DAC0C /* SessionViewController.m */; }; @@ -459,6 +460,8 @@ 18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NIMTimeUtils.m; sourceTree = ""; }; 18EE3FF22750FA3700A452BF /* UIView+NIM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+NIM.h"; sourceTree = ""; }; 18EE3FF32750FA3700A452BF /* UIView+NIM.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+NIM.m"; sourceTree = ""; }; + 18EE40182754BA9F00A452BF /* NIMMessageMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIMMessageMaker.m; sourceTree = ""; }; + 18EE40192754BA9F00A452BF /* NIMMessageMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMMessageMaker.h; sourceTree = ""; }; 7DB00EC07F1D0ADFF900B38D /* Pods-xplan-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-xplan-ios.debug.xcconfig"; path = "Target Support Files/Pods-xplan-ios/Pods-xplan-ios.debug.xcconfig"; sourceTree = ""; }; 9B0E1C5726E77022005D4442 /* BaseNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseNavigationController.h; sourceTree = ""; }; 9B0E1C5826E77022005D4442 /* BaseNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BaseNavigationController.m; sourceTree = ""; }; @@ -1307,6 +1310,8 @@ 18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */, 18EE3FEF2750D2AD00A452BF /* NIMTimeUtils.h */, 18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */, + 18EE40192754BA9F00A452BF /* NIMMessageMaker.h */, + 18EE40182754BA9F00A452BF /* NIMMessageMaker.m */, ); path = Message; sourceTree = ""; @@ -2381,6 +2386,7 @@ 18EE3FE22750C29D00A452BF /* NIMBadgeView.m in Sources */, E82EE0F8272FDDFA00D15DC1 /* UserPrivacyView.m in Sources */, 189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */, + 18EE401A2754BA9F00A452BF /* NIMMessageMaker.m in Sources */, E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */, E890BC0D273D09A50007C46B /* XPGiftCountView.m in Sources */, E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */, diff --git a/xplan-ios/Main/Message/NIMMessageMaker.h b/xplan-ios/Main/Message/NIMMessageMaker.h new file mode 100644 index 00000000..1df71fbc --- /dev/null +++ b/xplan-ios/Main/Message/NIMMessageMaker.h @@ -0,0 +1,34 @@ +// +// NIMMessageMaker.h +// xplan-ios +// +// Created by zu on 2021/11/28. +// + +#import +#import + +@interface NIMMessageMaker : NSObject + ++ (NIMMessage*)msgWithText:(NSString *)text; + ++ (NIMMessage *)msgWithAudio:(NSString *)filePath; + ++ (NIMMessage *)msgWithImage:(UIImage *)image; + ++ (NIMMessage *)msgWithImagePath:(NSString *)path; + ++ (NIMMessage *)msgWithImageData:(NSData *)data extension:(NSString *)extension; + ++ (NIMMessage *)msgWithVideo:(NSString *)filePath; + +@end + + +@interface NIMCommentMaker : NSObject + ++ (NIMQuickComment *)commentWithType:(int64_t)type + content:(NSString *)content + ext:(NSString *)ext; + +@end diff --git a/xplan-ios/Main/Message/NIMMessageMaker.m b/xplan-ios/Main/Message/NIMMessageMaker.m new file mode 100644 index 00000000..ed58ea7a --- /dev/null +++ b/xplan-ios/Main/Message/NIMMessageMaker.m @@ -0,0 +1,114 @@ +// +// NIMMessageMaker.m +// xplan-ios +// +// Created by zu on 2021/11/28. +// + +#import "NIMMessageMaker.h" + +@implementation NIMMessageMaker + ++ (NIMMessage*)msgWithText:(NSString*)text +{ + NIMMessage *textMessage = [[NIMMessage alloc] init]; + textMessage.text = text; + [self setupMessage:textMessage]; + return textMessage; +} + ++ (NIMMessage*)msgWithAudio:(NSString*)filePath +{ + NIMAudioObject *audioObject = [[NIMAudioObject alloc] initWithSourcePath:filePath scene:NIMNOSSceneTypeMessage]; + NIMMessage *message = [[NIMMessage alloc] init]; + message.messageObject = audioObject; + message.text = @"发来了一段语音"; + [self setupMessage:message]; + return message; +} + ++ (NIMMessage*)msgWithVideo:(NSString*)filePath +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; + NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; + NIMVideoObject *videoObject = [[NIMVideoObject alloc] initWithSourcePath:filePath scene:NIMNOSSceneTypeMessage]; + videoObject.displayName = [NSString stringWithFormat:@"视频发送于%@", dateString]; + NIMMessage *message = [[NIMMessage alloc] init]; + message.messageObject = videoObject; + message.apnsContent = @"发来了一段视频"; + [self setupMessage:message]; + return message; +} + ++ (NIMMessage*)msgWithImage:(UIImage*)image +{ + NIMImageObject *imageObject = [[NIMImageObject alloc] initWithImage:image scene:NIMNOSSceneTypeMessage]; + NIMImageOption *option = [[NIMImageOption alloc] init]; + option.compressQuality = 0.7; + imageObject.option = option; + return [NIMMessageMaker generateImageMessage:imageObject]; +} + ++ (NIMMessage *)msgWithImagePath:(NSString*)path +{ + NIMImageObject * imageObject = [[NIMImageObject alloc] initWithFilepath:path scene:NIMNOSSceneTypeMessage]; + return [NIMMessageMaker generateImageMessage:imageObject]; +} + ++ (NIMMessage *)msgWithImageData:(NSData *)data extension:(NSString *)extension +{ + NIMImageObject *imageObject = [[NIMImageObject alloc] initWithData:data extension:extension]; + return [NIMMessageMaker generateImageMessage:imageObject]; +} + ++ (NIMMessage *)generateImageMessage:(NIMImageObject *)imageObject +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; + NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; + imageObject.displayName = [NSString stringWithFormat:@"图片发送于%@", dateString]; + NIMMessage *message = [[NIMMessage alloc] init]; + message.messageObject = imageObject; + message.apnsContent = @"发来了一张图片"; + [self setupMessage:message]; + return message; +} + ++ (void)setupMessage:(NIMMessage *)message +{ + message.apnsPayload = @{ + @"apns-collapse-id": message.messageId, + }; + + NIMMessageSetting *setting = [[NIMMessageSetting alloc] init]; + setting.scene = NIMNOSSceneTypeMessage; + message.setting = setting; +} + + +@end + + +@implementation NIMCommentMaker + ++ (NIMQuickComment *)commentWithType:(int64_t)type + content:(NSString *)content + ext:(NSString *)ext +{ + NIMQuickComment *comment = [[NIMQuickComment alloc] init]; + comment.ext = ext; + NIMQuickCommentSetting *setting = [[NIMQuickCommentSetting alloc] init]; + setting.needPush = YES; + setting.needBadge = YES; + setting.pushTitle = @"你收到了一条快捷评论"; + setting.pushContent = content; + setting.pushPayload = @{ + @"key" : @"value" + }; + comment.setting = setting; + comment.replyType = type; + return comment; +} + +@end diff --git a/xplan-ios/Main/Message/Session/SendMessageView.h b/xplan-ios/Main/Message/Session/SendMessageView.h index 66530c4c..24f1f7cc 100644 --- a/xplan-ios/Main/Message/Session/SendMessageView.h +++ b/xplan-ios/Main/Message/Session/SendMessageView.h @@ -7,12 +7,18 @@ #import -#import "RoomHostDelegate.h" - NS_ASSUME_NONNULL_BEGIN +@protocol SendMessageViewDelegate + +- (void)sendTextMessage:(NSString *)text; + +@end + @interface SendMessageView : UIView +@property (nonatomic, weak) id delegate; + @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Message/Session/SendMessageView.m b/xplan-ios/Main/Message/Session/SendMessageView.m index a0eaed96..2077bbd4 100644 --- a/xplan-ios/Main/Message/Session/SendMessageView.m +++ b/xplan-ios/Main/Message/Session/SendMessageView.m @@ -39,10 +39,12 @@ return self; } -#pragma mark - Response - -- (void)sendButtonDidClick:(UIButton *)sender { - +- (void)sendMessage:(UIButton *)sender { + if (self.delegate && [self.delegate respondsToSelector:@selector(sendTextMessage:)]) { + [self.delegate sendTextMessage:self.inputView.text]; + } + self.inputView.text = @""; + self.sendButton.enabled = self.inputView.text.length > 0; } - (void)keyboardWillShow:(NSNotification *)notification { @@ -179,7 +181,7 @@ _sendButton.enabled = NO; _sendButton.layer.cornerRadius = 5.0; _sendButton.layer.masksToBounds = YES; - [_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside]; + [_sendButton addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside]; } return _sendButton; } diff --git a/xplan-ios/Main/Message/Session/SessionViewController.m b/xplan-ios/Main/Message/Session/SessionViewController.m index 27acd2cb..f72a2c76 100644 --- a/xplan-ios/Main/Message/Session/SessionViewController.m +++ b/xplan-ios/Main/Message/Session/SessionViewController.m @@ -9,11 +9,13 @@ #import "MessageCell.h" #import "SendMessageView.h" #import "UITableView+NIMScrollToBottom.h" + +#import "NIMMessageMaker.h" #import "XPMacro.h" #import -@interface SessionViewController () +@interface SessionViewController () @property (nonatomic, strong) NIMSession * session; @property (nonatomic, strong) NSMutableArray * messages; @@ -73,9 +75,7 @@ } - (void)initData { - NSArray *messages = [[[NIMSDK sharedSDK] conversationManager] messagesInSession:self.session - message:nil - limit:1000]; + NSArray *messages = [[NIMSDK sharedSDK].conversationManager messagesInSession:self.session message:nil limit:1000]; [self.messages addObjectsFromArray:messages.copy]; [self.sessionTableView reloadData]; [self.sessionTableView nim_scrollToBottom:NO]; @@ -131,12 +131,24 @@ [[NIMSDK sharedSDK].conversationManager markAllMessagesReadInSession:self.session]; } +- (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error { + [self.messages addObject:message]; + [self.sessionTableView reloadData]; + [self.sessionTableView nim_scrollToBottom:YES]; +} + #pragma mark - NIMConversationManagerDelegate - (void)messagesDeletedInSession:(NIMSession *)session { [self.messages removeAllObjects]; [self initData]; } +#pragma mark - SendMessageViewDelegate +- (void)sendTextMessage:(NSString *)text { + NIMMessage *message = [NIMMessageMaker msgWithText:text]; + [[[NIMSDK sharedSDK] chatManager] sendMessage:message toSession:self.session error:nil]; +} + - (NSArray *)messages { if (!_messages) { _messages = [[NSMutableArray alloc] init]; @@ -166,6 +178,7 @@ - (SendMessageView *)sendMessageView { if (!_sendMessageView) { _sendMessageView = [[SendMessageView alloc] init]; + _sendMessageView.delegate = self; } return _sendMessageView; } diff --git a/xplan-ios/Main/Room/View/MenuContainerView/XPRoomSendTextView.m b/xplan-ios/Main/Room/View/MenuContainerView/XPRoomSendTextView.m index c521e19d..23c61115 100644 --- a/xplan-ios/Main/Room/View/MenuContainerView/XPRoomSendTextView.m +++ b/xplan-ios/Main/Room/View/MenuContainerView/XPRoomSendTextView.m @@ -238,7 +238,7 @@ _sendButton.enabled = NO; _sendButton.layer.cornerRadius = 5.0; _sendButton.layer.masksToBounds = YES; - [_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside]; + [_sendButton addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside]; } return _sendButton; }