ios轻客怎么设置ios上传头像到服务器和昵称

看过本文的玩家还看过:
攻略推荐12345678iOS 开发指南
以下视频是对融云 iOS SDK 开发使用的详细讲解,您可以在阅读文档时配合学习。
注册开发者帐号
注册开发者帐号。注册时,您需要提供真实的邮箱和手机号,以方便我们向您发送重要通知并在紧急时刻能够联系到您。如果您没有提供正确可用的邮箱和手机号,我们随时可能关闭您的应用。
下载融云 SDK。
SDK 下载包中分为如下两部分:
- RongCloud IMKit (包含 IMLib)
- RongCloud IMLib
好的,下载应该已经开始了,您可以在下载过程中继续向下阅读。
首先,让我们先创建您的第一个应用吧!
您要进行应用开发之前,需要先在融云开发者平台创建应用。如果您已经注册了融云开发者帐号,请前往
创建应用;如果您还没有注册融云开发者帐号,请前往
首先注册开发者帐号,注册后创建应用。
您创建完应用后,最需要了解的就是 App Key / Secret,它们是融云 SDK 连接服务器所必须的标识,每一个 App 对应一套 App Key / Secret。针对开发者的生产环境和开发环境,我们提供两套 App Key / Secret,您在应用最终上线前,使用开发环境即可,两套环境的功能完全一致。
App Key / Secret 位置
1、创建项目
创建 Demo 项目时,为了方便演示,请选择创建一个 Empty Application 。
创建 Empty Application
2.1、通过 CocoaPods 安装
是流行的 Cocoa 项目依赖管理工具,我们推荐您优先使用
来安装 SDK,这样可以极大的简化安装过程。下面介绍具体步骤:
在您的项目根目录创建一个 Podfile 文件,添加如下内容来引用 IMKit 界面组件库:
pod 'RongCloudIMKit'
如果您需要引用 IMLib 通讯能力库,可以添加:
pod 'RongCloudIMLib'
请不要同时引用 IMKit 和 IMLib,因为 IMKit 中已经包含了 IMLib。重复引用会导致引用冲突,无法正常编译。
然后,执行命令 pod install 安装 融云 SDK。
注意:以后打开项目时,需要使用 CocoaPods 生成的 .xcworkspace 打开,而不是之前的 .xcodeproj。
您可以参考
这篇文章来学习如何使用 。
此处特别感谢的
帮助创建和维护融云的 CocoaPods 项目。
2.2、手动安装融云 SDK
将官网下载的 Rong_Cloud_iOS_SDK_vx_x_x.zip 包解压到任意目录。在您的项目中加入 RongIMLib.framework,RongIMKit.framework,
在你项目的 Resource 目录中加入 RongCloud.bundle。
添加依赖库
工程中需要依赖的库如下(根据使用的功能不同,某些库并不是所有情况下都需要):
AssetsLibrary.framework
AudioToolbox.framework
AVFoundation.framework
CFNetwork.framework
CoreAudio.framework
CoreLocation.framework
CoreMedia.framework
CoreTelephony.framework
CoreVideo.framework
CoreGraphics.framework
ImageIO.framework
libc++.dylib
libc++abi.dylib
libsqlite3.dylib
libstdc++.dylib
libxml2.dylib
libz.dylib
MapKit.framework
OpenGLES.framework
QuartzCore.framework
SystemConfiguration.framework
UIKit.framework
3、获取 Token
Token 也叫用户令牌,是 SDK 端用来连接融云服务器的凭证,每个用户连接服务器都需要一个 Token。每次初始化连接服务器时,都需要向服务器提交 Token。
获取用户 Token 并连接的流程如下:
1, 首先,您的 App 查询您的应用程序服务器,
2, 然后,您的应用程序服务器再访问融云服务器获取,最后返回给 App,
3, App 用返回的 Token 直接连接融云服务器登录。
详细描述请参考
中的身份认证服务小节。
API 调试工具
您可以用这个 API 调试工具生成一个 Token,这里我们为您举一个例子,假设您生成 Token 时使用的参数如下:
userId = &1&
// 用户在融云系统中唯一的身份 Id,可为任意数字或字符串,但必须保证全局唯一。
用户名称:
name = &韩梅梅&
// 用户的显示名称,用来在 Push 推送时,或者客户端没有提供用户信息时,显示用户的名称。
用户头像图片:
portraitUri = &&
这里为了测试,您可以随意提供一个地址,如果此图片不存在,IMKit 会显示默认的头像。
通过API调试窗口,你即可以看到返回的 Token,这个 Token 就是您 App 中 userId = &1& 的这位用户连接融云,并与其他用户通讯的唯一凭证。
请务必清楚的了解 Token 的概念,对您使用融云服务开发非常重要。
快速集成是融云的产品的核心特色之一,在您耐心的理解了相关概念和准备好工程的前提下,您可以通过以下四个步骤就完成全部功能的集成。可以启动会话列表和会话界面,并能发送各种文本,语音,图片,位置消息。
以下将介绍将 IMKit 快速集成进您的 App 并实现进本功能,为了您更方便集成,我们同时准备了 Quick Start Demo,用最轻量的代码实现了快速集成,请参考:
1、初始化 SDK
请使用您之前从注册得到的 App Key,传入 initWithAppKey:deviceToken: 方法,初始化 SDK。
在整个应用程序全局,只需要调用一次 initWithAppKey:deviceToken: 方法。
#import &RongIMKit/RongIMKit.h&
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 快速集成第一步,初始化融云SDK
[[RCIM sharedKit] initWithAppKey:RONGCLOUD_IM_APPKEY deviceToken:nil];
以上代码中的 App Key 值 RONGCLOUD_IM_APPKEY 仅为示例,请注意必须替换为您自己的 App Key 值。
2、连接服务器
将您在请求身份认证服务器时获取的 Token 传入 connectWithToken 方法,开始连接服务器。
在整个应用程序全局,只需要调用一次 connectWithToken 方法,SDK 会负责自动重连。您也可以跟自己的需要选择主动重连。
// 快速集成第二步,连接融云服务器
[[RCIM sharedKit] connectWithToken:RONGCLOUD_IM_USER_TOKEN success:^(NSString *userId) {
// Connect 成功
} error:^(RCConnectErrorCode status) {
// Connect失败
以上代码中的 Token 值 RONGCLOUD_IM_USER_TOKEN 为示例,请注意替换为您自己的 Token 值。
3、启动会话列表界面
融云 IMKit 已经实现了完整的会话界面,使用标准的MVC框架,所以您只需要创建自己的会话视图控制器(View Controller),继承融云的视图控制器,既可以快速的启动和控制聊天界面。
以下为一个例子,注意 ChatListViewController 是您 App 自己实现的 View Controller,继承于 RCConversationListViewController。
@interface ChatListViewController : RCConversationListViewController
//快速集成第三步,在您需要的时机初始化会话列表,并跳转会话列表
ChatListViewController *chatListViewController = [[ChatListViewController alloc]init];
[self.navigationController pushViewController:chatListViewController animated:YES];
然后您 copy 以下一段代码到您的会话控制器内,就可以从您的会话列表跳转到会话界面了。
@implementation ChatListViewController
//重载函数,onSelectedTableRow 是选择会话列表之后的事件,该接口开放是为了便于您自定义跳转事件。在快速集成过程中,您只需要复制这段代码。
-(void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath
RCConversationViewController *conversationVC = [[RCConversationViewController alloc]init];
conversationVC.conversationType =model.conversationT
conversationVC.targetId = model.targetId;
conversationVC.targetName =model.conversationT
conversationVC.title = model.conversationT
[self.navigationController pushViewController:conversationVC animated:YES];
4、启动单聊会话界面
融云 IMKit 的会话界面已经高度集成,您只需要启动会话界面。发送消息的过程将由融云替您完成。完成上一步后您已经可以跳转会话界面,但需要将会话类型赋值给您的 View Controller,这样就可以直接调起会话界面。
// 快速集成第四步,发起单聊会话。
-(void)rightBarButtonItemPressed:(id)sender
// 您需要根据自己的 App 选择场景触发聊天。这里的例子是一个 Button 点击事件。
RCConversationViewController *conversationVC = [[RCConversationViewController alloc]init];
conversationVC.conversationType =ConversationType_PRIVATE; //会话类型,这里设置为 PRIVATE 即发起单聊会话。
conversationVC.targetId = @&id_xxxx&; // 接收者的 targetId,这里为举例。
conversationVC.targetName = @&name_xxx&; // 接受者的 username,这里为举例。
conversationVC.title = @&name_xxx&; // 会话的 title。
// 把单聊视图控制器添加到导航栈。
[self.navigationController pushViewController:conversationVC animated:YES];
启动客服聊天界面
原理同上,您只需要创建自己的视图控制器,您的 App 就可以直接调起客服聊天界面。
RCDChatViewController *chatService = [[RCDChatViewController alloc] init];
chatService.targetName = @&客服&;
chatService.targetId = SERVICE_ID;
chatService.conversationType = ConversationType_CUSTOMERSERVICE;
// 把客服聊天视图控制器添加到导航栈。
[self.navigationController pushViewController:chatViewController animated:YES];
其中,SERVICE_ID 的值,可以在
的客服模块中找到。位置为:xx应用 / 功能模块 / 客服模块 / 开发环境 / 查看详情。查看 customerServiceId 之前,请您先开启客服功能。
customerServiceId 值的位置
群组业务的描述,请参见中的说明。
因群组信息与群成员信息是由 App 维护管理并提供的,所以,处理群组的业务逻辑就是处理数据同步的逻辑。主要逻辑如下:
同步群组信息 syncGroup
开发文档链接:
用于同步当前登录用户已经加入的群组信息,需要提交当前用户所有加入的群组信息(群组信息包含 groupId:群唯一标识,groupName:群名称)。
融云服务器会根据你提交的群信息与之前提交的群信息进行比对,根据差异结果进行加入或退出操作。提交此信息后该用户可以收到这些群的消息,且可以向这些群内发送数据。
为了确保群组关系的正确同步,最好在每次完成初始化并成功连接融云服务后调用此方法。
加入群 joinGroup
开发文档链接:
此方法可以在 App 运行过程中实现将当前登录用户加入群组。在方法响应成功后,该用户可以收到所加入的群组的消息,且可以向该群组发送数据。请在您的 App 中实现当前用户加入群组时,调用此方法。
退出群 quitGroup
开发文档链接:
此方法可以在 App 运行过程中实现当前登录用户退出已加入的群组。在方法响应成功后,该用户将不会再收到该群组的消息,且不再可以向该群组发送数据。请在您的 App 中实现当前用户退出群组时,调用此方法。
聊天室功能
聊天室业务的描述,请参见中的说明。
聊天室与群组最大的不同在于,聊天室的消息没有 Push 通知,也没有成员的概念。想参与聊天室聊天,接收聊天室消息,加入聊天室即可;不参与聊天室聊天,不接收消息,退出聊天室即可。IMKit 组件中已经内置了加入和退出讨论组的接口调用,您直接启动即可:
// 启动聊天室,与启动单聊等类似
RCChatViewController *temp = [[RCChatViewController alloc]init];
temp.currentTarget = @&19527&;
temp.conversationType = ConversationType_CHATROOM; // 传入聊天室类型
temp.enableSettings = NO;
temp.currentTargetName = @&聊天室标题&;
[self.navigationController pushViewController:temp animated:YES];
因聊天室没有成员关系,需要在每次显示聊天室聊天界面之前,执行加入聊天室的操作,并在退出聊天室聊天界面之后执行退出聊天室的操作。否则,您的 App 将消耗不必要的流量(不退出聊天室将会持续接收来自该聊天室的消息),请在使用 IMLib 开发时注意。
实现了以上功能以后,您就可以实现在 App 中的简单一对一聊天服务了,但是您还看不到用户昵称、头像等信息。所以,为了实现上述功能,您还需要在 App 真正发布前继续完善一些代码。
显示用户昵称和头像
设计原理说明:
融云认为,每一个设计良好且功能健全的 App 都应该能够在本地获取、缓存并在合适的时机更新 App 中的用户信息。所以,融云不维护和管理用户的基本信息(用户 Id、昵称、头像)的获取、缓存、变更和同步。此外,App 提供用户信息也避免了由于缓存导致的用户信息更新不及时,App 中不同界面上的用户信息不统一(比如:一部分 App 从 App 服务器上获取并显示,一部分由融云服务器获取并显示),能够获得最佳的用户体验。
融云通过让开发者在 IMKit 中设置用户信息提供者的方式来实现在聊天界面和会话列表页中实现通过 App 的数据源来显示用户昵称和头像。
设置用户信息提供者即通过调用
方法设置 。用户信息提供者采用 Provider 模式,即您提供给融云的 IMKit 一个 ,当融云的 IMKit 需要使用用户信息的时候,调用您传入的
方法,向您获取用户信息。所以您在
方法中,需要根据传入的 userId 参数,向我们返回对应的用户信息。
App -& SDK: 设置并实现用户信息提供者\nRongIM.setGetUserInfoProvider(provider)
SDK UI -& SDK: 界面显示用户信息\n(如聊天或者会话列表)
SDK -& App: 调用第一步实现的 provider.getUserInfo\n方法,传入 userId
App -& App Server: 获取指定 userId 的用户信息
App Server --& App: 返回指定 userId 的用户信息
App -& App: 本地缓存该用户信息,以备\n下次调用
App --& SDK: 返回指定 userId 的用户信息
SDK --& SDK UI: 返回指定 userId 的用户信息
代码请参见下节 - 设置好友关系提供者,我们将一起展示。
虽然您可以通过调用 [.rong.io/user/getToken.[format]](/server.html#_身份认证服务接口说明) 换取 Token 的方式将用户昵称和头像提供给我们,并且可以通过重新换取 Token 的方式刷新用户资料,但是我们非常不推荐这种方式。这种方式会造成客户端的性能问题和用户信息更新不及时。
我们强烈推荐您实现本地的 RCIMUserInfoFetcherDelegagte,并在客户端对用户信息进行缓存。
设置好友列表
为了客户隐私考虑,融云既不同步又不保存用户的好友关系。所以,当界面组件创建会话需要显示好友列表时,需要向 App 获取。App 需要设置一个好友关系提供者给 IMKit,以便 IMKit 读取好友关系。好友关系提供者
的设计模式与用户信息提供者
相同,可以参考用户信息提供者
显示群组信息
在群组业务中,融云只是同步群组关系数据,并不保存群组的具体信息。所以,当界面组件创建会话需要显示群组信息时,需要向 App 获取。App 需要设置一个群组信息提供者给 IMKit,以便 IMKit 读取好友关系。群组信息提供者
的设计模式与用户信息提供者
相同,可以参考用户信息提供者
代码分成两部分,分别是 AppDelegate.h 文件和 AppDelegate.m 文件。
AppDelegate.h 文件如下:
#import &UIKit/UIKit.h&
// 引用 IMKit 头文件。
#import &RCIM.h&
// 添加获取用户信息、好友列表和群组信息的 Protocol。
@interface AppDelegate : UIResponder &UIApplicationDelegate, RCIMFriendsFetcherDelegate, RCIMUserInfoFetcherDelegagte, RCIMGroupInfoFetcherDelegate&
@property (strong, nonatomic) UIWindow *
AppDelegate.m 文件如下:
#import &AppDelegate.h&
// 引用 IMKit 头文件。
#import &RCIM.h&
// 引用 ViewController 头文件。
#import &ViewController.h&
@interface AppDelegate ()
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// 初始化 SDK,传入 App Key,deviceToken 暂时为空,等待获取权限。
[RCIM initWithAppKey:@&e7x8xycsx6flq& deviceToken:nil];
// 设置用户信息提供者。
[RCIM setUserInfoFetcherWithDelegate:self isCacheUserInfo:NO];
// 设置好友信息提供者。
[RCIM setFriendsFetcherWithDelegate:self];
// 设置群组信息提供者。
[RCIM setGroupInfoFetcherWithDelegate:self];
#ifdef __IPHONE_8_0
// 在 iOS 8 下注册苹果推送,申请推送权限。
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge
|UIUserNotificationTypeSound
|UIUserNotificationTypeAlert) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
// 注册苹果推送,申请推送权限。
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
// 初始化 ViewController。
ViewController *viewController = [[ViewController alloc]initWithNibName:nil bundle:nil];
// 初始化 UINavigationController。
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:viewController];
// 设置背景颜色为黑色。
[nav.navigationBar setBackgroundColor:[UIColor blackColor]];
// 初始化 rootViewController。
self.window.rootViewController =
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
// Register to receive notifications.
[application registerForRemoteNotifications];
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
// Handle the actions.
if ([identifier isEqualToString:@&declineAction&]){
else if ([identifier isEqualToString:@&answerAction&]){
// 获取苹果推送权限成功。
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
// 设置 deviceToken。
[[RCIM sharedRCIM] setDeviceToken:deviceToken];
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
// 获取好友列表的方法。
-(NSArray*)getFriends
NSMutableArray *array = [[NSMutableArray alloc]init];
RCUserInfo *user1 = [[RCUserInfo alloc]init];
user1.userId = @&1&;
user1.name = @&韩梅梅&;
user1.portraitUri = @&http://rongcloud-/docs_demo_rongcloud_logo.png&;
[array addObject:user1];
RCUserInfo *user2 = [[RCUserInfo alloc]init];
user2.userId = @&2&;
user2.name = @&李雷&;
user2.portraitUri = @&http://rongcloud-/docs_demo_rongcloud_logo.png&;
[array addObject:user2];
// 获取用户信息的方法。
-(void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(RCUserInfo* userInfo))completion
// 此处最终代码逻辑实现需要您从本地缓存或服务器端获取用户信息。
if ([@&1& isEqual:userId]) {
RCUserInfo *user = [[RCUserInfo alloc]init];
user.userId = @&1&;
user.name = @&韩梅梅&;
user.portraitUri = @&http://rongcloud-/docs_demo_rongcloud_logo.png&;
return completion(user);
if ([@&2& isEqual:userId]) {
RCUserInfo *user = [[RCUserInfo alloc]init];
user.userId = @&2&;
user.name = @&李雷&;
user.portraitUri = @&http://rongcloud-/docs_demo_rongcloud_logo.png&;
return completion(user);
return completion(nil);
// 获取群组信息的方法。
-(void)getGroupInfoWithGroupId:(NSString*)groupId completion:(void (^)(RCGroup *group))completion
// 此处最终代码逻辑实现需要您从本地缓存或服务器端获取群组信息。
if ([@&1& isEqual:groupId]) {
RCGroup *group = [[RCGroup alloc]init];
group.groupId = @&1&;
group.groupName = @&同城交友&;
//group.portraitUri = @&http://rongcloud-/docs_demo_rongcloud_logo.png&;
return completion(group);
if ([@&2& isEqual:groupId]) {
RCGroup *group = [[RCGroup alloc]init];
group.groupId = @&2&;
group.groupName = @&跳蚤市场&;
//group.portraitUri = @&http://rongcloud-/docs_demo_rongcloud_logo.png&;
return completion(group);
return completion(nil);
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background t here you can undo many of the changes made on entering the background.
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
会话列表自定义
在应用的会话列表中经常会出很多会话的情况,为使会话列表更加清晰,满足开发者对会话列表的定制化需求,融会 SDK 2.0 在会话列表中新增了按照会话类型设置会话列表显示机制:铺开显示、聚合显示、不显示。
现在支持在会话列表中聚合显示的会话类型包括:群组、讨论组、单聊可分别对某一会话类型设置是否聚合显示,默认状态下为铺开显示。
点击聚合后的某一会话类型,显示该会话类型的所有会话列表。
会话列表自定义请参见: RCConversationListViewController
RCConversationListViewController
@Description: 会话列表基类,子类可从该基类继承
* 存储当前的会话数据,用于在会话列表展示,子类可以调用该属性来加载呈现
@property (nonatomic,strong) NSMutableArray *conversationListaDataS
* 用于更改设置当前会话列表tableView
@property (nonatomic,strong) UITableView *conversationListTableV
用于更改设置网络指示View
@property (nonatomic, strong) RCNetworkIndicatorView *networkIndicatorV
设置需要显示的会话列表类型, 存储数据为NSNumber类型
@property (nonatomic ,strong) NSArray *displayConversationTypeA
设置要显示的聚合会话类型,存储数据为NSNumber类型
@property (nonatomic ,strong) NSArray *collectionConversationTypeA
@method - 子类需要调用的方法
* 初始化当前类,并设置需要显示的会话类型和聚合会话类型
-(id)initWithDisplayConversationTypes:(NSArray*)conversationTypeArray1 collectionConversationType: (NSArray*)conversationTypeArray2;
设置需要显示的会话类型
@param conversationTypeArray 会话类型,NSNumber类型。
-(void)setDisplayConversationTypes:(NSArray*)conversationTypeA
设置需要聚合显示的会话类型
@param conversationTypeArray 会话类型,NSNumber类型。
-(void)setCollectionConversationType: (NSArray*)conversationTypeA
设置头像样式,请在viewDidLoad之前调用
@param avatarStyle avatarStyle
-(void)setConversationAvatarStyle:(RCUserAvatarStyle)avatarS
设置头像大小,请在viewDidLoad之前调用
@param size size
-(void)setConversationPortraitSize:(CGSize)
刷新会话列表
-(void)refreshConversationTableViewIfN
@method - 子类需要重写的方法
#pragma mark override
表格选中事件,子类从重写这个方法来监听点击事件并做相应的业务处理
@param conversationModelType 数据模型类型
@param model
@param indexPath
-(void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel*)model atIndexPath:(NSIndexPath *)indexP
#pragma mark override
将要加载table数据,子类通过重写该方法添加自定义的数据源,然后通过属性
conversationListaDataSource 来读取
@param dataSource 数据源数组
@return 数据源数组,可以添加自己定义的数据源item
-(NSMutableArray*)willReloadTableData:(NSMutableArray*)dataS
#pragma mark override
将要显示会话列表单元,可以有限的设置cell的属性或者修改cell, 子类重写该方法后可以实现在cell加载之前将修改的属性加载到tableView. 例如:setHeaderImagePortraitStyle
@param cell
@param indexPath 索引
-(void)willDisplayConversationTableCell:(RCConversationBaseCell*)cell atIndexPath:(NSIndexPath *)indexP
#pragma mark override
重写方法,可以实现开发者自己添加数据model后,返回对应的显示的cell
@param tableView 表格
@param indexPath 索引
@return RCConversationBaseTableCell
- (RCConversationBaseCell *)rcConversationListTableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexP
#pragma mark override
重写方法,可以实现开发者自己添加数据model后,返回对应的显示的cell的高度
@param tableView 表格
@param indexPath 索引
@return 高度
- (CGFloat)rcConversationListTableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexP
#pragma mark override
重写方法,点击tableView删除按钮触发事件
@param tableView
@param editingStyle 编辑样式
@param indexPath
- (void)rcConversationListTableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexP
#pragma mark override
点击头像事件
@param userId 用户的ID
- (void) didTapCellPortrait:(NSString*)userId;
子类重写该方法用于监听收到的新消息,需要调用super 方法来实现父类的数据刷新
@param notification notification
(void) didReceiveMessageNotification:(NSNotification*)
RCConversationBaseCell
@Description: 会话列表Cell的基类,自定义Cell需要从这个基类来继承
* 当前Cell的会话数据模型
@param RCConversationModel model
@property (nonatomic ,strong) RCConversationModel *
子类需要重写该方法来实现根据传入的会话数据模型更新Cell UI
@param notification notification
-(void)setDataModel:(RCConversationModel*)
会话界面自定义
点击会话列表中某一会话后开启会话界面,在会话界面中为满足开发者改变界面样式需求,已实现包括:消息展示自定义、输入框自定义、功能板自定义等自定义功能。
会话列表自定义请参见:RCConversationViewController
编码将当前对象转成JSON数据
@return 编码后的JSON数据
- (NSData *)
根据给定的JSON数据设置当前实例
@param data 传入的JSON数据
- (void)decodeWithData:(NSData *)
应返回消息名称,此字段需个平台保持一致,每个消息类型是唯一的
@return 消息体名称
(NSString *)getObjectN
返回遵循此protocol的类对象持久化的标识
@return 返回持久化设定标识
@discussion
默认实现返回 @const (MessagePersistent_ISPERSISTED | MessagePersistent_ISCOUNTED)
+(RCMessagePersistent)persistentF
注册消息类型,如果对消息类型进行扩展,可以忽略此方法。
@param messageClass
消息类型名称,对应的继承自 RCMessageContent 的消息类型。
-(void)registerMessageType:(Class)messageC
消息展示自定义
消息展示自定义基于 UICollectionView 研发,每一个消息对应一个消息展现。
消息展现根据需求继承融云提供的两个模板 RCMessageBaseCell 和 RCMessageCell。前者不包含头像,主要用于公众平台消息。后者已经实现了头像和发送状态主要用于会话聊天。
UI 会话界面自定义
//自定义消息展示后,需要调用方法注册。
注册消息Cell
@param cellClass
@param identifier identifier
- (void) registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)
实现以下几个委托方法
重写方法实现自定义消息的显示
@param collectionView collectionView
@param indexPath
@return RCMessageTemplateCell
(RCMessageBaseCell *) rcConversationCollectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexP
重写方法实现自定义消息的显示的高度
@param collectionView
collectionView
@param collectionViewLayout collectionViewLayout
@param indexPath
@return 显示的高度
(CGSize) rcConversationCollectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexP
此外,每一个消息cell将要展示的时候,将会触发
将要显示会话消息,可以修改RCMessageBaseCell的头像形状,添加自定定义的UI修饰
@param cell
@param indexPath indexPath
(void) willDisplayConversationTableCell:(RCMessageBaseCell*)cell atIndexPath:(NSIndexPath *)indexP
可以根据需要对消息展示进行修改和装饰。
输入框自定义
在会界面中可以设置输入框的模式。针对聊天会话的语音/文本切换功能、内容输入功能、扩展功能,融云目前提供了 9 种排列组合模式:
style 样式枚举
RCChatSessionInputBarControlStyle1
语音/文本切换功能+内容输入功能+扩展功能
RCChatSessionInputBarControlStyle2
扩展功能+内容输入功能+语音/文本切换功能
RCChatSessionInputBarControlStyle3
内容输入功能+语音/文本切换功能+扩展功能
RCChatSessionInputBarControlStyle4
语音/文本切换功能+扩展功能+内容输入功能
RCChatSessionInputBarControlStyle5
语音/文本切换功能+内容输入功能
RCChatSessionInputBarControlStyle6
扩展功能+语音/文本切换功能
RCChatSessionInputBarControlStyle7
扩展功能+内容输入功能
RCChatSessionInputBarControlStyle8
内容输入功能+扩展功能
RCChatSessionInputBarControlStyle9
内容输入功能
语音/文本切换功能+内容输入功能+扩展功能 组合示例
设置输入栏的样式 可以在viewdidload后,可以设置样式
@param style 样式
-(void)setInputBarType:(RCChatSessionInputBarControlType)type
style:(RCChatSessionInputBarControlStyle)
扩展功能自定义
扩展功能在已默认支持照片、拍照、地理位置、语音通话等功能的情况下,新增自定义功能,如开发者插入自己的默认表情包等。
可通过向 RCPluginBoardView 添加功能项实现。
扩展功能示例
添加扩展项,在会话中,可以在viewdidload后,向RCPluginBoardView添加功能项
@param image 图片
@param title 标题
@param index 索引
-(void)insertItemWithImage:(UIImage*)image title:(NSString*)title atIndex:(NSInteger)
重新实现方法
@param pluginBoardView 功能模板
@param index
-(void)pluginBoardView:(RCPluginBoardView*)pluginBoardView clickedItemAtIndex:(NSInteger)
在 RongIMKit 中使用 RongIMLib 方法
在 RongIMKit 是对 RongIMLib 的 UI 封装,在 RongIMKit 中可以直接使用 RongIMLib 中的所有方法,代码如下:
NSArray *messageArray = [[RCIMClient sharedRCIMClient] getLatestMessages:self.conversationType targetId:self.currentTarget count:10];
更多的融云 SDK UI 组件请参考融云开源的 Demo 例子。
应用标识是为了我们的 API 能够正确识别并验证您的应用请求而所必要的信息,对于防止账户盗用和滥用有着重要的作用。针对 iOS 平台,需要填写 Bundle Identifier,在 XCode 中的位置如图所示。
Bundle Identifier 位置
请务必确保您填写的 Bundle Identifier 信息和您应用程序包中的信息一致。上线后,每次连接我们都将会验证这个信息,如果信息不一致,服务端将会拒绝接受连接,您的 App 将无法使用融云的相关服务。
iOS 推送证书设置
如果您希望您的 iOS 应用程序具备接收推送的能力,您必须要上传 iOS 推送证书(.p12 格式)。证书生成的方法,请参考:
讨论组人数上限设置
讨论组人数在服务端有上限限制,为 500 人,在客户端,根据具体的业务需求,可以通过配置文件配置讨论组人数上限,配置的方法如下:
设置定义在 RCSelectPersonViewController.h 文件中,开发时请设置相关值:
讨论组人员最大限制,默认50个
@property (nonatomic,assign) NSInteger discussion_members_
为了您能够更好的理解如何使用融云 IMKit SDK,我们在 GitHub 上提供了开源的 Demo App。
Demo App 中使用了我们提供的 App Key,Demo App 连接的是我们为了演示用搭建的 Demo App Server,Demo App Server 中使用了和 Demo App 相同的 App Key / App Secret。如果您只更换了 Demo App 的 App Key 为自己申请的 App Key,是无法成功连接到我们的 Demo App Server 的。这种情况下,您需要自己架设您自己的 Demo App Server 并正确设置其中的 App Key / App Secret。
请移步访问:
(C) 2015 RongCloud. All Rights Reserved. Version 2.0.1

我要回帖

更多关于 传智播客ios 百度网盘 的文章

 

随机推荐