ios 云信中 nimandroid usermanagerr 怎么获取

这篇教程主要简略介绍 NIM demo,方便第三方开发者熟悉 demo 代码结构,迅速找到各个功能点入口。但需要注意的是 demo 仅展现相应功能的主要实现流程,但并不一定是最佳实践,在代码规范,业务逻辑实现方面 demo 有自己的缺陷,请忽略。
NIM demo 代码顶级结构如下:
内分为五个功能模块:联系人 (Contact),名片 (Card),最近会话 (Session
List),会话 (Session) 登录 (Login) 和 设置 (Setting)。每个功能模块按照 MVC 模式划分,部分模块还有一些 Util 类。由于 NIM SDK 已经提供比较完善的数据管理功能,所以上层模块基本不需要做管理模类。
自定义 View
通用 Category
通用辅助类
功能点指引
SDK 初始化
SDK 的初始化主要在 AppDelegate 的 application:didFinishLaunchingWithOptions: 中进行
如图,推荐在启动后立刻进行 SDK 的注册,如需 APNS 推送则同时进行 APNS 的注册,在正确获得 deviceToken 后设置给 SDK。
通常初次接入 SDK 时最头疼的问题就是 APNS 并没有起效,建议开发检查如下事项
是否已上传推送证书到云信管理后台
是否已在 APP 中填写了正确的 AppKey 和证书名 (cerName)
启动后是否进行了 APNS 的注册
检查 application:didRegisterForRemoteNotificationsWithDeviceToken: 方法有无调用并设置 deviceToken 给 SDK
NIM SDK 有两种登录方式:手动登录和自动登录。demo 展示了两种登录的应用场景:
自动登录的意义在于提供一种用户友好的登录形式: APP 在启动时发现本地有用户账户名和密码的缓存,调用自动登录且打开主界面,用户不再需要进行一次登录的确认,并且能在无网的情况下获得会话列表信息。
需要注意的是这这个时候需要有对象监听自动登录的回调,并在某些情况下给出相应操作(如密码错误等)。在 demo 中我们使用 AppDelegate 作为监听者。
手动登录的流程可以参考 NTESLoginViewController ,它接受用户输入并调用登录接口。
demo 中会话相关的代码在 Classes/Sections/Session 下,几个关键的类是
NTESSessionViewController 会话窗口,负责会话消息的收发,继承自NIMSessionViewController。主要对父类做了一些业务逻辑配置。如:配置消息长按菜单,各种点击事件的处理,录音处理,消息在界面上的更新和删除等等。
NTESSessionConfig 会话详细配置器,负责对输入框,消息显示条数,插入消息时间间隔提供自定义配置,并提供详细的气泡排版配置器
NTESSessionCustomLayoutConfig 气泡排版配置器,主要对消息气泡的元素进行排版,具体细节请参考NIMKit文档。
当选择一个用户发起会话后,demo 向 NavigationController 中推入NTESSessionViewController,而后主要做了如下一些事情
初始化 datasource ,一般是从获取当前会话的最近20条消息
将当前会话消息消息全部置为已读
初始化事件 Handler 和监听
等待用户输入或远端消息
使用 SDK 发起消息的流程非常简单,一般分为三步:
调用 SDK 接口发送
处理发送回调
以发送图片为例,NTESSessionViewController 从 UIImagePickerController 获取 UIImage,使用 NTESSessionMsgConverter 的方法打包成一个可以发送的 NIMMessage,并调用
[[[NIMSDK sharedSDK] chatManager] sendMessage:message toSession:session error:nil]进行发送。而后进行回调处理即可
如图所见,NTESSessionViewController 主要处理三个消息发送的回调
消息即将发送时消息加入 datasource 并刷新 UI
收到消息发送进度时刷新界面
收到消息发送完毕时刷新界面
demo 中处理接受消息主要在 NIMKit 的 NIMSessionViewController 中,收到消息会通过 chatManager的 onRecvMessages: 方法进行回调。一般而言 NIMSessionViewController 只需要处理当前session的消息即可,对于非当前 session 的消息直接丢弃即可。
对于带有附件的消息类型(图片,音频,视频),SDK 在第一次收到消息时会自动获取对应的附件(图片和视频的缩略图和音频原文件),上层只需要监听获取附件的回调即可。
如果发生错误上层 APP 也可以主动调用 fetchMessageAttach:error 进行重试。
在NIM SDK 中管理最近消息的类是 NIMConversationManager,而 demo 中和它互动的 ViewController 是 NTESSessionListViewController , 继承自 NIMSessionListViewController ,他们的关系非常简单:NTESSessionListViewController 初始化时获取 NIMConversationManager 中所有的会话信息,并进行显示,且在最近消息有变化时进行处理即可。
最近消息在如下情况下会发生变化
本地发送消息
本地删除消息
但上层应用只需要管理最近消息变化即可,不需要关心引起它变化的源头,换言之消息和最近消息对于上层而言完全是两个不同的概念,尽量不要混淆。
在 NIMConversationManager 中可以看到demo对最近消息发生变化的回调处理
在NIM SDK 中管理聊天室的类是 NIMChatroomManager , demo 中将聊天室包装成了直播间的模式。
直播间列表页为 NTESChatroomListViewController。页面将向应用服务器做聊天室房间列表请求,具体的代码在 NTESDemoService.m 中:
- (void)runTask:(id&NTESDemoServiceTask&)task
if ([[NIMSDK sharedSDK] isUsingDemoAppKey])
NSURLRequest *request = [task taskRequest];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
id jsonObject = nil;
NSError *error = connectionE
if (connectionError == nil &&
[response isKindOfClass:[NSHTTPURLResponse class]] &&
[(NSHTTPURLResponse *)response statusCode] == 200)
jsonObject = [NSJSONSerialization JSONObjectWithData:data
error:&error];
[task onGetResponse:jsonObject
error:error];
[task onGetResponse:nil
error:[NSError errorWithDomain:@"ntes domain"
userInfo:@{@"description" : @"use your own app server"}]];
}直播间的视图控制器为 NTESLiveViewController , NTESLiveViewController 是一个父视图控制器容器 , 包含了三个子视图控制器:
聊天室视图控制器 NTESChatroomViewController
聊天室成员列表视图控制器 NTESChatroomMemberListViewController
直播间信息视图控制器 NTESLiveInfoViewController
视图控制器 NTESChatroomViewController 继承自 NIMSessionViewController , 是一个特殊的会话页。这个会话页自己定义了部分会话设定和新的气泡排版样式。新的会话设定在 NTESChatroomConfig 中定义;新的气泡排版样式在 NTESChatroomCellLayoutConfig 中定义。目前会话页只处理文字和猜拳(自定义消息)两种消息类型。
视图控制器 NTESChatroomMemberListViewController 是一个聊天室成员列表,每次点击到这个列表的时候都会进行聊天室成员刷新。demo中,聊天室成员的排序为创建者,管理员,普通成员,受限成员,游客。由于 SDK 的接口无法直接给出所需要列表,demo 中做了多次请求合并以及排序的操作。请求合并的摘录代码为:
- (void)requestTeamMembers:(NIMChatroomMember *)lastMember handler:(NIMChatroomMembersHandler)handler{
NIMChatroomMemberRequest *request = [[NIMChatroomMemberRequest alloc] init];
request.roomId = self.chatrooom.roomId;
request.lastMember = lastM
request.type
= lastMember.type == NIMChatroomMemberTypeGuest ? NIMChatroomFetchMemberTypeTemp : NIMChatroomFetchMemberTypeRegularOnline;
request.limit
__weak typeof(self) wself =
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembers:request completion:^(NSError *error, NSArray *members) {
if (!error)
if (members.count & wself.limit && request.type == NIMChatroomFetchMemberTypeRegularOnline) {
//固定的没抓够,再抓点临时的充数
NIMChatroomMemberRequest *req = [[NIMChatroomMemberRequest alloc] init];
req.roomId = wself.chatrooom.roomId;
req.lastMember = nil;
= NIMChatroomFetchMemberTypeTemp;
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembers:req completion:^(NSError *error, NSArray *tempMembers) {
NSArray *result;
if (!error) {
result = [members arrayByAddingObjectsFromArray:tempMembers];
if (result.count & wself.limit) {
result = [result subarrayWithRange:NSMakeRange(0, wself.limit)];
handler(error,result);
handler(error,members);
handler(error,members);
}视图控制器 NTESLiveInfoViewController 是一个聊天室信息页面,每次点击到这个页面时回去抓取一遍聊天室信息和主播信息。相关的摘录代码为:
- (void)requestChatroom
__weak typeof(self) wself = self;
[[NIMSDK sharedSDK].chatroomManager fetchChatroomInfo:self.chatroom.roomId completion:^(NSError *error, NIMChatroom *chatroom) {
if (!error)
wself.chatroom =
[wself refresh];
- (void)requestMaster
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc] init];
request.roomId
= self.chatroom.roomId;
request.userIds = @[self.chatroom.creator];
__weak typeof(self) wself = self;
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError *error, NSArray *members) {
if (!error) {
wself.master = members.firstObject;
[wself refresh];IM基础功能是满足APP用户互动需求的基本功能。
从聊天方式上包括单聊、群聊、聊天室;从信息类型上包括文字、表情、图片、语音、视频、地理位置、通知消息。
如果这些类型都不能满足,您还可以通过自定义消息来实现个性化需求。比如红包、新闻分享、石头剪刀布游戏等。
还可以通过实时音视频、教学白板等进行实时信息互通。
通过网易云信IM SDK,您不仅可以实现常见功能:私信、即时聊天、消息通知、游戏对战通讯等,还能完整打造易信、微信级大用户量级社交产品。
具体包含的功能列表可参见官网( )
云信服务架构
在开始集成前,我们先看看网易云信是怎样服务的:
接入步骤是怎样的?
开发集成SDK
网易云信Demo是一个功能较完整的IM软件,是可参考的网易云信各功能调用SDK实例,能帮助大家更充分的了解网易云信SDK的接入方式。
Demo源码导读
Android Getting Started
iOS Getting Started
PC Getting Started
Web Getting Started
为了让我们呈现的文档更容易被开发者理解,网易云信将全部产品线中的一些专业名词和约定的术语概念在此做出解释。节约您的时间是我们工作的动力。
开发者平台分配给开发者的公钥。
开发者平台分配给开发者的私钥。
云信用户id,云信中用户账号的唯一标识,每个应用下的账号唯一且不可更改,字符规则详见文档。
英文全称:Apple Push Notification service,中文翻译为:苹果推送通知服务。该技术由苹果公司提供的APNS服务。目前云信的iOS使用了苹果的APNS作为推送服务,详情可以参考文档。
AAC(Advanced Audio Coding),中文名:高级音频编码,目前云信的语音消息,以及服务端保存音频格式都是AAC格式。
网易云信服务器支持可以通过消息抄送功能,将消息数据实时同步给第三方开发者的服务器。在接收数据之前,需要在云信注册消息抄送数据的接收地址,目前抄送的功能分为
分辨率是用于度量图像内数据量多少的一个参数,通常表示成ppi(每英寸像素Pixel per inch)。通俗意义上,也有将视频宽高尺寸称作分辨率。网易云信的音视频最高支持720P。
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。网易云信支持第三方应用服务器通过HTTP协议来操作云信服务器的API接口,详情可参考文档。
SDK会保存一份本地消息历史记录,并提供了删除和查询的接口,由应用自己管理。云信服务端默认不存储应用消息历史记录,但提供保存服务端保存历史记录的服务,标准版保存的时间默认为1年,试用版保存的时间默认为30天。该服务占用服务端存储资源,是一项收费服务,最长可以保存3年。服务端保存的历史记录,同样提供查询接口供应用使用。
离线消息是指当发送方给接收方发送消息时,接收方不在线,此时该条消息就会被存储为离线消息,在接收方下次登录上线时同步给接收方,离线消息服务器最多下发每个会话100条消息,超过部分需要从云端记录拉取。
云信从2.0.0开始提供了一项聊天室的功能,聊天室相当于一个广场,只要有人看到了进入广场的门,任何人随时都可以进来,也可以随时离开。聊天室没有离线消息,漫游消息,推送消息,以及人数限制。聊天室分为固定成员以及游客,固定成员最多1000人,游客无上限,此外,聊天室还提供了禁言以及黑名单的功能,但是创建聊天室的方式只能通过服务端API的形式,详情请参考文档
网易云信支持在音视频进行的同时,对音视频进行录制,录制分为客户端录制以及服务端录制,客户端目前仅支持录制自己的,并保存到本地;服务端录制双方的,并保存成文件之后,支持抄送到第三方服务器。
漫游消息是指同一个用户在一台设备上收发的消息,当他在另一台设备上登录时同步的消息叫漫游消息。漫游消息最长7天,最多100个会话,每个会话100条消息,超过部分需要从云端记录拉取。
云信提供的群组分为两种:
开发手册中所提及的普通群都等同于Demo中的讨论组。普通群没有权限操作,适用于快速创建多人会话的场景。每个普通群只有一个管理员(群主)。管理员可以对普通群进行增减员操作,普通成员只能对普通群进行增员操作。在添加新成员的时候,并不需要经过对方同意。
高级群在权限上有更多的限制,权限分为群主、管理员、以及群成员。2.4.0之前版本在添加成员的时候需要对方接受邀请;2.4.0版本之后,可以设定被邀请模式(是否需要对方同意)。高级群可以覆盖所有普通群的能力,建议开发者创建时选用高级群。
与accid一起作为SDK连接云信服务器的凭证,即登录密码,作为登录时的校验,不会过期,没有时效限制。可调用服务端接口更新,字符规则详见文档。
通知类消息
属于会话中的一种消息,其对应的数据结构为IMMessage,有在线、离线、漫游。目前用于(已操作完成的)群通知事件,不计入消息未读数。Android没有通知栏提醒(如有需要,第三方自行实现),iOS没有APNS推送,一般位于聊天界面的中间。例如,群名称更新,某某某退出了群聊等。
提醒(Tip)消息
提醒消息用于会话内的状态提醒,一般用于自定义的通知提醒,位于聊天界面的中间,例如进入会话时出现的欢迎消息,或是会话过程中命中敏感词后的提示消息等场景。
系统通知属于云信内建的系统通知,由网易云信服务器推送给用户的通知类消息,用于网易云信系统类的事件通知。现在主要包括群变动的相关通知,例如入群申请,入群邀请等,如果第三方应用还托管了好友关系,好友的添加、删除也是这个类型的通知。系统通知由 SDK 负责接收和存储,并提供较简单的未读数管理。只有在线和离线,没有漫游。Android没有通知栏提醒(如有需要,第三方自行实现),iOS没有APNS推送。
自定义系统通知
自定义系统通知提供给第三方自定义的全局的通知类型,其对应的数据结构为 CustomNotification。只有在线和离线,没有漫游,Android没有通知栏提醒(第三方自行实现)
自定义消息
属于会话中的一种消息,其对应的数据结构为IMMessage,主要提供给第三方开发者定制消息使用,有在线、离线、漫游、通知栏提醒(文案需要自行定制)。
网易云信提供了一份状态码,方便开发者在接入SDK的时候能够更快的去定位问题,并且去解决问题。参考文档,强烈建议开发者对一些常见的状态码进行处理和判断,更够更加快速的解决问题。网易云信iPhone版(Store)}

我要回帖

更多关于 user manager服务 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信