更新时间: 2021-04-16

以下内容为快速集成摘要,具体细节可依次参考全局配置

# 导入 SDK

环境要求

名称 版本
Xcode 11 +
手机系统 8.0 +
CocoaPods 1.10.0 +

SDK 支持使用 CocoaPods 导入并管理 SDK。 需安装 CocoaPods 环境,请参照 CocoaPods 安装 (opens new window)

5.1.1 及其以后版本对应 pod 版本说明 (opens new window)

# CocoaPods 集成
  1. cd 至项目根目录

  2. 执行 pod init

  3. 执行 open -e Podfile

  4. Podfile 文件中添加下面内容

    pod 'RongCloudIM/IMKit', '~> 5.1.2'
    pod 'RongCloudIM/IMLib', '~> 5.1.2'
    
    已复制
    1
    2

    如需指定具体版本,请注意 pod 使用规范 (opens new window)。 请点击 SDK下载页 (opens new window) 获知最新版本。

  5. 执行 pod install

  6. 双击打开 .xcworkspace

# IMKit 源码集成

IMKit SDK 5.0 及以上版本开放了源代码,支持以源码形式进行调试与集成,源码集成参考

对于开发者自定义 UI 的需求,有以下建议

1.不建议直接修改源码内容,防止后续源码升级将修改内容覆盖

2.建议通过继承重写某些类与自身逻辑不一致的方法,来增加新方法以扩展自身的业务逻辑

3.建议使用 SDK 对外暴露的接口,如果调用私有接口可能会出现版本升级引起私有接口变更

1.架构说明:

绿色部分的 SDK 是以 framework 形式存在,属于 RongCloudIM

黄色部分的 SDK 是以 framework 形式存在,属于 RongCloudRTC

白色部分的 SDK 是以 源码 形式存在,只属于 RongCloudOpenSource

podfile 引入 RongCloudOpenSource 默认就可以引入这些 SDK

名称 可选与否 含义
IMKit 可选 IM UI 能力库,含会话列表页面,会话页面,输入工具栏
Sticker 可选 表情 SDK
Sight 可选 小视频 SDK
IFly 可选 语音输入 SDK
ContactCard 可选 名片 SDK
CallKit 可选 音视频 UI 库

2.引入方式说明

支持 framework 和 源码 两种引入方式

如果需要在 framework 和 源码两种方式之间切换需要涉及 podfile 的声明 和 APP 项目的引入问题,可以参见下面的内容

2.1 引入 framework

请根据实际需要指定对应版本版本

podfile

pod 'RongCloudIM/IMKit','5.0.0'           # IMKit
pod 'RongCloudIM/Sight','5.0.0'           # 小视频
pod 'RongCloudIM/RongSticker','5.0.0'     # 表情

pod 'RongCloudRTC/RongCallKit','5.0.0'    # CallKit
已复制
1
2
3
4
5

项目 import

#import <RongIMKit/RongIMKit.h>
#import <RongSight/RongSight.h>
已复制
1
2

2.2 引入源码

请根据实际需要指定对应版本版本

podfile

pod 'RongCloudOpenSource/IMKit','5.0.0'           # IMKit
pod 'RongCloudOpenSource/Sight','5.0.0'           # 小视频
pod 'RongCloudOpenSource/RongSticker','5.0.0'     # 表情
pod 'RongCloudOpenSource/IFly','5.0.0'            # 语音输入
pod 'RongCloudOpenSource/ContactCard','5.0.0'     # 名片

pod 'RongCloudOpenSource/RongCallKit','5.0.0'     # CallKit
已复制
1
2
3
4
5
6
7

项目 import

#import <RongCloudOpenSource/RongIMKit.h>
#import <RongCloudOpenSource/RongSight.h>
已复制
1
2

3.FAQ

pod 找不到 RongCloudOpenSource 怎么办?

终端执行 pod repo update 即可

源码地址在哪儿?

源码地址 (opens new window)

# 初始化

  1. 引入

使用 SDK 功能前,需要 import 下面的头文件,Swift 项目需要在工程的 Bridging-Header.h 文件中添加 SDK 的引用。

#import <RongIMKit/RongIMKit.h>
已复制
1
  1. 调用初始化方法
  1. 请使用从 融云开发者管理后台 (opens new window) 注册得到的 AppKey,通过 RCIM 的单例,传入 initWithAppKey: 方法初始化 SDK。
  2. 开发者在使用融云 SDK 所有功能之前,必须先调用此方法初始化 SDK。 在 App 的整个生命周期中,开发者只需要将 SDK 初始化一次。
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    [[RCIM sharedRCIM] initWithAppKey:@"获取到的 AppKey"];
}
已复制
1
2
3

# 连接 IM

将通过 Server 获取到的 Token,通过 RCIM 的单例,调用下面的方法,即可建立与服务器的连接。

在 App 整个生命周期,开发者只需要调用一次此方法与融云服务器建立连接。之后无论是网络出现异常或者 App 有前后台的切换等,SDK 都会负责自动重连。除非已经手动将连接断开,否则不需要自己再手动重连。

当出现 SDK 无法处理的错误(如 SDK 没有初始化、token 非法)时,SDK 将停止连接,并通过 errorBlock 进行回调。

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    [[RCIM sharedRCIM] initWithAppKey:@"获取到的 AppKey"];
    [[RCIM sharedRCIM] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值"
                           dbOpened:^(RCDBErrorCode code) {}
                            success:^(NSString *userId) {}
                              error:^(RCConnectErrorCode status) {}];
}
已复制
1
2
3
4
5
6
7

# 构建会话列表

新建一个继承于 RCConversationListViewController 的控制器 CustomConversationListViewController, 初始化控制器对象并设置需要显示的会话类型和需要聚合显示的会话类型。此处将会话列表页当做 Window 的根视图,实际开发中开发者需根据业务场景决定。

  1. 导入会话列表页子类头文件
#import "CustomConversationListViewController.h"
已复制
1
  1. 替换根视图
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    [[RCIM sharedRCIM] initWithAppKey:@"获取到的 AppKey"];
    [[RCIM sharedRCIM] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值"
                           dbOpened:^(RCDBErrorCode code) {}
                            success:^(NSString *userId) {}
                              error:^(RCConnectErrorCode status) {}];

	UIWindowScene *windowScene = (UIWindowScene *)scene;
    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
    self.window.frame = [UIScreen mainScreen].bounds;
    CustomConversationListViewController *conversationListViewController = [[CustomConversationListViewController alloc] initWithDisplayConversationTypes:@[@(ConversationType_PRIVATE),@(ConversationType_GROUP),@(ConversationType_SYSTEM)] collectionConversationType:@[@(ConversationType_SYSTEM)]];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:conversationListViewController];
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
}
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

会话列表页需要从融云数据库中读取会话信息进行展示,实际使用中应该在连接接口的 dbOpenedBlock 中进行页面跳转,这里为了演示方便使用了顺序调用的方式。连接接口的回调不是在主线程,开发者在 dbOpenedBlock 中进行页面跳转时请记得先切换到主线程。

# 构建会话页面

第一次连接成功时,由于没有任何消息,会话列表页显示空白。开发者可以在 CustomConversationListViewController 的导航栏添加按钮,用来开启一个单聊会话。

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"开启单聊" style:UIBarButtonItemStylePlain target:self action:@selector
                                    (rightBarButtonItemPressed:)];
    self.navigationItem.rightBarButtonItem = rightButton;
}

- (void)rightBarButtonItemPressed:(id)sender {
    RCConversationViewController *conversationVC = [[RCConversationViewController alloc] init];
    conversationVC.conversationType = ConversationType_PRIVATE;
    conversationVC.targetId = @"888";
    [self.navigationController pushViewController:conversationVC animated:YES];
}
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14

CustomConversationListViewController 中重写 RCConversationListViewControlleronSelectedTableRow 事件并传入 conversationTypetargetId,即可点击进入聊天会话界面

- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath {

    RCConversationViewController *conversationVC = [[RCConversationViewController alloc] initWithConversationType:model.conversationType targetId:model.targetId];
    //会话标题
    conversationVC.title = @"想显示的会话标题";
    [self.navigationController pushViewController:conversationVC animated:YES];
}
已复制
1
2
3
4
5
6
7

# 设置用户信息

此处用户信息仅用于演示,开发者需要根据自身业务更换为真实的用户信息。


- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    [[RCIM sharedRCIM] initWithAppKey:@"获取到的 AppKey"];
    [[RCIM sharedRCIM] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值"
                           dbOpened:^(RCDBErrorCode code) {}
                            success:^(NSString *userId) {}
                              error:^(RCConnectErrorCode status) {}];

	UIWindowScene *windowScene = (UIWindowScene *)scene;
    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
    self.window.frame = [UIScreen mainScreen].bounds;
    CustomConversationListViewController *conversationListViewController = [[CustomConversationListViewController alloc] initWithDisplayConversationTypes:@[@(ConversationType_PRIVATE),@(ConversationType_GROUP),@(ConversationType_SYSTEM)] collectionConversationType:@[@(ConversationType_SYSTEM)]];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:conversationListViewController];
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    //添加用户信息代理
    [RCIM sharedRCIM].userInfoDataSource = self;
  	//设置用户信息在本地持久化存储。SDK 获取过的用户信息将保存在数据库中,即使 App 重新启动也能再次读取。
    [RCIM sharedRCIM].enablePersistentUserInfoCache = YES;
}

// 实现用户信息提供者的代理函数
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion {
    //开发者需要将 userId 对应的用户信息返回,下列仅为示例
  	//实际项目中,开发者有可能需要到 App Server 获取 userId 对应的用户信息,再通过 completion 返回给 SDK。
    if ([userId isEqualToString:@"888"]) {
        RCUserInfo *userInfo = [[RCUserInfo alloc] initWithUserId:@"888" name:@"融融" portrait:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1568875876191&di=2933bebe9b22899f59840c33b24a1f98&imgtype=0&src=http%3A%2F%2Fimg.mp.itc.cn%2Fupload%2F20161119%2F7205fcb7ca4149c1920c01524112cbd9_th.jpg"];
        if (completion) {
            completion(userInfo);
        }
    }
}
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助