融云升级到到5.0报错

IM即时通讯大神庵 发表了文章 • 0 个评论 • 158 次浏览 • 2021-03-18 11:45 • 来自相关话题

使用 pod ,从4.x版本升级到 5.x,写法和报错如下写法: [RCIM sharedRCIM].enableBurnMessage = YES; 报错:Property 'enableBurnMessage' not found on o... ...查看全部

使用 pod ,从4.x版本升级到 5.x,写法和报错如下

  1. 写法: [RCIM sharedRCIM].enableBurnMessage = YES; 报错:Property 'enableBurnMessage' not found on object of type 'RCIM *' 解决:把代码改成 RCKitConfigCenter.message.enableDestructMessage = YES; 因为 SDK 把接口从 RCIM 类移到了 RCKitMessageConf 中

  2. 解决完上述属性报错后,出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lopencore-amrnb
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"opencore-amrnb"

  3. 解决完上述报错后,又出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lopencore-amrwb
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"opencore-amrwb"

  4. 解决完上述报错后,又出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lvo-amrwbenc
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"vo-amrwbenc"

希望大家可以活学活用,在报错的时候全局搜一下对应的关键词,看是不是引用的问题导致


【iOS开发】如何使用融云的消息扩展

IM即时通讯fanta2 发表了文章 • 0 个评论 • 95 次浏览 • 2021-03-18 11:37 • 来自相关话题

从 【4.0.3 】版本开始,融云新增了消息扩展功能,文档如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/msgmanage/expansion/ios.html总结文档中的几... ...查看全部

从 【4.0.3 】版本开始,融云新增了消息扩展功能,文档如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/msgmanage/expansion/ios.html

总结文档中的几个重点:

  • 4.0.3之前的版本无法使用。

  • 消息扩展是RCMessage类的属性,也就是说自定义消息也可以使用。

  • 单条消息只能设置300个kv,(某些场景不可用,比如在群里发400个人可领的红包)。

  • 仅支持单聊、群聊。

  • key和value都是字符串类型,并且key不能是中文,否则会报错INVALID_PARAMETER。

  • 用IMKit的UI发送消息时需要拦截一下,设置消息扩展开关。

使用步骤:

  1. 消息的发送端必须给需要消息扩展的消息开开关,没有全局设置,只能单条消息设置。分以下两种情况:

  2. 如果使用的是IMKit提供的UI发送消息,或者使用RCConversationViewController中的sendMessage和sendMediaMessage方法发送消息,都会触发下面回调:

/*!
 准备发送消息的回调

 @param messageContent 消息内容

 @return 修改后的消息内容

 @discussion 此回调在消息准备向外发送时会回调,您可以在此回调中对消息内容进行过滤和修改等操作。
 如果此回调的返回值不为nil,SDK会对外发送返回的消息内容。
 */
- (RCMessageContent *)willSendMessage:(RCMessageContent *)messageContent;

在回调中判断如果是需要扩展的消息,就根据messageContent,自己构造一个RCMessage对象,并设置好canIncludeExpansion和expansionDic。

RCMessage *message = [[RCMessage alloc] initWithType:self.conversationType targetId:self.targetId direction:MessageDirection_SEND messageId:0 content:messageContent];
message.canIncludeExpansion = YES;
message.expansionDic = dict;

再调用RCIM中对应的send方法将消息发送出去,并且在准备发送消息的回调中return nil。

  • 如果是自己调用RCIM和RCIMClient接口发的消息,用RCMessageContent类的对象构造一个RCMessage对象,然后设置canIncludeExpansion和expansionDic再调用RCIM中对应的send方法将消息发送出去即可。

  • 更新和删除扩展的操作可以参考官方文档。

  • 想要实时捕获消息扩展的更改和删除,就需要设置回调,在回调中更新UI。设置回调可参考官方文档。


【iOS开发】自定义融云选取位置页面和位置信息页面的导航栏

IM即时通讯fanta2 发表了文章 • 0 个评论 • 91 次浏览 • 2021-03-18 11:37 • 来自相关话题

选取位置页面创建 RCLocationPickerViewController 的子类:RCDLocationViewController,可以实现自定义导航栏左右按钮- (void)viewDidLoad {   &n... ...查看全部
  1. 选取位置页面

  2. 创建 RCLocationPickerViewController 的子类:RCDLocationViewController,可以实现自定义导航栏左右按钮

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"自定义左按钮" style:UIBarButtonItemStyleDone target:self action:@selector(leftItemDidPressed:)];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor redColor];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"自定义右按钮" style:UIBarButtonItemStyleDone target:self action:@selector(rightItemDidPressed:)];
    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
- (void)leftItemDidPressed:(id)sendr {
    [self dismissViewControllerAnimated:YES completion:nil];
}
- (void)rightItemDidPressed:(id)sendr {
    [super rightBarButtonItemPressed:nil];
}
  • 在聊天页子类重写以下方法,并设置代理,present 到子类的对象中。

/*!
 扩展功能板的点击回调

 @param pluginBoardView 输入扩展功能板View
 @param tag             输入扩展功能(Item)的唯一标示
 */
- (void)pluginBoardView:(RCPluginBoardView *)pluginBoardView clickedItemWithTag:(NSInteger)tag {
    switch (tag) {
           case PLUGIN_BOARD_ITEM_LOCATION_TAG: {
               RCDLocationViewController *vc = [[RCDLocationViewController alloc] init];
               vc.delegate = self;
               UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:vc];
               [self presentViewController:navi animated:YES completion:nil];
           }
               break;

           default:
               [super pluginBoardView:pluginBoardView clickedItemWithTag:tag];
               break;
       }
}
  • 聊天页子类需要遵循代理 RCLocationPickerViewControllerDelegate,并实现方法: ```objective-c /*! 地理位置选择完成之后的回调

    @param locationPicker 地理位置选取的ViewController @param location 位置的二维坐标 @param locationName 位置的名称 @param mapScreenShot 位置在地图中的缩略图

    @discussion 如果您需要重写地理位置选择的界面,当选择地理位置完成后,需要调用此回调通知RCConversationViewController定位已完成,可以进一步生成位置消息并发送。 */

  • (void)locationPicker:(RCLocationPickerViewController *)locationPicker didSelectLocation:(CLLocationCoordinate2D)location

        locationName:(NSString *)locationName
       mapScreenShot:(UIImage *)mapScreenShot {

    RCLocationMessage *locationMessage = [RCLocationMessage messageWithLocationImage:mapScreenShot location:location locationName:locationName]; [self sendMessage:locationMessage pushContent:nil]; }

2. 位置信息页面
- 创建 RCLocationViewController 的子类LocationViewController

```objective-c
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"自定义左按钮" style:UIBarButtonItemStyleDone target:self action:@selector(leftItemDidPressed:)];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor redColor];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
- (void)leftItemDidPressed:(id)sendr {
    [self dismissViewControllerAnimated:YES completion:nil];
}
  • 在会话页面重写点击位置消息的回调 ```objective-c

/**

  • 打开地理位置。开发者可以重写,自己根据经纬度打开地图显示位置。默认使用内置地图 *

  • @param locationMessageContent 位置消息 */

    • (void)presentLocationViewController:(RCLocationMessage )locationMessageContent { // LocationViewController为 RCLocationViewController 的子类 LocationViewController locationViewController = [[LocationViewController alloc] init]; locationViewController.locationName = locationMessageContent.locationName; locationViewController.location = locationMessageContent.location; locationViewController.modalPresentationStyle = UIModalPresentationFullScreen; UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:locationViewController]; navc.modalPresentationStyle = UIModalPresentationFullScreen; [self presentViewController:navc animated:YES completion:NULL]; } ```


融云 iOS 常见问题总汇

IM即时通讯大神庵 发表了文章 • 0 个评论 • 66 次浏览 • 2021-03-18 11:37 • 来自相关话题

之前在给融云提工单时候,知道了他们有“知识库”这么个东东,就是一些问题解答的归纳总结库,可以通过搜索关键字,来找到问题描述和具体解答,其中有一篇汇总了 iOS 端的一些常见问题,搬运分享,原地址:https://support.rongcloud.cn/ks/... ...查看全部

之前在给融云提工单时候,知道了他们有“知识库”这么个东东,就是一些问题解答的归纳总结库,可以通过搜索关键字,来找到问题描述和具体解答,其中有一篇汇总了 iOS 端的一些常见问题,搬运分享,原地址:https://support.rongcloud.cn/ks/NjUx

log 和数据库:

log 重定向(重定向后导出 log,用于排查问题):http://[support.rongcloud.cn/kb/NDI0](http://support.rongcloud.cn/kb/NDI0)

导出数据库:https://support.rongcloud.cn/kb/MzYx

远程推送:

远程推送文档:https://docs.rongcloud.cn/v3/views/im/ui/guide/private/notify/push/ios.html

远程推送和本地通知的区别:http://support.rongcloud.cn/kb/Mjk4

收不到远程推送的排查步骤:http://support.rongcloud.cn/kb/MzEy

点击本地通知和远程推送通知栏跳转方法:http://support.rongcloud.cn/kb/NTYy

推送证书检查:http://support.rongcloud.cn/kb/NDI4 http://support.rongcloud.cn/kb/MzY2

自定义远程推送声音:http://support.rongcloud.cn/kb/NjQ2

本地通知重复弹出:http://support.rongcloud.cn/kb/Njc5

接收本地通知时,不弹通知栏的排查步骤:https://support.rongcloud.cn/ks/Mzky

适配 iOS 13 设置 deviceToken:https://support.rongcloud.cn/ks/MTAwMw==

用户如何实现接收推送撤回通知栏指定通知:https://support.rongcloud.cn/ks/ODcx

CocoaPods:

使用 CocoaPods 搜索不到最新版本的 SDK:http://support.rongcloud.cn/kb/NjUy

清除 cocoaPods 缓存及 Xcode 配置:https://support.rongcloud.cn/ks/OTky

会话列表:

会话列表为空时的背景图设置:http://support.rongcloud.cn/kb/MzA2

自定义会话列表 cell:http://support.rongcloud.cn/kb/MjUz

会话列表过滤某个特定会话:https://support.rongcloud.cn/ks/OTc4

点击会话列表 Cell,跳转到 @ 自己的消息:https://support.rongcloud.cn/ks/MTAyNw==

在会话列表 Cell 上,显示当前会话最后一条消息的状态是“已读”或“未读”:https://support.rongcloud.cn/ks/MTAyOQ==

聊天界面:

长按 cell 弹出功能:http://support.rongcloud.cn/kb/NTY3

长按消息 cell 的多选功能:http://support.rongcloud.cn/kb/NzI4

进入聊天界面为空,需要下拉才能显示数据:http://support.rongcloud.cn/kb/NTU4

聊天页面发送图片消,将图片传到指定服务器的处理方法:http://support.rongcloud.cn/kb/Njc2

在聊天页面输入框上方添加自定义 view:https://support.rongcloud.cn/ks/ODg1

刷新聊天页面消息 cell 的高度:https://support.rongcloud.cn/ks/OTMz

继承并重写位置页面:http://support.rongcloud.cn/kb/NDIy

撤回文本消息后,增加“重新编辑”功能:https://support.rongcloud.cn/ks/OTU2

隐藏输入框方法:https://support.rongcloud.cn/ks/OTY5

设置聊天页面导航栏按钮的处理方法:https://support.rongcloud.cn/ks/OTc5

“翻译”、“语音转文字”功能时,对于消息 cell 的处理:https://support.rongcloud.cn/ks/OTg2

没有音视频通话按钮:https://support.rongcloud.cn/ks/NTgx

去掉输入框和扩展板中间的白线:https://support.rongcloud.cn/ks/MTAyMA==

将会话页面中文本消息已读 UI 修改为文本“已读”、“未读”: https://support.rongcloud.cn/ks/MTAyOA==

为输入框添加 Placeholder 效果:https://support.rongcloud.cn/ks/MTA3NA==

输入工具栏:

自定义表情:http://support.rongcloud.cn/kb/NTY2

自定义功能板:http://support.rongcloud.cn/kb/MzAy

讯飞语音输入集成:http://support.rongcloud.cn/kb/NTc2

发送 iCloud 中的文件:https://support.rongcloud.cn/ks/OTY0

用户信息(头像和昵称的显示):

用户信息提供者函数(推荐使用此方法):http://support.rongcloud.cn/kb/MjYx

消息中携带用户信息(聊天室会话推荐此方法):http://support.rongcloud.cn/kb/Mzgw

自定义消息:

自定义消息:https://docs.rongcloud.cn/v4/views/im/ui/guide/private/conversation/msgsend/ios.html#createcustom

改变自定义消息样式:https://support.rongcloud.cn/ks/OTU5

UI 自定义:

设置导航栏和导航栏字体颜色:http://support.rongcloud.cn/kb/Mzg2

IMKit SDK 中按钮颜色的修改:https://support.rongcloud.cn/ks/OTUy

音视频通话:

音视频升级注意事项:http://support.rongcloud.cn/kb/NzY0

点击音视频推送后没有弹出音视频通话页面:http://support.rongcloud.cn/kb/NTI1

获取音视频原始数据(实现美颜):http://support.rongcloud.cn/kb/NjMx

客服:

客服后台发送表情显示有误处理:https://support.rongcloud.cn/ks/MTA1Mw==

客服后台发送富文本消息中 html 标签处理:https://support.rongcloud.cn/ks/MTA1Mg==

iOS适配问题:

iOS11 红包音视频:http://support.rongcloud.cn/kb/NjI4

适配 iOS10: http://support.rongcloud.cn/kb/NTI5

适配 iOS 13 设置 deviceToken:https://support.rongcloud.cn/ks/MTAwMw==

与第三方库冲突:

解决与 BlocksKit 冲突:http://support.rongcloud.cn/kb/MzI1

解决与 Monsary 冲突:http://support.rongcloud.cn/kb/NjAy

解决与 UIButton+NMCategory 冲突:http://support.rongcloud.cn/kb/NDA5

解决与 IQKeyboardManager冲突:http://support.rongcloud.cn/kb/MzM0

错误码查询:

iOS 端错误码的相关注释:http://support.rongcloud.cn/kb/Njc3


升级融云 4.0 及以上版本的兼容方案

IM即时通讯大神庵 发表了文章 • 0 个评论 • 71 次浏览 • 2021-03-18 11:37 • 来自相关话题

从 2.10.6 版本升级到 4.0 版本时候,遇到了一些坑,也从中总结了些经验,希望对看到这篇文章的人有帮助。升级 SDK 和,会报错的方法基本只有一个,就是 connectWithToken 这个连接方法,因为 4.0 及以上版本中此方法的回调形式改变了,... ...查看全部

从 2.10.6 版本升级到 4.0 版本时候,遇到了一些坑,也从中总结了些经验,希望对看到这篇文章的人有帮助。

升级 SDK 和,会报错的方法基本只有一个,就是 connectWithToken 这个连接方法,因为 4.0 及以上版本中此方法的回调形式改变了,所以需要“删除连接接口 token 非法的回调,并将该回调中的处理逻辑,移动至 error 回调中”

 示例代码:

以下代码以 IMKit 为例,IMLib 修改对应的核心类即可。

  • iOS 端

    [[RCIM sharedRCIM] connectWithToken:token
                dbOpened:^(RCDBErrorCode code) {
                    //如果消息数据库打开,可以进入到主页面
                }
                success:^(NSString *userId) {
                    //连接成功
                }
                error:^(RCConnectErrorCode status) {
                    if (status == RC_CONN_TOKEN_INCORRECT) {
                        //将旧版本 token 非法的回调处理代码写到这里
                        //从 APP 服务获取新 token,并重连
                    } else {
                        //无法连接 im 服务器,请根据相应的错误码作出对应处理
                    }
                }];
  • Android 端

    RongIM.connect(token, new RongIMClient.ConnectCallback() {
            @Override
            public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
                //如果消息数据库打开,可以进入到主页面
            }

            @Override
            public void onSuccess(String s) {
                //连接成功
            }

            @Override
            public void onError(RongIMClient.ErrorCode e) {
                if(e.equals(RongIMClient.ErrorCode.RC_CONN_USER_OR_PASSWD_ERROR)) {
                    //将旧版本 token 非法的回调处理代码写到这里
                    //从 APP 服务获取新 token,并重连                  
                }else {
                    //无法连接 im 服务器,请根据相应的错误码作出对应处理
                }
            }
    });

注意

4.0 及以上版本的 SDK 中,会出现一些错误码不走 error 回调的情况,建议分情况进行处理:

* 用户第一次登录,设置 timeLimit 为有效值,网络极差情况下超时回调 error。
* 用户后续登录,调用没有 timeLimit 的接口,SDK 就会保持旧版本的自动重连。


融云 SDK 新用户入群加载历史消息

IM即时通讯徐凤年 发表了文章 • 0 个评论 • 112 次浏览 • 2021-03-18 11:37 • 来自相关话题

记录融云 SDK 的一个小功能,分享一下背景项目中有用到融云 SDK 中的群组功能,产品说需要新人入群的时候看到历史消息。本来以为直接能获取到,但是实际并不可以。后来通过和客户沟通才发现在融云的开发者后台有一个免费的基础功能新用户获取加入群组前历史消息默认用户... ...查看全部

记录融云 SDK 的一个小功能,分享一下

背景

项目中有用到融云 SDK 中的群组功能,产品说需要新人入群的时候看到历史消息。

本来以为直接能获取到,但是实际并不可以。

后来通过和客户沟通才发现在融云的开发者后台有一个免费的基础功能

新用户获取加入群组前历史消息

默认用户加入群组后只能查看加入后群组中的消息,开启后可查看加入群组前的历史消息,此功能需要开通单群聊消息云存储功能后,才能使用。

记录一下,避免遗忘,大家如果有类似功能可以参考。

开通地址


只需 2 步,定位集成融云时的崩溃与错误 - iOS 篇

IM即时通讯大神庵 发表了文章 • 0 个评论 • 87 次浏览 • 2021-03-18 11:37 • 来自相关话题

在集成融云 iOS SDK 时候,多多少少都会遇到一些问题,可能是崩溃,也可能是功能接口错误回调,对于刚接触 SDK 的开发者,难免束手无策,下面分享一个快速定位问题的方法,只需 2 步哟~#####方法的中心思想就是“快速拿到 log,通过分析 log 定位... ...查看全部

在集成融云 iOS SDK 时候,多多少少都会遇到一些问题,可能是崩溃,也可能是功能接口错误回调,对于刚接触 SDK 的开发者,难免束手无策,下面分享一个快速定位问题的方法,只需 2 步哟~

#####方法的中心思想就是“快速拿到 log,通过分析 log 定位问题“

#####步骤 1:

添加下面代码,将 log 写入沙盒

- (BOOL)application:(UIApplication *)application

    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

          //重定向 log 到本地问题

          //在 info.plist 中打开 Application supports iTunes file sharing

      if (![[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"]) {

          [self redirectNSlogToDocumentFolder];

      }

    //设置Log级别,开发阶段打印详细log

    [RCIMClient sharedRCIMClient].logLevel = RC_Log_Level_Info;

}


- (void)redirectNSlogToDocumentFolder {

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

  NSString *documentDirectory = [paths objectAtIndex:0];

  NSDate *currentDate = [NSDate date];

  NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

  [dateformatter setDateFormat:@"MMddHHmmss"];

  NSString *formattedDate = [dateformatter stringFromDate:currentDate];

  NSString *fileName = [NSString stringWithFormat:@"rc%@.log", formattedDate];

  NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];

  freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);

  freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);

}

#####步骤 2:

加入第 1 步代码后运行项目,复现问题后,从”沙盒/Documents“路径下导出 rc 开头的 log 文件,使用文本编辑工具打开该文件。

  • 如果是崩溃,在 log 中能找到对应的崩溃信息,例如:

    * 找不到方法 unrecognized selector sent to instance 
    * 数组越界 [__NSArrayM objectAtIndex:]: index4beyond bounds [0..1] 等等。
  • 如果是 SDK 功能接口错误,可以在 log 中搜索到错误码,融云的错误码基本都是五位数字,以 ”3“开头,例如:

    * 31004:“Token 无效”,是使用的 token 和 appkey 不匹配。
    * 33001:“SDK 没有初始化”,是需要先初始化 SDK 才能调用其他接口。
    * 33003:“开发者接口调用时传入的参数错误”,是调用接口时候传入的参数有误,有空对象的可能性比较大。

    更多错误码链接:https://docs.rongcloud.cn/v4/views/im/ui/code/ios.html

总结,通过上面简单的 2 个步骤,就可以定位大部分问题,只是错误码解释如果不够明确的话,就还得提工单问,但是也能节省一部分交流成本,毕竟如果创建工单就把 log 贴身,得到针对性回复去解决问题的效率也会高很多。希望今天的分享可以帮助到大家。


融云 IMKit 开源了

IM即时通讯徐凤年 发表了文章 • 0 个评论 • 112 次浏览 • 2021-03-18 11:37 • 来自相关话题

最近升级项目中的 SDK,都需要升级一遍。 项目中用到了融云 SDK,而且用的是带 UI 界面的。去官网一看,居然开源了!!惊不惊喜意不意外?看来开源才是主流,我觉得只有将开发者最需要的地方开放出来,才能吸引到更多的客户,顺便还能给大家学习一下~以前改个 UI... ...查看全部

最近升级项目中的 SDK,都需要升级一遍。 项目中用到了融云 SDK,而且用的是带 UI 界面的。去官网一看,居然开源了!!

惊不惊喜意不意外?

看来开源才是主流,我觉得只有将开发者最需要的地方开放出来,才能吸引到更多的客户,顺便还能给大家学习一下~

以前改个 UI 费半天劲,定制性不是特别高大家也不太喜欢用是不~

痛苦的是以后非常肯定得和产品说做不了的时候少了...... 哈哈哈~

然后去体验一波升级一下。

源码地址

官网有详细的源码集成文档

https://docs.rongcloud.cn/v4/5X/views/im/ui/guide/quick/include/ios.html

不过,需要升级的兄弟们,注意代码结构有变动,记得多测试。


使用融云会话列表卸载之后再安装依旧有会话数据的问题

IM即时通讯徐凤年 发表了文章 • 0 个评论 • 106 次浏览 • 2021-03-18 11:37 • 来自相关话题

此文章主要记录和分享在使用融云 SDK 时出现的一个问题和涉及到的一个离线消息补偿的概念。现象当前设备与多人进行聊天卸载 APP重新安装 APP 并登陆此用户当前用户的会话列表又会刷新出来原因首先说明的一点是,融云的 SDK 是不会在服务端存储会话列表数据的,... ...查看全部

此文章主要记录和分享在使用融云 SDK 时出现的一个问题和涉及到的一个离线消息补偿的概念。

微信截图_20210318113247.png

现象

  1. 当前设备与多人进行聊天

  2. 卸载 APP

  3. 重新安装 APP 并登陆此用户

  4. 当前用户的会话列表又会刷新出来

原因

首先说明的一点是,融云的 SDK 是不会在服务端存储会话列表数据的,只会在本地进行存储,所以按道理来讲,我卸载的 APP 之后,所有本地存储的数据都会清空。

那么新出现的会话列表是哪里来的呢?

经过与融云技术人员的沟通,了解到虽然融云的会话列表只在本地进行存储。但是还有一个功能,划重点!!!

离线消息补偿 这个功能在开发者平台会在你开启 多设备消息同步 的时候被强行开启。

官网解释:

是指用户在更换设备或卸载重新安装应用后,针对消息的一种补偿机制,使用户可以在新的设备上查看最近 2 天内,在其他终端上发送和接收过的消息,补偿功能需要在 IM 商用版中开启“多设备消息同步”功能后才支持。

客服给的回复是这个日期可以调节!

所以当卸载重装之后出现的会话列表并不是存储的会话列表,而是有一部分消息被补偿回来,然后强行又生成了会话列表。

记录一下,分享给大家,避免大家遇到同样问题。


【iOS开发】融云会话页面去掉电话号码、邮箱、链接的样式和点击事件

IM即时通讯fanta2 发表了文章 • 0 个评论 • 94 次浏览 • 2021-03-18 11:37 • 来自相关话题

添加 RCAttributedDataSource 协议,设置attributeDataSource。重置attributeDictionary。重写点击回调。// 去掉手机号、邮箱、超链接 高亮+点击事件 - (void)wil... ...查看全部
  1. 添加 RCAttributedDataSource 协议,设置attributeDataSource。

  2. 重置attributeDictionary。

  3. 重写点击回调。

// 去掉手机号、邮箱、超链接 高亮+点击事件
- (void)willDisplayMessageCell:(RCMessageBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    if ([cell isKindOfClass:[RCTextMessageCell class]]) {
        RCTextMessageCell *txtCell = (RCTextMessageCell*)cell;
        txtCell.textLabel.attributeDictionary = nil;
        txtCell.textLabel.attributeDataSource = self;
    }
}

- (NSDictionary *)attributeDictionaryForTextType:(NSTextCheckingTypes)textType {
    return nil;
}

/*!
 点击Cell中电话号码的回调

 @param phoneNumber 点击的电话号码
 @param model       消息Cell的数据模型
 */
-(void)didTapPhoneNumberInMessageCell:(NSString *)phoneNumber model:(RCMessageModel *)model {

}
/*!
 点击Cell中URL的回调

 @param url   点击的URL
 @param model 消息Cell的数据模型
*/
- (void)didTapUrlInMessageCell:(NSString *)url model:(RCMessageModel *)model {



友情链接