自定义融云会话列表 cell 选中背景

技术交流王叫兽 发表了文章 • 0 个评论 • 83 次浏览 • 2021-01-08 11:35 • 来自相关话题

项目用的融云,IMKit SDK(自带 UI),但是在使用会话列表的时候,cell 选中和长按的时候默认是灰色的。设计说需要改啊,那就研究一下如何修改吧。废话不多说,直接继承 RCConversationListViewController,然后重写以下方法1... ...查看全部

项目用的融云,IMKit SDK(自带 UI),但是在使用会话列表的时候,cell 选中和长按的时候默认是灰色的。设计说需要改啊,那就研究一下如何修改吧。废话不多说,直接继承 RCConversationListViewController,然后重写以下方法
1.以下代码是去掉选中颜色的

- (void)willDisplayConversationTableCell:(RCConversationBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

2.以下代码是重写颜色的,想配啥色请随意

- (void)willDisplayConversationTableCell:(RCConversationBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    UIView *backView = [[UIView alloc] init];
    backView.backgroundColor = [UIColor redColor];
    cell.selectedBackgroundView = backView;
}

SDK 开放出来的 .h 类对方法注释写的很详细,建议大家多看一下,这样可以快速集成,少走弯路。也是培养集成第三方库的好习惯。融云(www.rongcloud.cn)

如何设置融云用户信息

技术交流dht1212 发表了文章 • 0 个评论 • 80 次浏览 • 2021-01-08 11:35 • 来自相关话题

最近在使用融云,由于第一次使用,遇到了一个小坑,在这里记录一下,希望能帮助到后续开发者问题是使用了融云的 IMKit 组件,也就是自带 UI 的,对于快速试错的产品来说,工期必须短,所以使用 IMKit 是非常方便的,省去了很大部分时间去搞界面。但是使用过程中... ...查看全部

最近在使用融云,由于第一次使用,遇到了一个小坑,在这里记录一下,希望能帮助到后续开发者

问题是使用了融云的 IMKit 组件,也就是自带 UI 的,对于快速试错的产品来说,工期必须短,所以使用 IMKit 是非常方便的,省去了很大部分时间去搞界面。但是使用过程中发现,没有用户的头像和昵称。后来经过阅读文档发现,需要设置“用户信息提供者”代理方法。SDK 在需要显示头像和昵称的时候,会通过这个代理找开发者索取用户信息,开发者只要遵循代理,且实现代理方法,返回用户信息即可。

上代码:

1.遵循代理

@interface AppDelegate () <RCIMUserInfoDataSource>
@end

2.设置代理

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //必须先初始化
    [[RCIM sharedRCIM] initWithAppKey:"开发者自己的 appkey"];
    [[RCIM sharedRCIM] connectWithToken:"当前用户的 token" dbOpened:^(RCDBErrorCode code) {
        } success:^(NSString *userId) {
        } error:^(RCConnectErrorCode errorCode) {
        }];
    //设置当前用户信息
    RCUserInfo *currentUser = [[RCUserInfo alloc] initWithUserId:@"tiezhu" name:@"铁柱" portrait:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1573646812313&di=116350f184eda99d91393304fa83a6ea&imgtype=0&src=http%3A%2F%2Fimg.jinse.com%2F712431_image3.png"];
    [RCIM sharedRCIM].currentUserInfo = currentUser;
    //设置代理
    [RCIM sharedRCIM].userInfoDataSource = self;
}

3.实现代理方法

- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *userInfo))completion {
    //这里最好是从开发者自己服务器获取用户信息,然后返回。此处仅为示例
    RCUserInfo *user = nil;
    if ([userId isEqualToString:@"tiezhu"]) {
        user = [[RCUserInfo alloc] initWithUserId:@"tiezhu" name:@"铁柱" portrait:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1570172426&di=01d14daa81f320235376d9c4dede0493&imgtype=jpg&er=1&src=http%3A%2F%2Fgss0.baidu.com%2F-vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2Fd788d43f8794a4c240e9466f0ef41bd5ac6e39af.jpg"];
    }
    if (completion) {
        completion(user);
    }
}

到此就搞定了兄嘚,值一杯秋天的奶茶

给融云的输入框上方加个功能按钮,怎么整?

技术交流王叫兽 发表了文章 • 0 个评论 • 79 次浏览 • 2021-01-08 11:29 • 来自相关话题

给输入框上方加个功能按钮,类似常用语或者抽奖啥的,是个挺普遍的需求,可惜遍寻文档(https://docs.rongcloud.cn/v4/)无果,只能靠自己了,咱们来看看怎么做吧。首先,我们要先在聊天页面添加个属性,也就是需要功能按钮所在的 view@pro... ...查看全部

给输入框上方加个功能按钮,类似常用语或者抽奖啥的,是个挺普遍的需求,可惜遍寻文档(https://docs.rongcloud.cn/v4/)无果,只能靠自己了,咱们来看看怎么做吧。

首先,我们要先在聊天页面添加个属性,也就是需要功能按钮所在的 view

@property (nonatomic, strong) UIView *needAddView;

再就是需要重写 viewWillAppear 生命周期函数,添加这个 needAddView,设置 UI 布局,保证进入页面时,needAddView 可以正确显示

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    //初始化 needAddView,添加到 self.view 上,坐标 y = 输入框的 y 坐标 - needAddView 高度
    CGFloat needAddView_height = 50.f;
    CGFloat y = self.chatSessionInputBarControl.frame.origin.y - needAddView_height;
    self.needAddView = [[UIView alloc] initWithFrame:CGRectMake(0, y, self.conversationMessageCollectionView.frame.size.width, needAddView_height)];
    self.needAddView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:self.needAddView];
    //设置消息内容 collectionView 的高度,要减去 needAddView 的高度,避免被遮挡。
    CGRect frame = self.conversationMessageCollectionView.frame;
    frame.size.height -= needAddView_height;
    self.conversationMessageCollectionView.frame = frame;
}

最后需要根据输入框的位置变化,对 UI 布局做改变

-(void)chatInputBar:(RCChatSessionInputBarControl *)chatInputBar shouldChangeFrame:(CGRect)frame {
    //切记要调用父类方法,保证 UI 布局显示正确
    [super chatInputBar:chatInputBar shouldChangeFrame:frame];
    //needAddView 的坐标 y = 输入框的 y 坐标 - needAddView 高度。回调方法中的 frame 是输入框改变后的值。
    CGRect viewFrame = self.needAddView.frame;
    viewFrame.origin.y = frame.origin.y - viewFrame.size.height;
    self.needAddView.frame = viewFrame;
    //设置消息内容 collectionView 的高度,要减去 needAddView 的高度,避免被遮挡。
    CGRect collectionViewFrame = self.conversationMessageCollectionView.frame;
    collectionViewFrame.size.height -= self.needAddView.frame.size.height;
    self.conversationMessageCollectionView.frame = collectionViewFrame;
    //重新设置消息内容 collectionView 的 ContentOffset,正常显示消息内容。
    if (self.conversationMessageCollectionView.contentSize.height > collectionViewFrame.size.height) {
        [self.conversationMessageCollectionView setContentOffset:CGPointMake(0, self.conversationMessageCollectionView.contentSize.height - collectionViewFrame.size.height) animated:NO];
    }
}

最后再提一句,如果有类似的功能需求实现不了的,可以去融云官网(https://www.rongcloud.cn/),登录后台提工单,他们会有专人给出解决方案。

如何隐藏融云输入框语音按钮

技术交流王叫兽 发表了文章 • 0 个评论 • 75 次浏览 • 2021-01-08 11:29 • 来自相关话题

项目中使用了融云自带页面的 IMKit SDK,产品需求是不需要输入框处的语音按钮。发现 SDK 接口还是比较强大的,但是需要认真的查看 .h 文件 API 注释。直接使用聊天页面的 chatSessionInputBarControl 属性即可.它内部有接口... ...查看全部

项目中使用了融云自带页面的 IMKit SDK,产品需求是不需要输入框处的语音按钮。发现 SDK 接口还是比较强大的,但是需要认真的查看 .h 文件 API 注释。直接使用聊天页面的 chatSessionInputBarControl 属性即可.它内部有接口可以设置输入框类型:

上代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.chatSessionInputBarControl setInputBarType:RCChatSessionInputBarControlDefaultType
                                                   style:RC_CHAT_INPUT_BAR_STYLE_CONTAINER_EXTENTION];
}


融云 IM SDK 如何插入消息

技术交流柠檬^ 发表了文章 • 0 个评论 • 78 次浏览 • 2021-01-08 11:15 • 来自相关话题

使用融云 IMKit SDK 集成的时候,需要插入一条消息,然后及时刷新 UI,但是集成完,由于对 SDK 不熟悉,只有退出聊天页面再进来才会刷新出来。于是后台提工单,技术大大给提供了方案,一语中的,解决了我的需求,非常感谢,特此记录,留给需要的朋友//下述代... ...查看全部

使用融云 IMKit SDK 集成的时候,需要插入一条消息,然后及时刷新 UI,但是集成完,由于对 SDK 不熟悉,只有退出聊天页面再进来才会刷新出来。于是后台提工单,技术大大给提供了方案,一语中的,解决了我的需求,非常感谢,特此记录,留给需要的朋友

//下述代码需要在聊天页子类调用, 因为 appendAndDisplayMessage 是聊天页的方法
RCTextMessage *msg = [RCTextMessage messageWithContent:@"hello world"];
RCMessage *insertMsg = [[RCIMClient sharedRCIMClient] insertOutgoingMessage:ConversationType_PRIVATE targetId:self.targetId sentStatus:SentStatus_SENT content:msg];
[self appendAndDisplayMessage:insertMsg];

想了解更多可以自行到融云官网查看 (https://www.rongcloud.cn/)

集成融云 IMLib 时,如何实现一套类似于 IMKit 的用户信息管理机制

技术交流柠檬^ 发表了文章 • 0 个评论 • 77 次浏览 • 2021-01-08 11:15 • 来自相关话题

背景我们在设计聊天类 APP 都会有一套完整的用户信息存储机制,用来保存我们的通讯录列表,以及每个用户的头像、昵称、姓名、等等一系列的用户信息,防止我们过多的进行服务器请求,对用户体验很差。这篇文章就简单的给大家创建一套用户信息机制来提供一个简单的思路。场景如... ...查看全部

背景

我们在设计聊天类 APP 都会有一套完整的用户信息存储机制,用来保存我们的通讯录列表,以及每个用户的头像、昵称、姓名、等等一系列的用户信息,防止我们过多的进行服务器请求,对用户体验很差。这篇文章就简单的给大家创建一套用户信息机制来提供一个简单的思路。

场景如下:
目前我们集成了融云的 IMLib SDK , 融云 IMLib SDK 仅提供了消息数据的存储与查询。用户信息和 UI 界面需要我们自己来维护,而融云的 IMKit 虽然提供了用户信息的管理,但是部分 UI 还是和我们产品设计不符的,那么如何设计一套类似于 IMKit 的用户信息管理机制,就是我们面临的问题。

融云SDK:
https://docs.rongcloud.cn/v4/

思考

我们在实现这套机制的时候都需要哪些内容?

  1. 首先我们要进行存储,存储那就需要维护一个数据库。参考融云 IMKit 发现有下面一个配置

/*!
 是否将用户信息和群组信息在本地持久化存储,默认值为NO
 @discussion
 如果设置为NO,则SDK在需要显示用户信息时,会调用用户信息提供者获取用户信息并缓存到Cache,此Cache在App生命周期结束时会被移除,下次启动时会再次通过用户信息提供者获取信息。
 如果设置为YES,则会将获取到的用户信息持久化存储在本地,App下次启动时Cache会仍然有效。
 */
@property (nonatomic, assign) BOOL enablePersistentUserInfoCache;

经过测试以及融云专业技术人员的回答,发现这个配置起到的作用就是本次的用户信息是否会进行数据库存储。

这里的数据库存储是指当此配置生效时,会在本地进行数据库文件的创建。而不生效的时候,是不创建的。如果不创建的话还需要存储的话,那应该就是存储到内存了。 而我们是需要每次登陆都有一些用户信息的,那不需要使用内存了,需要我们进行数据库存储,所以我们需要准备一个 db 的管理类,处理所有的数据库操作。

实现

以 融云 SDK 为例,以一个用户的 userinfo 为例大体来绘制一下整个流程图。

首先整理一些各个类的用处,大体内容如下:

UserInfoDBHelper: 数据库管理

#import <Foundation/Foundation.h>
#import "UserInfo.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserInfoDBHelper : NSObject
- (void)createDB;
- (UserInfo *)getUserInf(NSString *)userId;
- (void)refreshUserInf(UserInfo *)userInfo;
@end
NS_ASSUME_NONNULL_END

UserInf 用户信息模型

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UserInfo : NSObject
/**
 id
 name
 url
 */
@end
NS_ASSUME_NONNULL_END


UserInfoCache: 用户信息读取类

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UserInfoCache : NSObject
- (UserInfo *)getUserInf(NSString *)userId;
- (void)refreshUserInf(UserInfo *)userInfo;
@end
NS_ASSUME_NONNULL_END

UserInfoManager: 对外入口

#import <Foundation/Foundation.h>
#import "UserInfo.h"
NS_ASSUME_NONNULL_BEGIN
@protocol UserInfoDelegate <NSObject>
- (void)getServerUserInf(NSString *)userid;
@end
@interface UserInfoManager : NSObject
@property (nonatomic, weak) id<UserInfoDelegate> delegate;
- (UserInfo *)getUserInf(NSString *)userid;
- (void)refreshUserInf(UserInfo *)userInfo;
@end
NS_ASSUME_NONNULL_END

此处提供了一个简单的流程图,供大家参考

image.png

解析:

  1. 首先用户登录,

  2. 绘制 UI,同时根据用户的 id 来调用 manager.getuserinfo。

  3. manager 会调用用户的 cache 类来获取 db 内的用户信息。

  4. 在 cache 调用的时候如果你进行了内存缓存则先在内存缓存中进行查找,然后调用 db.get 进行查找

  5. db 在首次使用的时候会进行数据库文件检查,不存在则创建并直接用户信息返回空。然后调用
    manager 的 delegate 获取用户信息,再拿到用户信息后发送通知来刷新 UI。
    6.如果已创建的直接调用 db 的 get。然后刷新 UI。

整体先只提供了一个思路,具体里面的一些内部优化还需实践。

可能用到的技术点:

  1. SQL 的使用

  2. 单例类的使用

  3. GCD 队列

  4. 通知

  5. 代理

  6. 如果使用内存缓存的话还需要保证线程安全。

整体的一个简单思路就是上面供大家参考,待我写完再分享整体代码给大家。


为融云聊天页面的输入框添加 Placeholder

技术交流柠檬^ 发表了文章 • 0 个评论 • 69 次浏览 • 2021-01-08 11:15 • 来自相关话题

产品要求给输入框加个Placeh,其实挺简单一功能,寻遍他们的官网https://www.rongcloud.cn/和文档https://docs.rongcloud.cn/v4/都没有找到相关资料,现实很残酷,SDK 木有这个接口,只能自己实现了,... ...查看全部

产品要求给输入框加个Placeh,其实挺简单一功能,寻遍他们的官网https://www.rongcloud.cn/和文档https://docs.rongcloud.cn/v4/都没有找到相关资料,现实很残酷,SDK 木有这个接口,只能自己实现了,思来想去,用了个笨办法,加个 UILabel 一试,还真行,有需要的您请往下看。

其实就是给输入框价格 UILabel,在该显示的时候显示,该隐藏的时候隐藏就完事儿了,代码如下:

  1. 在聊天页面添加一个 UILabel 属性

@property(nonatomic, strong) UILabel *placeholderLabel;
  1. 初始化并添加 placeholderLabel 对象

- (void)configPlaceholder {    
    //初始化和设置    
    self.placeholderLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 180, 20)];
    [self.chatSessionInputBarControl.inputTextView addSubview:self.placeholderLabel];
    self.placeholderLabel.text = @"测试 Placeholder";    
    self.placeholderLabel.textColor = [UIColor grayColor];    
    self.placeholderLabel.userInteractionEnabled = YES;    
    //添加点击手势    
    UITapGestureRecognizer *tapLabel = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapPlaceholderLabel)];    
    [self.placeholderLabel addGestureRecognizer:tapLabel];
}
- (void)tapPlaceholderLabel {    
    [self.chatSessionInputBarControl updateStatus:KBottomBarKeyboardStatus animated:YES];
}
  1. 在内容发生变化和点击发送后,设置 placeholder 效果的显示

- (void)inputTextView:(UITextView *)inputTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {    
    //在内容发生变化和点击发送后,设置 placeholder 效果的显示    
    if ((range.location == 0 && [text isEqualToString:@""]) || [text isEqualToString:@"
"]) {        
        self.placeholderLabel.hidden = NO;    
        } else {        
        self.placeholderLabel.hidden = YES;    
        }
}
  1. 还要提一下,融云的 SDK 有撤回消息以后的“重新编辑”功能,在这个时候,要关闭 placeholder 效果的显示

- (void)didTapReedit:(RCMessageModel *)model {    
    self.placeholderLabel.hidden = YES;    
    [super didTapReedit:model];
}

到这儿功能就完成了,placeholderLabel 的具体文字效果可以自行修改调整,希望上面的代码可以帮到你,喜欢的话,点个赞吧。

30 分钟集成融云 IM 即时通讯

技术交流dht1212 发表了文章 • 0 个评论 • 85 次浏览 • 2021-01-08 11:13 • 来自相关话题

最近公司要做一个社交 app,对于时间就是金钱的当今社会,招聘大量人才去搭建通讯系统肯定是不划算的,花费人力物力财力做出来的 app,可能还没人用。那就瞎了。所以毋庸置疑,一拍即合,用第三方的。就开始了对于目前市面上主流的第三方 IM SDK 进行调研。其中有... ...查看全部

最近公司要做一个社交 app,对于时间就是金钱的当今社会,招聘大量人才去搭建通讯系统肯定是不划算的,花费人力物力财力做出来的 app,可能还没人用。那就瞎了。所以毋庸置疑,一拍即合,用第三方的。就开始了对于目前市面上主流的第三方 IM SDK 进行调研。其中有腾讯云,网易云信,融云,环信等。列出了一堆对比条件,最后领导拍板用哪个。末端程序员是没有选择权的。好好搬砖就可以了~要明白自己的身份,嘎嘎

过程不说了,最后选择了用融云,废话不多说,直接勒~这里只介绍一下如何快速集成,让俩人聊起来,这也算是一个里程碑啊。对于程序员来说,聊不起来可就毁了,领导都特么奶凶奶凶的~~~

1.先到融云官网 (https://www.rongcloud.cn/) 进行注册(注册按钮自己找吧),这个可以让你们产品经理或者啥领导去做,可以用公司的邮箱,别用自己的吧,后期自己换了地儿,对公司也是损失不是。注册后添加应用,拿到 appkey

2.xcode 创建一个新工程,或者找自己公司的项目,这里我推荐使用 pod 方式管理第三方,方便快捷,省时省力。因为手动方式太落后了,且配置繁琐,稍有遗漏就会报错,有些报错排查起来费时费力费心费电,所以还是老老实实的用 pod 吧。不听老人言,吃亏在眼前,听哥的没错,融云文档写了如何用 pod,几行命令的事。弄完后,也就是把 SDK 集成好了,跑一下工程,如果不报错,祝贺你兄嘚,马上可以聊天了,看下一步

3.需要在 appDelegate 中导入头文件。#import 。对了,我们用的是带界面的 SDK,快速集成不费事。


4.初始化 SDK

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //下边引号内需要替换为你的 appkey,别特么原封不动的抄哈,嘎嘎
    [[RCIM sharedRCIM] initWithAppKey:@"融云开发者后台的 AppKey"];
    return YES;
}

5.这一步该连接融云了兄嘚

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[RCIM sharedRCIM] initWithAppKey:@"获取到的 AppKey"];
    [[RCIM sharedRCIM] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值"
                           dbOpened:^(RCDBErrorCode code) {}
                            success:^(NSString *userId) {}
                              error:^(RCConnectErrorCode status) {}];
    return YES;
}

敲黑板1:在这我得多说你几句,必须要看成功回调和失败回调的调用,进了 success 就是成功了,进了 error 就是错误了。错误了你要看 status 状态码啊,根据错误码来找问题。我在调试过程中就遇到了 RC_CONN_TOKEN_INCORRECT 错误码,顾名思义:token 不正确。这个就要找自己的服务端人员看是哪里问题导致的 token 不正确了。

敲黑板1:还有 @”开发者的 server 通过请求 server api 获取到的 token 值”,这个 token,在刚开始测试的时候,你们的服务端可能还没集成,所以可以先到融云开发者后台“服务管理” - “API 调用” - “用户服务” - “获取 Token” 那里,随便输入一个 userId,name,portraitUri,就可得到 token 了。用这个 token 去连接即可,省时省力。

6.至此,恭喜你啊,已经连接融云成功了。下一步就是该琢磨如何找人聊天了。

7.聊天,需要俩人,对吧,现在连接的用户为之一,另一个需要再去融云开发者后台申请一个 token,记住他的 userId,发消息是需要 userId 的。然后创建个按钮,点击事件写如下代码即可,跳转之后,就能聊天了。然后再跑一个模拟器或者真机,用后申请的 token 登陆,俩人就能互相对话了。

RCConversationViewController *chatViewController = 
[[RCConversationViewController alloc] 
initWithConversationType:ConversationType_PRIVATE targetId:"后申请 token 时填写的 userId"];
[self.navigationController pushViewController:chatViewController animated:YES];


简单介绍融云 imkit 包含功能

技术交流dht1212 发表了文章 • 0 个评论 • 79 次浏览 • 2021-01-08 11:13 • 来自相关话题

说明本篇文章简单介绍一下融云 imkit 包含的功能,大家可在阅读之后来对大体内容有一个基础的了解。详细内容还请翻阅 官方文档基本内容融云 imkit 是为了方便开发者快速集成而开发的一套 UI 库,里面主要包含三部分内容:用户信息会话列表会话页面用... ...查看全部

说明

本篇文章简单介绍一下融云 imkit 包含的功能,大家可在阅读之后来对大体内容有一个基础的了解。详细内容还请翻阅 官方文档

基本内容

融云 imkit 是为了方便开发者快速集成而开发的一套 UI 库,里面主要包含三部分内容:

  • 用户信息

  • 会话列表

  • 会话页面

image.png

用户信息

image.png

用户信息是指融云 SDK 提供了一套完整的用户信息的显示与存储机制,里面包含了用户信息、群信息、群名片信息,开发者仅仅需要将自己 App Server 内的用户信息包装成一个融云的特有的用户信息对象,然后传递给对应的接口即可。之后融云 SDK 会自己帮助显示对应用户的用户信息,并存储在本地数据库,方便后续的读取。

大体的显示流程可参考官方的流程图:

image.png

会话列表

image.png

会话列表是融云 SDK 根据消息生成的一个 list

当收到一条新消息并且会话列表没有当前会话的时候,SDK 会自动生成一条新的会话数据,并添加到 tableview 中。

需要注意的是融云的会话列表不会存储在服务器中,只在本地存储。当切换设备时,需要去融云开发者后台开通多设备同步,这样在新设备登录的时候,会触发融云的消息补偿,当移动端接收到消息的时候,会在新设备也生成一个新的会话列表。正常情况就是你设置几天就补偿几天。

支持的功能有:

  • 会话置顶

  • 会话删除

  • 会话免打扰

  • 已读回执显示

  • 有人@显示

会话页面

image.png

融云的会话页面整体可分为两部分

  • 消息展示区

  • 输入框

消息展示

消息展示就是当前用户收发消息展示的地方,和常规 APP 一样,接收在左边,发送在右边。发送方是不显示昵称的,接收方可根据配置来选择是否显示昵称。

SDK 自带的消息展示有

  • 文本消息

  • 语音消息

  • 图片消息

  • GIF 消息

  • 视频消息

  • 位置消息

  • 文件消息

  • 小灰条消息

开发者还能根据自己的需求来自定义其他消息,自定义消息有两种用法:

  1. 发送其他需要展示的消息,对应绑定一套 UI 组件,收到消息后,融云SDK 帮助你把绑定的这套 UI 展示到界面上。

  2. 当做控制消息:控制消息就是你不展示到界面上,但是你可以利用消息机制来做处理,从服务器或者其他地方下发一个指令,收到这个消息后,UI不会发生任何变化。但你可以根据这条消息来处理你的业务操作。比如刷新某个页面,获取某个信息等等

开发者可以继承融云的会话页面,在其子类来进行其他操作,在进入会话页面的时候,SDK 会自动拉取当前会话的历史聊天记录,这个操作会先从本地数据库获取,如果不够 10 条的话,会从服务器获取,需要开通历史消息云存储功能。(融云 SDK 会在本地搭建一套数据库,用来存储你所有的聊天内容)

在获取到历史记录之后,SDK 会自动帮你展示到 消息展示区。展示出来的消息都支持以下功能:

  • 发送出去的消息支持已读回执(单群聊)

  • 消息撤回:kit 默认为两分钟

  • 消息多选

  • 消息转发:支持合并转发

  • 消息引用

  • 消息删除

输入框

SDK 提供的输入框共分为四部分:

  • 文本输入

  • 语音输入

  • 表情

  • 扩展板

文本输入:

文本输入支持用户输入任何文本

群聊输入 @ 可触发@ 人功能

语音输入:

语音输入分为普通语音消息高清语音消息

高清语音消息是在2.9.25之后支持的。建议使用此套方案。

表情:
SDK 有一套默认的 emoji 表情,且支持表情自定义。

扩展板:

扩展板也就是 + 号区域,SDK 默认支持的功能有:

  • 音视频(需要集成 融云音视频,集成之后会自动出现)

  • 照片

  • 位置:支持位置实时共享

  • 语音输入:需要使用科大讯飞的库来做,融云提供了相关的库内容

  • 名片

  • 文件:文件消息是 SDK 下载到指定目录的文件,并非手机系统的文件。

  • 其他:自定义内容,可根据自己的业务添加其他的小内容。

此外,SDK还提供了 常用语功能,目前仅支持单聊,且字数在 30 字以内,可进行类似快捷回复之类的操作。

其他内容,后续补充。

更多详细的内容可自己阅读官网文档。


融云的聊天页面在 iOS14 出现崩溃的解决办法

技术交流dht1212 发表了文章 • 0 个评论 • 77 次浏览 • 2021-01-08 11:13 • 来自相关话题

升级 Xcode12 后,模拟器都是 iOS14 了,运行自己的项目,到了聊天页面就崩溃,具体崩溃信息为Thread 1: “-[_UIPageControlIndicatorContentView setImage:]: unrecognized selec... ...查看全部

升级 Xcode12 后,模拟器都是 iOS14 了,运行自己的项目,到了聊天页面就崩溃,具体崩溃信息为Thread 1: “-[_UIPageControlIndicatorContentView setImage:]: unrecognized selector sent to instance。

从崩溃看,猜测是因为缺少了某个方法导致了崩溃,提了个工单给融云,他们的技术支持服务还是挺到位的,很快给了答复,他们对这个问题已经做了及时处理(其实他们已经发了站内信和邮件,自己没注意),更新了官网下载和 pod 上的 SDK,卸载现有 SDK,重新下载 2.10.4 以上版本 SDK 就可以了。

并且这个崩溃只针对使用 imkit的,使用 imlib 的用户没事儿,下面是他们在工单里面回复的具体内容:

通过 Xcode 12 打包 App,在 iOS 14 版本中我司发现 2.x 、4.0.0 、4.0.0.1 版本的 IMKit SDK 与 iOS 14 出现了兼容问题,该问题会引起 App 崩溃,针对该问题进行了紧急的修复
您可以在如下版本获得修改后的 SDK 版本:
1、iOS IMKit SDK 版本为 4.0.0 和 4.0.0.1 的客户务必升级至 4.0.1+ 版本。
2、iOS IMKit SDK 版本为 2.x 客户务必升级至 2.10.6-DEV 或者 2.10.4-Stable( 9 月 18 日发布的版本),这两个版本已针对该问题进行了修复
(1)请务必于 2020 年 9 月 18 日以后重新下载获取 SDK,更新您的 App,下载地址:https://www.rongcloud.cn/downloads/history/ios
(2)使用 Pod 集成的客户,请参考文档先清理 Pod 缓存,文档地址:https://docs.rongcloud.cn/v4/views/im/ui/guide/private/setting/include/ios.html#cocoapods-clean
3、基于 iOS IMLib SDK 集成的客户不受影响。


小吐槽一下,这个崩溃问题虽然发了站内信和邮件,但还是不太容易一起注意,如果能在下面的官网或文档里面有个弹窗或浮动提示就更好了

融云官网:https://www.rongcloud.cn/
融云文档:https://docs.rongcloud.cn/v4


友情链接