私信模块:发送私信

This commit is contained in:
zu
2021-11-29 16:01:54 +08:00
parent f5b247a0da
commit 2ac8126660
7 changed files with 187 additions and 12 deletions

View File

@@ -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 = "<group>"; };
18EE3FF22750FA3700A452BF /* UIView+NIM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+NIM.h"; sourceTree = "<group>"; };
18EE3FF32750FA3700A452BF /* UIView+NIM.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+NIM.m"; sourceTree = "<group>"; };
18EE40182754BA9F00A452BF /* NIMMessageMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIMMessageMaker.m; sourceTree = "<group>"; };
18EE40192754BA9F00A452BF /* NIMMessageMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMMessageMaker.h; sourceTree = "<group>"; };
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 = "<group>"; };
9B0E1C5726E77022005D4442 /* BaseNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseNavigationController.h; sourceTree = "<group>"; };
9B0E1C5826E77022005D4442 /* BaseNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BaseNavigationController.m; sourceTree = "<group>"; };
@@ -1307,6 +1310,8 @@
18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */,
18EE3FEF2750D2AD00A452BF /* NIMTimeUtils.h */,
18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */,
18EE40192754BA9F00A452BF /* NIMMessageMaker.h */,
18EE40182754BA9F00A452BF /* NIMMessageMaker.m */,
);
path = Message;
sourceTree = "<group>";
@@ -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 */,

View File

@@ -0,0 +1,34 @@
//
// NIMMessageMaker.h
// xplan-ios
//
// Created by zu on 2021/11/28.
//
#import <Foundation/Foundation.h>
#import <NIMSDK/NIMSDK.h>
@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

View File

@@ -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

View File

@@ -7,12 +7,18 @@
#import <UIKit/UIKit.h>
#import "RoomHostDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@protocol SendMessageViewDelegate <NSObject>
- (void)sendTextMessage:(NSString *)text;
@end
@interface SendMessageView : UIView
@property (nonatomic, weak) id<SendMessageViewDelegate> delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -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;
}

View File

@@ -9,11 +9,13 @@
#import "MessageCell.h"
#import "SendMessageView.h"
#import "UITableView+NIMScrollToBottom.h"
#import "NIMMessageMaker.h"
#import "XPMacro.h"
#import <Masonry/Masonry.h>
@interface SessionViewController ()<UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate>
@interface SessionViewController ()<UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate, SendMessageViewDelegate>
@property (nonatomic, strong) NIMSession * session;
@property (nonatomic, strong) NSMutableArray<NIMMessage *> * messages;
@@ -73,9 +75,7 @@
}
- (void)initData {
NSArray<NIMMessage *> *messages = [[[NIMSDK sharedSDK] conversationManager] messagesInSession:self.session
message:nil
limit:1000];
NSArray<NIMMessage *> *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<NIMMessage *> *)messages {
if (!_messages) {
_messages = [[NSMutableArray alloc] init];
@@ -166,6 +178,7 @@
- (SendMessageView *)sendMessageView {
if (!_sendMessageView) {
_sendMessageView = [[SendMessageView alloc] init];
_sendMessageView.delegate = self;
}
return _sendMessageView;
}

View File

@@ -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;
}