徽微信聊天功能被限制己经被限制使用

网易云信:新增无限人数的实时语音聊天室功能
· 1&年前 |
阅读(17099)·
评论()| 来源
即时通讯云方案网易云信新增无限人数的聊天室功能,“云信聊天室”搭建在网易云信基础IM云服务之上,支持但不限于文字、语音、视频的交流方式,帮助开发者快速构建多样化的聊天室。
近日,即时通讯云方案网易云信:新增无限人数的语音聊天室功能,满足了开发者更多的应用需求。“云信聊天室”搭建在网易云信基础IM云服务之上,支持但不限于文字、语音、视频的交流方式,帮助开发者快速构建多样化的聊天室。主要应用范围在于社交、兴趣社区、纯语音聊天、游戏娱乐直播等领域。“在兴趣聊天室,偶尔会出现超过10000人的超大型聊天室,我们都可以支持,包括使用、文字、图片、语音、视频、表情等常见交流形式,以及地理位置、通知消息、消息抄送等个性业务,”网易云信聊天室开发者表示,这是因为网易背后拥有强大的支撑技术,相关产品都经历过“海量用户高并发”的考验,拥有成熟的解决方案。同时,聊天室全面支持PC、Web、安卓、IOS等平台。以热门的游戏、娱乐直播为例,通过网易云信,不仅可以搭载视频直播,还可以加入聊天室内容,使直播和文字聊天相结合,丰富交流形式。在聊天室管理方面,用户可以进行创建、解散,实现资料编辑、历史消息(默认10条)等功能,聊天室权限操作包括踢人、禁言、拉黑、设置管理员等。网易云信是去年网易推出的一款即时通讯云服务产品,瞄准创业服务市场,即以PaaS为服务模式,向开发者提供IM SDK和 OPEN API,使各类APP能够短时间内接入聊天功能。上线以来,网易云信在功能方面稳扎稳打,其突出的技术优势、良好的稳定性和工程师服务得到市场广泛认可,并获得赛迪网评选的2015年年度“中国最佳云技术应用奖”和“中国IT行业最佳服务商奖”。官方地址是:
来源: - 即时通讯开发者社区!
云信的营销貌似很烂,牛皮倒是吹的很响,但没有更多的小白鼠出现之前,确实很难说法老板啊
即时通讯框架hot
开源移动端即时通讯框架。
轻量级Web端即时通讯框架。
移动端实时音视频框架。
基于MobileIMSDK的IM系统。
本月热门资讯
技术好文分类
最新社区主题
123456789101112131415
商务/合作:
投稿/报道:
手机访问本站
微信公众号new徽信消息删掉怎么找回_百度知道
徽信消息删掉怎么找回
我有更好的答案
设置,通用,聊天记录迁移,全选微信聊天记录删除前应该备份,如果没有备份的话,是没有办法还原的。方法
没法找回吧。。。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。网易云信 iOS SDK
哪些应用在使用它?
开发准备NIM SDK 提供两种集成方式:您既可以通过&CocoaPods&自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。我们提供两个下载地址。分别为:官网 SDK&。为了避免与开发者的其他库发生冲突, 我们提供了&,此仓库分离了所有第三方依赖库,开发者可以根据项目情况自行选择连接。手动添加 SDK根据自己工程需要,下载对应版本的 NIM SDK,得到一个 NIMSDK.a 文件和 ExportHeaders 文件夹 (去除所有依赖的版本还会附加未连接的全部三方依赖库&注1&),将他们导入工程。添加其他 NIM SDK 依赖库注1&:去掉依赖库版本的 SDK ,需要开发者根据自身项目,将不冲突的依赖库也添加进工程。注2&:在 XCode7 以上版本中后缀为 tbd , XCode6 及以下均为 dylib。MobileCoreServices.frameworkSystemConfiguration.frameworkAVFoundation.framworkCoreTelephony.frameworkCoreMedia.frameworkAudioToolbox.frameworkVideoToolbox.frameworklibstdc++.6.0.9.tbd&注2libsqlite3.0.tbd&注2libz.tbd&注2在&Build Settings&-&&Other Linker Flags&里,添加选项&-ObjC。如果您的工程需要使用 C++ ,在&Build Setting&-&&Apple LLVM 7.0 - Language - C++&-&&C++ Standard Library里, 设置值为&libstdc++ (GNU C++ standard library)。在工程配置&info.plist&文件中,添加条目&NSAppTransportSecurity&,属性设为&Dictionary。在此条目下添加键值对,key 为&NSAllowsArbitraryLoads, 值为&YES。在需要使用 SDK 的地方 import &NIMSDK.h& 。由于 SDK 是静态库,为方便开发者使用,我们将 armv7 i386 x86_64 arm64 平台的静态库合并成一个 Fat Library ,导致整个 SDK 比较大。但实际编译时会根据调用功能多少增加 ipa 文件大小,实测大约会增加 5M 左右。通过 CocoaPods 集成在&Podfile&文件中加入复制&&pod&'NIMSDK'安装复制&&pod&installSDK 类说明NIM SDK 主要提供了如下类(协议)与方法NIMSDK&整个SDK的主入口,单例,主要提供初始化,注册,内部管理类管理的功能NIMLoginManager&登录管理类,负责登录,注销和相应的回调收发NIMChatManager&聊天管理类,负责消息的收发NIMConversationManager&会话管理类,负责消息,最近会话的管理NIMTeamManager&群组管理类,负责群组各种操作NIMMediaManager&媒体管理类,负责多媒体相关的接口,比如录音NIMSystemNotificationManager&系统通知管理类,负责系统消息的接收和存储NIMApnsManager&推送管理类,负责推送的设置和接收NIMResourceManager&资源管理类,负责文件的上传和下载NIMNetCallManager&音视频网络通话管理类,提供音视频网络通话功能NIMRTSManager&实时会话管理类,提供数据通道 (TCP/语音通道) 来满足实时会话的需求NIMUserManager&好友管理类,负责对好友的增删查,以及对其会话的消息设置NIMChatroomManager&聊天室管理类,负责聊天室状态管理和数据拉取及设置初始化 SDK在需要使用 SDK 的地方导入头文件 NIMSDK.h添加 SDK 初始化方法复制-(BOOL)application:(UIApplication&*)application&didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions&{
&&&&&&[[NIMSDK&sharedSDK]&registerWithAppID:您的APPKEY
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cerName:您的推送证书名];&&&&&&return&YES;
&&}推荐在 APP 启动时尽快注册 NIM SDK。登录与登出手动登录调用复制[[[NIMSDK&sharedSDK]&loginManager]&login:account
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&token:token
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&completion:^(NSError&*error)&{}];error为登录错误信息,成功则为nil。不要在登录完成的回调中直接获取 SDK 缓存数据,而应该在&同步完成的回调里获取数据&或者&监听相应的数据变动回调后获取&。注:在不特殊说明的情况下,SDK 的所有回调都是在主线程中发起,无论是以 block 还是 delegate 的形式,也推荐开发者仅在主线程调用 SDK 相关接口。获取登录帐号的云信 id:复制NSString&*userID&=&[NIMSDK&sharedSDK].loginManager.currentASDK 不支持直接添加云信用户,请参考,在您的应用服务器上使用 Http 接口进行添加。自动登录NIM SDK 有两种自动登录的场景:1.SDK 发起的自动登录:登录完毕后因网络发生切换,断网等情况发生而需要重连,SDK 将自动进行重连重登,无需 APP 干预。2.APP 发起的自动登录:APP 启动时,如果已保存用户名和密码可以选择调用自动登录接口,并立刻打开主界面。此时 APP 可以在无网络,未登录成功的状态下直接访问用户本地数据。复制//APP主动发起自动登录-&(void)autoLogin:(NIMAutoLoginData&*)loginDataNIMAutoLoginData&中的&forcedMode&为强制模式开关。非强制模式下的自动登录,服务器将检查当前登录设备是否为上一次登录设备,如果不是,服务器将拒绝这次自动登录(返回 error code 为 417 的错误);强制模式下的自动登录,服务器将不检查当前登录设备是否为上一次登录设备,安全性较低,但较为便捷。和手动登录不同,自动登录通过委托通知登录状态。 APP 需要实现如下回调 (手动登录也会收到同样的委托回调)复制-&(void)onLogin:(NIMLoginStep)step自动登录过程不需要 APP 加以干预,SDK 会在有网络的情况下有策略地不断重试直到登录为止。但下面两种异常情况需要 APP 处理:被踢和特殊的登录错误。被踢的回调复制-(void)onKick:(NIMKickReason)code&
&&&clientType:(NIMLoginClientType)clientTypeAPP收到被踢回调后需要进行注销并切换到登录界面。自动登录失败的回调复制-&(void)onAutoLoginFailed:(NSError&*)error大部分自动登录回调错误 APP 并不需要关心,只需注意如下两种情况:1.用户名密码错误导致自动登录失败,error code 为 302。这种情况一般发生于用户在其他设备上修改了密码。2.已有一端登录导致自动登录失败,error code 为 417。这种情况发生于非强制登录模式下已有一端在线而当前设备进行自动登录(设置为只允许一端同时登录时),出于安全方面的考虑,云信服务器判定当前端需要重新手动输入用户密码进行登录,故拒绝登录。一旦发生如上情况,APP 同样需要进行注销并切换到登录界面。登出调用复制[[[NIMSDK&sharedSDK]&loginManager]&logout:^(NSError&*error){}];应用层登出/注销自己的账号时需要调用 SDK 的登出操作,该操作会通知云信服务器进行 APNS 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。考虑到用户体验,登出的超时时间会比其他请求短一些。上层应用不管登出请求是否成功,UI 表现上都应该做出登出行为。多端登录当用户在某个客户端登录时,其他没有被踢掉的端会触发回调:复制-&(void)onMultiLoginClientsC同时,可以查询当前时间登录的设备列表:复制-&(NSArray&NIMLoginClient&*&&*)currentLoginC云信内置踢人策略为:移动端(Android,iOS)互踢,桌面端(PC,Web)互踢,移动端和桌面端共存。如果当前的互踢策略无法满足业务需求的话,可以联系我们取消内置互踢,根据多端登录的回调和当前的设备列表,判断本设备是否需要被踢出。如果需要踢出,直接调用登出接口并在界面上给出相关提示即可。登录与用户信息同步NIM SDK 的登录一共有大约十个步骤,包括正在连接,连接成功,正在登录等。详见 NIMLoginStep 枚举。其中重要的两个步骤为:登录成功 (NIMLoginStepLoginOK) 和 同步成功 (NIMLoginStepSyncOK)。登录成功 SDK 已成功登录,获取到基本信息,并开始同步数据同步成功 SDK 已同步完成所有 IM 信息NIM SDK 在登录后会同步群信息,离线消息,漫游消息,系统通知等数据。基础消息功能消息功能概述SDK 中用户与同一个对象的聊天信息集合,称为一个会话,用&NIMSession&来表示。会话有单人会话,群组会话,聊天室会话等类型。SDK 中用于表示消息的结构为&NIMMessage,目前提供如下几种消息类型,不同的消息类型对应不同的 MessageObject消息格式MessageObject文本消息nil图片消息NIMImageObject音频消息NIMAudioObject视频消息NIMVideoObject地理位置消息NIMLocationObject通知消息NIMNotificationObject提醒消息NIMTipObject自定义消息NIMCustomObject消息&NIMMessage&定义了一些额外的状态属性,推荐只在主线程对这些属性进行读写:消息的接收状态&isReceivedMsg由于漫游消息的存在,所以自己发出的消息漫游下来后仍旧是&收到的消息&,这个字段用于消息出错时,判断需要重发还是重收。消息的排版状态&isOutgoingMsg用于鉴别是否为发出去的消息。用户可以选择和自己发起对话,所以并不是所有来源是自己的消息都是往外发的消息,这个字段主要用于判断头像排版位置,往外发的消息气泡放右边,其他消息气泡放左边。消息的投递状态&deliveryState此状态仅对发送的消息有效。消息的投递状态有&发送中&,&发送失败&,&发送成功&三种。消息附件的下载状态&attachmentDownloadState此状态仅对收到的且带有附件的消息有效。 下载状态有&下载失败&,&下载中&,&下载成功&三种。消息的删除状态&isDeleted消息是否标记为已删除,已删除的消息在获取本地消息列表时会被过滤掉,只有根据messageId获取消息的接口可能会返回已删除消息。消息的播放状态&isPlayed用于鉴别音频类的消息是否播放过。 上层应用可以根据业务修改这个属性。注意不要频繁修改这个属性值,每次对这个属性做出修改,就会自动更新一次数据库。消息服务器扩展字段&remoteExt此字段会发送到其他端,上层需要保证 NSDictionary 可以转换为 JSON。消息本地扩展字段&localExt此字段只在本地存储,不会发送至对端,上层需要保证 NSDictionary 可以转换为 JSON。消息发送方的显示名&senderName服务器内置的消息发送者名字,当发送者是自己时,这个值为空。在本地没法获取到相应发送者信息时推荐时使用这个值。对端已读&isRemoteRead接收对端已读回执后,所有小于已读回执时间戳的消息都会被置为&对端已读&。发送消息1.构造并发送消息文本消息复制//构造消息NIMMessage&*message&=&[[NIMMessage&alloc]&init];message.text&&&&=&//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];图片消息复制//构造消息NIMImageObject&*&imageObject&=&[[NIMImageObject&alloc]&initWithImage:image];
NIMMessage&*message&&&&&&&&&&=&[[NIMMessage&alloc]&init];
message.messageObject&&&&&&&&=&imageO//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];音频消息复制//构造消息NIMAudioObject&*audioObject&=&[[NIMAudioObject&alloc]&initWithSourcePath:filePath];
NIMMessage&*message&&&&&&&&=&[[NIMMessage&alloc]&init];
message.messageObject&&&&&&=&audioO//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];视频消息复制//构造消息NIMVideoObject&*videoObject&=&[[NIMVideoObject&alloc]&initWithSourcePath:filePath];
NIMMessage&*message&&&&&&&&&=&[[NIMMessage&alloc]&init];
message.messageObject&&&&&&&=&videoO//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];地理位置消息复制//构造消息//其中,latitude为纬度,longitude为经度,title为位置的描述字段NIMLocationObject&*locationObject&=&[[NIMLocationObject&alloc]&initWithLatitude:latitude&Longitude:longitude&address:title];
NIMMessage&*message&&&&&&&&&&&&&&&=&[[NIMMessage&alloc]&init];
message.messageObject&&&&&&&&&&&&&=&locationO//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];通知消息一些特定场景的行为,云信服务器预置了一些通知消息。通知消息也是一种特定消息,开发者需要解析消息中附带的信息,来获取通知内容,具体步骤为:解析&NIMMessage&中的&messageObject&字段,强类型转换为&NIMNotificationObject。解析&NIMNotificationObject&中的&content&字段,得到父类&NIMNotificationContent。根据&NIMNotificationContent&中的&notificationType&字段,将父类&NIMNotificationContent&强类型转化成具体子类型。 所有&content&类型如下:通知类型NIMNotificationContent群通知NIMTeamNotificationContent网络电话通知NIMNetCallNotificationContent聊天室通知NIMChatroomNotificationContent未被支持类型通知NIMUnsupportedNotificationContent由于系统升级,旧版本的 SDK 可能无法解析新版本数据,所有无法解析的新通知显示为未被支持。当不需要一些通知时,开发者可以实现&NIMSDKConfig&的委托&delegate,来控制哪些通知需要忽略。复制&&-&(BOOL)shouldIgnoreNotification:(NIMNotificationObject&*)notification当消息将要存储到本地时,会调用此回调,开发者只应该在这个回调里做简单逻辑判断,如果做耗时操作会严重影响存储性能。不支持从客户端发出通知消息。提醒消息提醒消息用于会话内的状态提醒,如进入会话时出现的欢迎消息,会话命中敏感词后的提示消息等。复制//构造消息NIMTipObject&*tipObject&=&[[NIMTipObject&alloc];
NIMMessage&*message&&&&&=&[[NIMMessage&alloc]&init];message.messageObject&&&=&tipO//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];自定义消息自定义消息用于 APP 拓展自己的消息类型,实现不同业务逻辑。自定义消息的 MessageObject(NIMCustomObject) 仅有一个 id&字段,SDK 会负责透传这个对象序列化后的结果。NIMCustomAttachment 协议包括一个必须实现的序列化接口和三个与上传相关的可选接口。如果需要在自定义消息中上传文件作为附件的一部分,必须实现这三个上传接口,缺一不可。实现自定义消息。复制//构造消息NIMCustomObject&*customObject&&&&&=&[[NIMCustomObject&alloc]&init];&
customObject.attachment&&&&&&&&&&&=&
NIMMessage&*message&&&&&&&&&&&&&&&=&[[NIMMessage&alloc]&init];message.messageObject&&&&&&&&&&&&&=&customO//构造会话NIMSession&*session&=&[NIMSession&session:userId&type:NIMSessionTypeP2P];//发送消息[[NIMSDK&sharedSDK].chatManager&sendMessage:message&toSession:session&error:nil];2.检查调用状态正常情况这一步可以省略,但刚开始集成 SDK 时,因为上层开发对 API 不熟悉有可能传入一些无效参数,推荐在开发前期务必检查 sendMessage:toSession:error 的返回值和 error 信息,并以此为依据排查问题。3.处理回调在调用完发送消息接口后,通常会收到如下回调即将发送消息回调复制-&(void)willSendMessage:(NIMMessage&*)message建议开发者仅在收到这个回调后才将消息加入显示用的数据源中。消息发送进度回调复制-&(void)sendMessage:(NIMMessage&*)message
&&&&&&&&&&&progress:(CGFloat)progress图片,视频等需要上传附件的消息会有比较详细的进度回调,文本消息则没有这个回调。消息发送完毕回调复制-&(void)sendMessage:(NIMMessage&*)message
didCompleteWithError:(NSError&*)error如果消息发送成功 error 为 nil,反之 error 会被填充具体的失败原因。4.重发因为网络原因等导致的发送消息失败而需要重发的情况,直接调用复制-&(BOOL)resendMessage:(NIMMessage&*)message
&&&&&&&&&&&&&&&&error:(NSError&**)error此时如果再次调用 sendMessage,则会被 NIM SDK 认作新消息。5.消息的发送设置SDK 提供消息发送设置来满足开发者的对服务器自定义需求,这些设置可以在&NIMMessage&的&NIMMessageSetting&属性中找到。消息允许在消息历史中拉取开关&historyEnabled默认为 YES 。正常而言所有消息都会出现在通过&NIMConversationManager&调用(&fetchMessageHistory:option:result:&)返回的结果中,但是可以通过设置这个值来使得消息不出现在这其中。消息支持漫游开关&roamingEnabled默认为 YES 。 消息漫游的概念是指一定时间内发送的消息可以在另一端被同步到,以保证最大限度的消息同步。(如 iOS 上收发的消息过了一天登录 PC 仍旧会收到,这种消息我们称之为漫游消息)消息支持多端同步开关&syncEnabled默认为 YES 。在默认情况下,如果用户在 iOS 端和其他端(如 PC )同时登录一个帐号,那么 iOS 端发送的消息会被同步到其他端,同样其他端发送的消息也会被同步到 iOS 端。但是需要注意的是因为 iOS 经常会退到后台,所以其他端发送的消息在 iOS 断线后是通过漫游消息来同步到的。消息被计入未读开关&shouldBeCounted默认为 YES 。默认情况下,用户收到的所有消息都会被计入未读。设置这个为 NO 后,对应的消息被对端接受后将不计入未读消息计数内。本地写消息时,也可以用这个字段配置写入后是否计入未读。消息需要被推送开关&apnsEnabled默认为YES。设置这个为NO后,消息将不再有苹果推送通知。消息推送前缀开关(一般为昵称)&apnsWithPrefix默认为YES。将这个字段设为NO,推送消息将不带有前缀,如推送消息 “ 小明:今天吃什么? ” 中的 “ 小明:” 将被省略。消息是否需要抄送&routeEnabled默认为YES。将这个字段设为NO, 则不会抄送此消息给开发者的服务器(如果有配置的话)接收消息回调处理 收消息过程会通过&chatManager&的回调函数通知上层复制-&(void)onRecvMessages:(NSArray&NIMMessage&*&&*)messages如果收到的是图片,视频等需要下载附件的消息,在回调的处理中还需要调用(SDK 默认会在第一次收到消息时自动调用)复制-&(BOOL)fetchMessageAttachment:(NIMMessage&*)message
&&&&&&&&&&&&&&&&&&&&&&&&&error:(NSError&**)error进行附件的下载,附件的下载过程会通过复制-&(void)fetchMessageAttachment:(NIMMessage&*)message
&&&&&&&&&&&&&&&&&&&&&&progress:(CGFloat)progress复制-&(void)fetchMessageAttachment:(NIMMessage&*)message
&&&&&&&&&&didCompleteWithError:(NSError&*)这两个回调返回进度和结果。消息转发除了&通知消息&之外,其他类型消息均支持转发给其他会话。复制-&(BOOL)forwardMessage:(NIMMessage&*)message
&&&&&&&&&&&&&toSession:(NIMSession&*)session
&&&&&&&&&&&&&&&&&error:(NSError&**)error这里返回的&error&参数只是表示当前这个函数调用是否成功,需要后续的回调才能够判断消息是否已经发送至服务器。后续回调和普通消息发送流程相同。已读回执在会话界面中调用发送已读回执的接口并传入最后一条消息,即表示这之前的消息都已读,对端将收到此回执。发送已读回执复制-&(void)sendMessageReceipt:(NIMMessageReceipt&*)receipt
&&&&&&&&&&&&&&&&completion:(NIMSendMessageReceiptBlock)接受已读回执复制-&(void)onRecvMessageReceipt:(NIMMessageReceipt&*)在发送端&NIMMessageReceipt&需要通过最后一条消息&NIMMessage&进行初始化并进行发送,而接收端可以通过&NIMMessageReceipt&中的&timestamp&来得知发送端当前已读时间戳。此功能仅在&P2P&消息中有效。重复发送和通过无效消息构造的已读回执都将被 SDK 忽略。消息撤回在会话时,允许用户撤回一定时间内发送过的消息,这个时长可以由云信管理后台进行配置。复制-&(void)revokeMessage:(NIMMessage&*)message
&&&&&&&&&&&completion:(NIMRevokeMessageBlock)在撤回消息请求调用成功后, SDK 会先回调给上层成功,再自动将本地的这条消息删除。如果需要在撤回后显示一条已撤回的提示 ( 见 Demo 交互 ) ,开发者可以自行构造一条提醒消息并插入本地数据库。以下情况消息撤回会失败消息并没有投递到对端消息超过撤回时限当有消息撤回发生时,被撤回方 SDK 会触发回调:复制-&(void)onMessageRevoked:(NIMMessage&*)messageSDK 在收到消息撤回后,会先从本地数据库中找到对应消息并进行删除,之后通知上层消息已删除。如果需要在撤回后显示一条已撤回的提示 ( 见 Demo 交互 ) ,开发者在这个回调中自行构造一条提醒消息并插入本地数据库。需要注意的是,客户端每次登陆同步后,会将已撤回的消息同步下来并通知给上层。但如果某条被撤回的消息,客户端之前没有收到过,那么就不会有此消息被撤回的通知。由于用户业务场景不一致,在撤回后可能在撤回后用一条提醒消息替代,也有可能不做任何提示,而被撤回的消息本身可能是未读的,这样不同的业务逻辑就造成了未读数的不一致。 在&NIMSDKConfig.h&中统一封装了撤回未读配置 接口:复制@property&(nonatomic,assign)&BOOL&shouldConsiderRevokedMessageUnreadC默认为 NO。设置成 YES 的情况下,如果被撤回的消息本地还未读,那么当消息发生撤回时,对应会话的未读计数将减 1 以保持最近会话未读数的一致性。 当不做任何提示时,可以设置为 YES,以保持未读计数的一致性。最近会话NIMConversationManager&提供最近消息的本地存储管理功能。最近会话&NIMRecentSession&用于表示会话列表页的数据模型。当用户发送,收取及删除消息时,都会同时去修改最近会话。当收到或者一条消息时,会自动生成这个消息对应的最近会话。但值得注意的是最近会话和会话并不是一一对应的关系,删除最近会话并不会影响会话。获取最近会话,一般用于首页显示会话列表复制-&(NSArray&NIMRecentSession&*&&*)allRecentSessions最近会话的通知NIMConversationManager&提供了最近会话的三个回调通知上层:分别为增加,修改,删除最近会话的回调:复制-&(void)didAddRecentSession:(NIMRecentSession&*)recentSession
&&&&&&&&&&&totalUnreadCount:(NSInteger)totalUnreadCount
-&(void)didUpdateRecentSession:(NIMRecentSession&*)recentSession
&&&&&&&&&&&&&&totalUnreadCount:(NSInteger)totalUnreadCount
-&(void)didRemoveRecentSession:(NIMRecentSession&*)recentSession
&&&&&&&&&&&&&&totalUnreadCount:(NSInteger)totalUnreadCount最近消息添加开发者无法自己添加最近消息,最近消息会在发送或者收到消息的时候自动添加,并触发增加最近会话的回调。消息/会话的删除单条消息的删除复制-&(void)deleteMessage:(NIMMessage&*)调用此方法时,如果删除的是最后一条消息,消息所属的最近会话的 lastMessage 属性会自动变成上一条消息(没有则为空消息),同时触发最近消息修改的回调。单个会话批量消息删除复制-&(void)deleteAllmessagesInSession:(NIMSession&*)session
&&&&&&&&&&&&&&&removeRecentSession:(BOOL)removeRecentSessionremoveRecentSession&标记了最近会话是否会被保留,会话内消息将会标记为已删除。调用此方法会触发最近消息修改的回调,如果选择保留最近会话,&lastMessage&属性将会被置成一条空消息。最近会话的删除复制-&(void)deleteRecentSession:(NIMRecentSession&*)recentSession只会删除最近会话,但保留会话内消息。调用时,总未读消息数会减去当前会话的未读数。调用此方法触发最近消息删除的回调。清空所有会话的消息复制-&(void)deleteAllMessages:(BOOL)removeRecentSessionsremoveRecentSession&标记了最近会话是否会被保留。调用这个接口只会触发&- (void)allMessagesDeleted&回调,其他针对单个 recentSession 的回调都不会被调用。总未读数获取复制-&(NSInteger)allUnreadCount标记某个会话为已读复制-&(void)markAllMessagesReadInSession:(NIMSession&*)session调用这个方法时,会将所有属于这个会话的消息都置为已读状态。相应的最近会话(如果有的话)未读数会自动置 0 并且触发最近消息修改的回调历史记录云端记录NIMConversationManager&支持从云信服务器上远程获取之前的聊天历史记录。复制-&(void)fetchMessageHistory:(NIMSession&*)session
&&&&&&&&&&&&&&&&&&&&&option:(NIMHistoryMessageSearchOption&*)option&&&&&&&&&&&&&&&&&&&&&result:(NIMFetchMessageHistoryBlock)其中 option 为搜索选项,具体选项如下:搜索方向: 从当前消息开始,正向或反向查询消息历史。此参数对聊天室会话无效搜索条数: 搜索的范围由 startTime ,endTime 和 limit 参数共同限制,limit 为非零整数,上限为 100 条。同步数据: 是否在远程获取消息成功之后同步到本地数据库,同步只会保证消息数据写入本地但不触发回调。默认不同步。本地记录NIMConversationManager&支持本地查询消息复制&-&(NSArray&NIMMessage&*&&*)messagesInSession:(NIMSession&*)session
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&message:(NIMMessage&*)message
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&limit:(NSInteger)传入一个已知的消息,返回比这个消息更早的消息集合。如果没有已知的消息,则传入 nil,返回最新的消息集合。NIMConversationManager&支持按消息 id 查询消息,可以查出被删除的消息。复制&-&(NSArray&NIMMessage&*&&*)messagesInSession:(NIMSession&*)session&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&messageIds:(NSArray&NSString&*&&*)messageINIMConversationManager&支持根据会话搜索本地历史消息复制&-&(void)searchMessages:(NIMSession&*)session
&&&&&&&&&&&&&&&&&option:(NIMMessageSearchOption&*)option&&&&&&&&&&&&&&&&&result:(NIMSearchMessageBlock)以及搜索本地全局历史消息复制&-&(void)searchAllMessages:(NIMMessageSearchOption&*)option&&&&&&&&&&&&&&&&result:(NIMGlobalSearchMessageBlock)result其中 option 为搜索选项,具体选项如下:搜索将返回:时间在 (startTime,endTime) 之间,消息类型为指定类型,且匹配搜索内容或消息发起者列表的一定数量的消息。搜索方向: 正向或反向查询消息历史。搜索条数: 搜索的范围由 startTime , endTime 和 limit 参数共同限制。limit 为非零整数。消息类型: 需要搜索的消息类型。匹配内容: 如果需要搜索的消息类型为文本,会进行内容的匹配。是否是全消息类型:默认为 NO,当设置为 YES 时,忽略 messageType 和 searchContent,同时返回所有的消息类型消息。消息发起者列表。语音录制及播放多媒体管理&NIMMediaManager&提供了音频播放、高清语音录制的功能。需要注意的是 NIM SDK 中的语音播放和录制仅支持 aac 和 amr,如果需要更多格式的支持,APP 需要自己实现,但并不推荐。播放音频切换音频的输出设备。复制-&(BOOL)switchAudioOutputDevice:(NIMAudioOutputDevice)outputDevice判断是否正在播放音频复制-&(BOOL)isPlaying播放音频复制-&(void)playAudio:(NSString&*)filePath&
&&&&&withDelegate:(id&NIMMediaManagerDelgate&)delegate其中&filePath&为音频文件的路径,该操作会触发以下回调:初始化工作完成,准备开始播放音频的时候会触发复制-&(void)playAudio:(NSString&*)filePath&didBeganWithError:(NSError&*)error音频播放结束的时候会触发复制-&(void)playAudio:(NSString&*)filePath&didCompletedWithError:(NSError&*)error停止播放音频复制-&(void)stopPlay该操作会触发回调:复制-&(void)playAudio:(NSString&*)filePath&didCompletedWithError:(NSError&*)error录制音频判断是否正在录制音频复制-&(BOOL)isRecording录制音频复制-&(void)record:(NIMAudioType)type
&&&&&&duration:(NSTimeInterval)duration&&&&&&delegate:(id&NIMMediaManagerDelgate&)其中&duration&限制了录音的最大时长,该操作会触发以下回调:初始化工作完成,准备开始录制的时候会触发复制-&(void)recordAudio:(NSString&*)filePath&didBeganWithError:(NSError&*)error当到录音时长达到设置的最大时长,或者手动停止录音会触发复制-&(void)recordAudio:(NSString&*)filePath&didCompletedWithError:(NSError&*)error按照一定的时间间隔触发复制-&(void)recordAudioProgress:(NSTimeInterval)currentTime其中&currentTime&为当前的录音时长,触发该回调的时间间隔可以通过以下属性设置,默认为 0.3 秒@property (nonatomic, assign) NSTimeInterval recordProgressUpdateTimeInterval停止录制音频复制-&(void)stopRecord该操作会触发复制-&(void)recordAudio:(NSString&*)filePath&didCompletedWithError:(NSError&*)error取消录音复制-&(void)cancelRecord该操作会触发复制-&(void)recordAudioDidCancelled获取录音分贝获取峰值复制-&(float)recordPeakPower获取平均值复制-&(float)recordAveragePower来电打断来电时会根据正在播放音频还是录音,分别触发复制-&(void)playAudioInterruptionBegin
-&(void)recordAudioInterruptionBegin通话结束返回应用会分别触发复制-&(void)playAudioInterruptionEnd
-&(void)recordAudioInterruptionEnd群组功能群组功能概述群组功能对应的管理类为&NIMTeamManager&。NIMTeamManager&提供了普通群 (Normal) 以及高级群 (Advanced) 两种形式的群聊功能。高级群拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。推荐 APP 开发时只选择一种群类型进行开发。普通群和高级群在原则上是不能互相转换的,他们的群类型在创建时就已经确定。在 SDK&2.4.0&版本后,高级群可以拥有普通群的全部功能,推荐使用高级群进行开发。普通群开发手册中所提及的普通群都等同于 Demo 中的讨论组。普通群没有权限操作,适用于快速创建多人会话的场景。每个普通群只有一个管理员。管理员可以对群进行增减员操作,普通成员只能对群进行增员操作。在添加新成员的时候,并不需要经过对方同意。高级群高级群在权限上有更多的限制,权限分为群主、管理员、以及群成员。获取群组NIM SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。 SDK 提供了批量获取自己的群接口、以及根据单个群 id 查询的接口。同样 SDK 也提供了远程获取群信息的接口。本地获取复制-&(NSArray&NIMTeam&*&&*)allMyTeams
-&(NIMTeam&*)teamById:(NSString&*)teamId远程获取复制-&(void)fetchTeamInfo:(NSString&*)teamId
&&&&&&&&&&&completion:(NIMTeamFetchInfoHandler)创建群组复制-&(void)createTeam:(NIMCreateTeamOption&*)option
&&&&&&&&&&&&&users:(NSArray&NSString&*&&*)users
&&&&&&&&completion:(NIMTeamCreateHandler)completionoption 提供以下创建群选项创建群类别,普通群或者高级群群名称群头像群介绍群公告群验证方式邀请群成员邀请附言被邀请人验证方式谁可以邀请其他人入群 (默认群主管理员)谁可以修改群资料 (默认群主管理员)谁可以修改群自定义属性(默认群主管理员)加入群组用户可以通过被动接受邀请和主动加入两种方式进入群组。邀请用户入群复制-&(void)addUsers:(NSArray&NSString&*&&&*)users
&&&&&&&&&&toTeam:(NSString&*)teamId
&&&&&&postscript:(NSString&*)postscript
&&&&&&completion:(NIMTeamMemberHandler)completion请求完成后,如果是普通群,被邀请者将直接入群;如果是高级群,云信服务器会下发一条系统消息到目标用户,目标用户可以选择同意或者拒绝入群。同意群邀请(仅限高级群)复制-&(void)acceptInviteWithTeam:(NSString*)teamId
&&&&&&&&&&&&&&&&&&&invitorId:(NSString*)invitorId
&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block拒绝群邀请(仅限高级群)复制-&(void)rejectInviteWithTeam:(NSString*)teamId
&&&&&&&&&&&&&&&&&&&invitorId:(NSString*)invitorId
&&&&&&&&&&&&&&&&rejectReason:(NSString*)rejectReason
&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block主动申请入群(仅限高级群)复制-&(void)applyToTeam:(NSString&*)teamId
&&&&&&&&&&&&message:(NSString&*)message
&&&&&&&&&completion:(NIMTeamApplyHandler)block请求完成后,云信服务器会下发一条系统消息给群管理员,管理员可以选择通过或者拒绝申请。通过申请(仅限高级群)复制-&(void)passApplyToTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&&&userId:(NSString&*)userId
&&&&&&&&&&&&&completion:(NIMTeamApplyHandler)block拒绝申请(仅限高级群)复制-&(void)rejectApplyToTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&userId:(NSString&*)userId
&&&&&&&&&&&&&rejectReason:(NSString&*)rejectReason
&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block编辑群组资料普通成员可以修改自己的群资料,管理员以上权限的群成员可以修改他人群资料以及群组信息。包括:修改群成员昵称复制-&(void)updateUserNick:(NSString&*)userId
&&&&&&&&&&&&&&&newNick:(NSString&*)newNick
&&&&&&&&&&&&&&&&inTeam:(NSString&*)teamId
&&&&&&&&&&&&completion:(NIMTeamHandler)block修改群名称复制-&(void)updateTeamName:(NSString&*)teamName
&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&completion:(NIMTeamHandler)block修改群头像复制-&(void)updateTeamAvatar:(NSString&*)teamAvatarUrl
&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&completion:(NIMTeamHandler)&block修改群介绍复制-&(void)updateTeamIntro:(NSString&*)intro
&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&completion:(NIMTeamHandler)block修改群公告复制-&(void)updateTeamAnnouncement:(NSString&*)announcement
&&&&&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block修改群验证方式复制-&(void)updateTeamJoinMode:(NIMTeamJoinMode)joinMode
&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block修改被邀请人验证方式复制-&(void)updateTeamBeInviteMode:(NIMTeamBeInviteMode)beInviteMode
&&&&&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)修改谁可以邀请其他人入群复制-&(void)updateTeamInviteMode:(NIMTeamInviteMode)inviteMode
&&&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block修改谁可以修改群资料复制-&(void)updateTeamUpdateInfoMode:(NIMTeamUpdateInfoMode)updateInfoMode
&&&&&&&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block修改谁可以修改群自定义属性复制-&(void)updateTeamUpdateClientCustomMode:(NIMTeamUpdateClientCustomMode)clientCustomMode
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block管理群组权限高级群群主可以对群进行权限管理,权限管理包括:提升管理员复制-&(void)addManagersToTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&users:(NSArray&NSString&*&&&*)users
&&&&&&&&&&&&&&&completion:(NIMTeamHandler)completion移除管理员复制-&(void)removeManagersFromTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&&&&&&users:(NSArray&NSString&*&&&*)users
&&&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)completion转让群复制-&(void)transferManagerWithTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&&&&newOwnerId:(NSString&*)newOwnerId
&&&&&&&&&&&&&&&&&&&&&&&&isLeave:(BOOL)isLeave
&&&&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block群组成员获取群成员复制-&(void)fetchTeamMembers:(NSString&*)teamId
&&&&&&&&&&&&&&completion:(NIMTeamMemberHandler)block获取到的群成员只有云信服务器托管的群相关数据,需要开发者结合自己管理的用户数据进行界面显示。修改自己的群成员自定义属性复制-&(void)updateMyCustomInfo:(NSString&*)newInfo
&&&&&&&&&&&&&&&&&&&&inTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block修改后,其他在线用户自动同步获得修改后的属性。用户退群复制-&(void)quitTeam:(NSString&*)teamId
&&&&&&completion:(NIMTeamHandler)block用户退群成功后,相关会话信息仍然会保留,但不再能接收关于此群的消息。禁言用户复制-&(void)updateMuteState:(BOOL)mute
&&&&&&&&&&&&&&&&&userId:(NSString&*)userId
&&&&&&&&&&&&&&&&&inTeam:(NSString&*)teamId
&&&&&&&&&&&&&completion:(NIMTeamHandler)block禁言用户后,云信服务器会下发一条提示该用户被禁言的群组通知消息。踢出用户复制-&(void)kickUsers:(NSArray&NSString&*&&*)users
&&&&&&&&&fromTeam:(NSString&*)teamId
&&&&&&&completion:(NIMTeamHandler)completion被踢出的用户相关会话信息仍然会保留,但不再能接收关于此群的消息。解散群复制-&(void)dismissTeam:(NSString*)teamId
&&&&&&&&&completion:(NIMTeamHandler)block群解散后,所有群用户关于此群会话会被保留,但是不能能够在此群会话里收发消息。群组委托用户的群信息会在以下条件下更新:修改群组名称更改群验证方式更改群介绍更改群公告这些操作成功后,云信服务器会推送一条群通知,同时触发 SDK 更新群信息的委托事件:复制-&(void)onTeamUpdated:(NIMTeam&*)team用户的群信息会在以下条件下移除:群解散退群被踢出群这些操作成功后,云信服务器同样会推送一条群通知,同时触发 SDK 更新群信息的委托事件:复制-&(void)onTeamRemoved:(NIMTeam&*)team用户的群成员信息会在以下条件下更新群成员数量变动静音群组群成员信息变动,包括权限,群昵称等这些操作成功后,云信服务器同样会推送一条群通知,同时触发 SDK 更新群信息的委托事件:复制-&(void)onTeamMemberChanged:(NIMTeam&*)群组通知群组通知是一种消息类型 (&NIMMessageTypeNotification&) ,用户在创建群或者进入群成功之后,任何关于群的变动,云信服务器都会下发一条群通知消息。群通知消息和其他消息一样,可从&NIMConversationManager&提供的消息查询接口中获取。群组通知解析步骤:解析&NIMMessage&中的&messageObject&字段,强类型转换为&NIMNotificationObject。解析&NIMNotificationObject&中的&content&字段,得到父类&NIMNotificationContent。根据&NIMNotificationContent&中的&notificationType&字段,将父类&NIMNotificationContent&强类型转化为&NIMTeamNotificationContent。群组通知的具体类型可以通过&NIMTeamNotificationContent&的&operationType&解析。SDK 在收到群通知之后,会对本地缓存的群信息做出对应的修改,然后触发与修改相对应的委托事件回调。群通知是接收型的消息,开发者不应该自己手动去创建和发送群通知消息。群组通知内容&NIMTeamNotificationContent&的字段说明:operationType&: 群组通知事件类型,表示具体属于哪一种群组通知,通知种类由&NIMTeamOperationType&枚举定义。source&: 通知的操作者 ID ,表示谁触发了这个通知。targets&: 通知的被操作者 ID 列表,表示这个通知影响的用户群体。notifyExt&: 通知的扩展字段,这个扩展字段是由每个触发通知的操作接口定义的。目前只能由服务器的操作接口去定义这个字段。例如:复制&群组踢出用户,可以调用服务器&HTTP&接口,并传入通知扩展参数。调用后会触发用户被踢出群组的事件消息通知,此时,收到消息的其他群成员就可以通过读取&`NIMTeamNotificationContent`&的&`notifyExt`&字段来获取踢出时定义的扩展字段。attachment&: 有些通知比较复杂,需要一些额外信息来辅助上层显示,目前有额外信息的群通知类型为:群更新通知,额外信息被封装为&NIMUpdateTeamInfoAttachment&类型。群禁言通知,额外信息被封装为&NIMMuteTeamMemberAttachment&类型。群消息推送设置SDK 提供了修改群消息通知的接口,上层可以通过设置这个选项以影响群消息的通知行为。当设置 notify 为 NO 时,群内消息将不会有 APNS 通知。当然上层也可以使用这一属性来决定收到在线消息时的 APP 表现 (是否响铃等)。复制-&(void)updateNotifyState:(BOOL)notify
&&&&&&&&&&&&&&&&&&&inTeam:(NSString&*)teamId
&&&&&&&&&&&&&&&completion:(NIMTeamHandler)自定义拓展SDK 提供了群信息的拓展接口,开发者可以自行定义内容。复制-&(void)updateTeamCustomInfo:(NSString&*)info
&&&&&&&&&&&&&&&&&&&&&&teamId:(NSString&*)teamId
&&&&&&&&&&&&&&&&&&completion:(NIMTeamHandler)block开发者可以通过&NIMTeam&的两个属性读取拓展信息:应用方可以自行拓展这个字段做个性化配置,客户端不可以修改这个字段复制@property&(nonatomic,copy,readonly)&&NSString&*serverCustomI应用方可以自行拓展这个字段做个性化配置,客户端可以修改这个字段复制&@property&(nonatomic,copy,readonly)&&NSString&*clientCustomI聊天室聊天室功能概述聊天室功能对应的管理类为&NIMChatroomManager&。&NIMChatroomManager&提供了聊天室的业务管理,如进入/退出聊天室,获取相关信息以及权限操作等。目前不支持通过 SDK 接口建立/解散聊天室。聊天室模型特点:进入聊天室时将建立新的连接,退出聊天室或者被踢会断开连接,在聊天室中掉线会有自动重连,开发者需要监听聊天室连接状态来做出正确的界面表现。支持聊天人数无上限。聊天室只允许用户手动进入,无法进行邀请。支持同时进入多个聊天室,会建立多个连接。不支持多端进入同一个聊天室,后进入的客户端会将前一个踢掉。断开聊天室连接后,服务器不会再推送该聊天室的消息给此用户。聊天室成员分固定成员和非固定成员两种类型。进入聊天室用户要在聊天室内说话,必须先调用接口进入此聊天室。用户进入聊天室后,不会收到此聊天室的历史消息推送。如有历史消息需求,可以调用消息查询接口进行显示。复制-&(void)enterChatroom:(NIMChatroomEnterRequest&*)request
&&&&&&&&&&&completion:(NIMChatroomEnterHandler)NIMChatroomEnterRequest&中包含了聊天室的基本数据信息,包括需要进入的聊天室 id 和一些供用户自定义的扩展字段,后续当前用户的所有聊天室消息都会带上登录时设置的扩展字段。扩展包括:每次消息中都会带上的扩展&roomExt,这个字段可以放入用户在聊天室的自定义信息,如权限,头衔等等。这个扩展会放入每条消息的&messageExt&(需要转换成&NIMMessageChatroomExtension&) 字段的&roomExt&里。只有在进入聊天室时的通知消息里,会带上的扩展&roomNotifyExt,这个扩展会放入聊天室通知消息&content&(需要转换成&NIMChatroomNotificationContent&) 字段的&notifyExt&里。进入聊天室会建立新的连接,不同的聊天室对应着不同的连接,开发者可以监听连接状态做一些业务处理。复制-&(void)chatroom:(NSString&*)roomId&connectionStateChanged:(NIMChatroomConnectionState)当进入聊天室后,再发生掉线问题时,SDK 将自动重连,无需开发者再次调用进入房间接口。在重连时,可能遇到一些特殊网络错误(如聊天室用户被封禁,聊天室状态异常),会触发以下回调,开发者应该在这个回调中退出聊天室界面。复制-&(void)chatroom:(NSString&*)roomId&autoLoginFailed:(NSError&*)离开聊天室离开聊天室时,会断开聊天室对应的连接,并不再收到关于此聊天室的任何消息。复制-&(void)exitChatroom:(NSString&*)roomId
&&&&&&&&&&completion:(NIMChatroomHandler)当用户被踢或者聊天室关闭时,会触发被踢回调,这个时候也会断开聊天室对应的连接:复制-&(void)chatroom:(NSString&*)roomId&beKicked:(NIMChatroomKickReason)聊天室消息收发聊天室消息收发接口与普通消息收发统一,在发送消息时指定会话类型为聊天室即可。会话 id 即为聊天室 id。查询聊天室消息历史进入聊天室时,不会下发关于聊天室的历史消息,可以通过下面的接口查询聊天室消息历史。复制-&(void)fetchMessageHistory:(NSString&*)roomId
&&&&&&&&&&&&&&&&&&&&&option:(NIMHistoryMessageSearchOption&*)option&&&&&&&&&&&&&&&&&&&&&result:(NIMFetchChatroomHistoryBlock)获取聊天室信息此接口可以远程获取聊天室信息,NIM SDK 不会缓存聊天室信息,开发者需要根据业务自己做好缓存。复制-&(void)fetchChatroomInfo:(NSString&*)roomId
&&&&&&&&&&&&&&&completion:(NIMChatroomInfoHandler)修改聊天室信息此接口可以修改聊天室信息,调用完这个接口后,开发者应该自己修改内存缓存的&NIMChatroom&对象。此接口需要生成&NIMChatroomUpdateRequest&对象来完成请求。NIMChatroomUpdateRequest中的&needNotify&参数可以设置成功修改信息后云信服务器是否推送一条修改的聊天室消息通知。NIMChatroomUpdateRequest中的&notifyExt&参数可以设置推送的聊天室消息通知里带的自定义扩展字段。复制-&(void)updateChatroomInfo:(NIMChatroomUpdateRequest&*)request
&&&&&&&&&&&&&&&&completion:(nullable&NIMChatroomHandler)获取聊天室成员此接口可以远程获取聊天室成员列表,NIM SDK 不会缓存聊天室成员列表,开发者需要根据业务自己做好缓存。 NIM SDK 提供两种方式获取聊天室成员:按锚点分页获取复制&&-&(void)fetchChatroomMembers:(NIMChatroomMemberRequest&*)request
&&&&&&&&&&&&&&&&&&&&completion:(NIMChatroomMembersHandler)按用户 id 获取聊天室成员信息复制&-&(void)fetchChatroomMembersByIds:(NIMChatroomMembersByIdsRequest&*)request
&&&&&&&&&&&&&&&&&&&&&completion:(NIMChatroomMembersHandler)修改自己的聊天室成员信息此接口可以修改聊天室成员信息,调用完这个接口后,开发者应该自己修改内存缓存的&NIMChatroomMember&对象。此接口需要生成&NIMChatroomMemberInfoUpdateRequest&对象来完成请求。NIMChatroomMemberInfoUpdateRequest中的&needNotify&参数可以设置成功修改信息后云信服务器是否推送一条修改的聊天室消息通知。NIMChatroomMemberInfoUpdateRequest中的&notifyExt&参数可以设置推送的聊天室消息通知里带的自定义扩展字段。复制-&(void)updateMyChatroomMemberInfo:(NIMChatroomMemberInfoUpdateRequest&*)request
&&&&&&&&&&&&&&&&&&&&&&&&completion:(nullable&NIMChatroomHandler)聊天室权限管理聊天室可以调整成员的类型,分固定成员和非固定成员两种,固定成员又分为创建者、管理员、普通成员和受限成员四种。禁言用户和拉黑用户都属于受限用户。设置为管理员复制-&(void)markMemberManager:(NIMChatroomMemberUpdateRequest&*)request
&&&&&&&&&&&&&completion:(NIMChatroomHandler)设置为普通成员复制-&(void)markNormalMember:(NIMChatroomMemberUpdateRequest&*)request
&&&&&&&&&&&&completion:(NIMChatroomHandler)设置为拉黑用户 拉黑的用户被移出黑名单后该成员变成非固定成员。复制-&(void)updateMemberBlack:(NIMChatroomMemberUpdateRequest&*)request
&&&&&&&&&&&&&completion:(NIMChatroomHandler)设置为禁言用户复制-&(void)updateMemberMute:(NIMChatroomMemberUpdateRequest&*)request
&&&&&&&&&&&&completion:(NIMChatroomHandler)踢出成员创建者或管理员可以将权限比自己低的用户踢出聊天室复制-&(void)kickMember:(NIMChatroomMemberKickRequest&*)request
&&&&&&&&completion:(NIMChatroomHandler)聊天室通知消息在聊天室中所有的通知都以消息&NIMMessage&的形式展示,内部&messageObject&为&NIMNotificationTypeChatroom&类型的&NIMNotificationObject。上层开发在收到具体消息需要进行过滤和显示。目前支持的聊天室消息事件定义在&NIMChatroomEventType&枚举里,具体有:聊天室成员进入聊天室聊天室成员离开聊天室聊天室成员被拉黑/取消拉黑成员被设置禁言/取消禁言成员被设置临时禁言/取消临时禁言设置/移除管理员设置/移除固定成员聊天室被关闭聊天室信息被更新聊天室成员被踢聊天室成员主动更新了聊天室的角色信息聊天室通用队列变更解析聊天室通知消息的详细步骤:判断消息是否为通知消息判断&NIMMessage&的&messageType&字段是否为&NIMMessageTypeNotification&。判断通知消息是否为聊天室通知将&NIMMessage&的&messageObject&字段强类型转换为&NIMNotificationObject&。判断转换后的&NIMNotificationObject&中&notificationType&字段是否为&NIMNotificationTypeChatroom&。解析聊天室通知的具体内容将&NIMNotificationObject&中&content&字段强类型转换为&NIMChatroomNotificationContent&。查看转换后&NIMChatroomNotificationContent&的具体字段。聊天室通知内容&NIMChatroomNotificationContent&的字段说明:eventType&: 聊天室通知事件类型,表示具体属于哪一种聊天室通知,通知种类由&NIMChatroomEventType&枚举定义。source&: 通知的操作者,表示谁触发了这个通知,被封装为NIMChatroomNotificationMember&类型。targets&: 通知的被操作者,表示这个通知影响的用户,被封装为&NSArray&类型,&NSArray&中每个元素被封装成&NIMChatroomNotificationMember&类型。notifyExt&: 通知的扩展字段,这个扩展字段是由每个触发通知的操作接口定义的。例如:用户通过调用接口进入聊天室复制&&&&-&(void)enterChatroom:(NIMChatroomEnterRequest&*)request&completion:(nullable&NIMChatroomEnterHandler)在这个请求中,请求对象&NIMChatroomEnterRequest&里可以定义一个通知扩展字段&roomNotifyExt。 定义后当用户进入聊天室,会触发用户进入聊天室的事件消息通知,此时,收到消息的其他聊天室成员就可以通过读取&NIMChatroomNotificationContent&的&notifyExt&字段来获取进入的用户定义的&roomNotifyExt&字段。ext&: 目前只有&NIMChatroomEventTypeAddMuteTemp&事件才有拓展信息,拓展信息为&NSNumber&,表示临时禁言时长。系统通知除消息通道外,NIM SDK 还提供系统通知这种通道用于消息之外的通知分发。目前有两种类型:内置系统通知和自定义系统通知。内置这是由 NIM SDK 预定义的通知类型,目前仅支持几种群操作的通知,如被邀请入群,SDK 负责这些通知的持久化。所有的内置系统通知都是通过复制-(void)onReceiveSystemNotification:(NIMSystemNotification&*)下发给 APP。为了保证整个程序逻辑的一致性,APP 需要针对不同类型的系统通知进行相应的操作。内置系统通知的本地存储:(以下接口分为全量和过滤,过滤接口需要传入过滤器 NIMSystemNotificationFilter,可以按类型选择获取内置系统通知)获取本地存储的内置系统通知全量接口复制-&(NSArray&*)fetchSystemNotifications:(NIMSystemNotification&*)notification&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&limit:(NSInteger)过滤接口复制&-&(NSArray&*)fetchSystemNotifications:(NIMSystemNotification&*)notification&limit:(NSInteger)limit&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filter:(NIMSystemNotificationFilter&*)获取本地存储的内置系统未读数全量接口复制-&(NSInteger)allUnreadC过滤接口复制-&(NSInteger)allUnreadCount:(NIMSystemNotificationFilter&*)删除本地存储的内置系统通知过滤接口复制-&(void)deleteAllNotifications:(NIMSystemNotificationFilter&*)单条接口复制-&(void)deleteNotification:(NIMSystemNotification&*)全量接口复制-&(void)deleteAllN标记本地存储的内置系统通知为已读全量接口复制-&(void)markAllNotificationsAsR过滤接口复制&-&(void)markAllNotificationsAsRead:(NIMSystemNotificationFilter&*)单条接口复制&-&(void)markNotificationsAsRead:(NIMSystemNotification&*)自定义除内置系统通知外,NIM SDK 也额外提供自定义系统给开发者,方便开发者进行业务逻辑的通知。这个通知既可以由客户端发起也可以由开发者服务器发起。注意:自定义通知和自定义消息的不同之处在于,自定义消息归属于 NIM SDK 消息体系内,适用于会话,由 SDK 存储在消息数据库中,与 NIM SDK 其他内建消息类型一同展现给用户。而自定义通知主要用于第三方的一些事件状态通知,SDK 不存储,也不解析这些通知。SDK 仅仅负责替第三方传递和通知这些事件,起到透传的作用,收到自定义通知后的持久化工作需要由上层开发负责。发送自定义通知(客户端)复制-&(void)sendCustomNotification:(NIMCustomSystemNotification&*)notification
&&&&&&&&&&&&&&&&&&&&&toSession:(NIMSession&*)session
&&&&&&&&&&&&&&&&&&&&completion:(NIMSystemNotificationHandler)completion客户端发起的自定义通知目前支持自定义如下字段:通知内容(推荐使用&json&组织),推送文案(如果没有则不进行 APNS 推送),是否只发给在线用户。最后一个字段的意义在于区分自定义通知的使用场景。选择只发给在线用户,当目标用户不在线时这条通知会被云信服务器丢弃,这种实现比较适合发送即时通知,如正在输入。反之云信服务器会缓存当前通知(有上限),并在目标用户上线后推送给目标用户。接收自定义通知复制-&(void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification&*)APNS 推送前期准备客户端配置推送证书名复制[[NIMSDK&sharedSDK]&registerWithAppID:您的APPKEY
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cerName:您的推送证书名];客户端注册 APNS,并在获取到 APNS Token 时将值传给 SDK复制-&(void)registerAPNs
{&&&&if&([[UIApplication&sharedApplication]&respondsToSelector:@selector(registerForRemoteNotifications)])
&&&&{&&&&&&&&UIUserNotificationType&types&=&UIRemoteNotificationTypeBadge&|&UIRemoteNotificationTypeSound&|&&&&&&UIRemoteNotificationTypeA&&&&&&&&UIUserNotificationSettings&*settings&=&[UIUserNotificationSettings&settingsForTypes:types
&&&&&&&&categories:nil];
&&&&&&&&[[UIApplication&sharedApplication]&registerUserNotificationSettings:settings];
&&&&&&&&[[UIApplication&sharedApplication]&registerForRemoteNotifications];
&&&&}&&&&else
&&&&{&&&&&&&&UIRemoteNotificationType&types&=&UIRemoteNotificationTypeAlert&|&UIRemoteNotificationTypeSound&|&&&&&&&&UIRemoteNotificationTypeB
&&&&&&&&[[UIApplication&sharedApplication]&registerForRemoteNotificationTypes:types];
}复制-&(void)application:(UIApplication&*)app&didRegisterForRemoteNotificationsWithDeviceToken:(NSData&*)deviceToken{&&&&[[NIMSDK&sharedSDK]&updateApnsToken:deviceToken];
}推送时机开发者在&发送消息&和&自定义系统通知&时,可以指定是否同时进行推送服务。为了节省不必要的流量开销,只有当接收者的应用切换到后台时,云信推送服务才会开启;如果应用在前台,则不会有推送通知。如果有应用前台通信需求,建议开发者使用&自定义系统通知&,并监听回调:复制-&(void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification&*)属性设置NIM SDK 提供全局 APNS 属性设置,用于设置免打扰时间和推送样式,详细内容可以参考&NIMPushNotificationSetting获取推送设置:复制NIMPushNotificationSetting&*setting&=&&[[[NIMSDK&sharedSDK]&apnsManager]&currentSetting];修改推送设置:复制[[[NIMSDK&sharedSDK]&apnsManager]&updateApnsSetting:setting
completion:^(NSError&*error)&{}];APNS 多端设置&NIMPushNotificationMultiportConfig获取 APNS 多端设置复制-&(NIMPushNotificationMultiportConfig&*)currentC修改 APNS 多端设置复制-&(void)updateConfig:(NIMPushNotificationMultiportConfig&*)config
&&&&&&&&&&completion:(NIMApnsHandler)当桌面端在线时,可以通过设置&shouldPushNotificationWhenPCOnline&字段,控制是否需要发推送给手机端。消息推送内容设置用户在发送消息的时候,设置&NIMMessage&的&apnsContent&属性进行消息推送内容设置。如果不设置&apnsContent&属性,将使用云信内置文案。设置&NIMMessage&的&apnsPayload&可以自定义推送参数。示例代码:复制NIMAudioObject&*audioObject&=&[[NIMAudioObject&alloc]&initWithSourcePath:filePath];NIMMessage&*message&=&[[NIMMessage&alloc]&init];message.messageObject&=&audioOmessage.apnsContent&=&@&发来了一段语音&;&&&&//对方收到的推送文案用户在发送自定义系统通知的时候,设置&NIMCustomSystemNotification&的&apnsContent&属性来定制消息推送内容,同时可以设置&apnsPayload&来配置推送参数。注: 点击查看 iOS 系统内置推送 Payload 参数消息的成员推送选项用户在发消息的时候,可以通过配置&NIMMessage&里的&apnsMemberOption&字段实现更为复杂的推送逻辑,目前这个字段只能在群会话中生效。需要在给某些指定的成员推送特殊的文案设置&NIMMessageApnsMemberOption&的&userIds&字段,如果这个字段为nil,则表示推送给当前会话内的所有用户。设置&NIMMessageApnsMemberOption&的&apnsContent&字段来指定特殊的推送文案,如果这个字段为 nil ,则使用消息本身的推送文案。强制推送。适用场景例如用户屏蔽了某个群,但是在群里有其他人 @ 了这个用户,则不管用户是否对这个群屏蔽推送,都要推送给这个用户如 “有人 @ 了你” 这样的文案。同上设置指定特殊的推送成员。同上设置特殊的推送文案。设置&NIMMessageApnsMemberOption&的&forcePush&字段为&YES。用户资料托管NIMUserManager&提供了用户帐号资料管理。以下几个接口仅当选择云信托管用户资料时有效,如果开发者不希望云信获取自己的用户数据,则需自行维护用户资料。NIMUserManager&里,使用&NIMUser&对用户进行封装。其中用户信息为&NIMUserInfo&属性。 具体的信息字段由&NIMUserInfoUpdateTag定义。&NIMUserInfoUpdateTag内置了多个常用信息字段(有格式校验)和一个拓展字段&NIMUserInfoUpdateTagEx&供开发者自行拓展。获取本地用户资料复制-&(NIMUser&*)userInfo:(NSString&*)userId;用户资料除自己之外,不保证其他用户资料实时更新。其他用户数据更新时机为:调用&- (void)fetchUserInfos:completion:&方法刷新用户收到此用户发来消息程序再次启动,此时会同步好友资料获取服务器用户资料复制-&(void)fetchUserInfos:(NSArray&NSString&*&&*)users
&&&&&&&&&&&&completion:(NIMUserInfoBlock)completion此接口可以批量从服务器获取用户资料,出于用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。编辑用户资料复制-&(void)updateMyUserInfo:(NSDictionary&*)values&completion:(NIMUserBlock)只允许用户编辑自己的资料。此接口可以一次性编辑多个属性。如昵称,头像等,传入的数据键值对是&{@(NIMUserInfoUpdateTag) : NSString},无效数据将被过滤。一些字段有修改格式校验。具体限制为:属性名具体字段类型限制格式校验用户昵称NIMUserInfoUpdateTagNickNSString无用户头像NIMUserInfoUpdateTagAvatarNSString无用户签名NIMUserInfoUpdateTagSignNSString无用户性别NIMUserInfoUpdateTagGenderNIMUserGender只支持指定枚举用户邮箱NIMUserInfoUpdateTagEmailNSString只支持合法邮箱用户生日NIMUserInfoUpdateTagBirthNSStringyyyy-MM-dd用户手机NIMUserInfoUpdateTagBirthNSString合法手机号 如、+(86)-拓展字段NIMUserInfoUpdateTagExNSString无当修改用户资料成功后,会触发回调:复制-&(void)onUserInfoChanged:(NIMUser&*)用户关系托管NIMUserManager&提供了用户用户关系管理,以及对用户会话的消息设置。在云信中,不是好友也允许聊天。用户关系如果不托管给云信,开发者需要自己在应用服务器维护。好友关系获取好友列表复制&&-&(NSArray&NIMUser&*&&*)myF好友列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是&NIMUser&列表。&NIMUser&封装了开发者向云信托管的好友ID,对此好友的会话设置(是否需要消息提醒,是否是拉黑用户等), 以及用户的详细信息&NIMUserInfo(需要将用户信息交给云信托管)。好友请求复制&&-&(void)requestFriend:(NIMUserRequest&*)request
&&&&&&&&&&&&&completion:(NIMUserBlock)验证方式有&NIMUserOperationAdd&和&NIMUserOperationRequest&两种。第一种是不需要验证方式的,一旦请求后双方直接互为好友。第二种是需要验证的,对方会收到一条类型为&NIMSystemNotificationTypeFriendAdd&系统通知 (&NIMSystemNotification&)。好友请求包括请求添加好友以及同意/拒绝好友请求两种。好友请求需要构造出一个&NIMUserRequest&对象,封装添加对象用户的ID,以及添加方式。代码示例:复制&NIMUserRequest&*request&=&[[NIMUserRequest&alloc]&init];
&request.userId&&&&&&&&&&=&self.user.usrId;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//封装用户ID
&request.operation&&&&&&&=&NIMUserOperationR&&&&&&&&&&&&&&&&&&&&//封装验证方式
&request.message&&&&&&&&&=&@&跪求通过&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//封装自定义验证消息验证回复有 同意&NIMUserOperationVerify&和 拒绝&NIMUserOperationReject&两种。 对方收到消息之后,可以选择接受或者拒绝好友邀请,此时同样调用&requestFriend:completion:&方法,传入拒绝对象的ID和验证回复类型即可。好友添加成功后,会触发回调:复制&&&&&-&(void)onFriendChanged:(NIMUser&*)删除好友用户和用户之间可以解除好友关系。复制&&-&(void)deleteFriend:(NSString&*)userId
&&&&&&&&&&&&completion:(NIMUserBlock)解除成功后,会同时修改本地的缓存数据,并触发回调:复制&&-&(void)onFriendChanged:(NIMUser&*)黑名单云信中,黑名单和好友关系是互相独立的,即修改好友关系不会影响黑名单关系,同时,修改黑名单也不会对好友关系进行操作。获取黑名单成员列表复制-&(NSArray&NIMUser&*&&*)myBlackL黑名单列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是&NIMUser&列表。&NIMUser&封装了开发者向云信托管的好友ID,对此好友的会话设置(是否需要消息提醒,是否是拉黑用户等), 以及用户的详细信息&NIMUserInfo&(需要将用户信息交给云信托管)。添加用户到黑名单复制-&(void)addToBlackList:(NSString&*)userId
&&&&&&&&&&&&completion:(NIMUserBlock)拉黑成功后,会同时修改本地缓存,并触发回调:复制-&(void)onBlackListC将用户从黑名单移除复制-&(void)removeFromBlackBlackList:(NSString&*)userId
&&&&&&&&&&&&&&&&&&&&&&completion:(NIMUserBlock)移除成功后,会同时修改本地缓存,并触发回调:复制-&(void)onBlackListC判断用户是否在自己的黑名单内复制-&(BOOL)isUserInBlackList:(NSString&*)userId;此接口是根据本地缓存数据来判断是否拉黑的,在调用时请保证本地缓存是正确的(登录后有正常完成数据同步)。消息提醒云信中,可以单独设置是否开启某个用户的消息提醒,即对某个用户静音。静音关系和好友关系是互相独立的,修改好友关系不会影响静音关系,同时,修改静音关系也不会对好友关系进行操作。获取静音成员列表复制-&(NSArray&NIMUser&*&&*)myMuteUserL静音列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是&NIMUser&列表。&NIMUser&封装了开发者向云信托管的好友ID,对此好友的会话设置(是否需要消息提醒,是否是拉黑用户等), 以及用户的详细信息&NIMUserInfo&(需要将用户信息交给云信托管)。设置消息提醒复制-&(void)updateNotifyState:(BOOL)notify
&&&&&&&&&&&&&&&&&&forUser:(NSString&*)userId
&&&&&&&&&&&&&&&completion:(NIMUserBlock)设置成功之后,同时更新本地缓存数据。用户是否有消息提醒复制-&(BOOL)notifyForNewMsg:(NSString&*)userId;此接口是根据本地缓存数据来判断是否有消息提醒的,在调用时请保证本地缓存是正确的(登录后有正常完成数据同步)。当修改用户资料成功后,会触发回调:复制-&(void)onUserInfoChanged:(NIMUser&*)音视频网络通话SDK 的音视频网络通话管理类是&NIMNetCallManager,提供基于网络的点对点视频通话和语音通话功能,还提供多人视频和音频会议功能,支持通话中音视频设备控制和实时音视频模式切换。音视频网络通话流程主叫发起通话请求复制-&(void)start:(NSArray&NSString&*&&*)callees&&&&&&&&&type:(NIMNetCallType)type
&&&&&&&option:(NIMNetCallOption&*)option
&&&completion:(NIMNetCallStartHandler)completion当前只支持点对点通话,callees&只接收一个被叫。发起通话需要指定类型,在成功建立通话之前不允许进行通话类型切换。发起通话相关参数在&option&中指定,其中:期望的发送视频质量&preferredVideoQuality&用于开发者不满足于默认清晰度时传入更期望的清晰度。但是 SDK 可能会根据具体机型运算性能和协商结果调整为更合适的清晰度,导致该设置无效 (该情况通常发生在通话一方有低性能机器时)视频发送帧率&videoFrameRate&用于开发者不满足于默认视频帧率时传入更期望的帧率。禁用视频裁剪&disableVideoCropping&如果不禁用,SDK 可能会根据对端机型屏幕宽高比将本端画面裁剪后再发送,以节省运算量和网络带宽,如果无特殊需求建议不要设置该参数自动旋转远端画面&autoRotateRemoteVideo&开启该选项,以在远端设备旋转时在本端自动调整角度期望的视频编码器&preferredVideoEncoder&通过该设置指定硬件编码器,仅在 iOS 8.0 及以上系统有效期望的视频解码器&preferredVideoDecoder&通过该设置指定硬件解码器,仅在 iOS 8.0 及以上系统有效视频最大编码码率&videoMaxEncodeBitrate&如果不指定,SDK 会根据视频质量自动选择使用后置摄像头开始视频&startWithBackCamera&用于希望以后置摄像头开始视频聊天的场景结束网络通话时自动停止 AudioSession&autoDeactivateAudioSession&可以禁用自动停止,以用于某些情况下结束通话后希望应用继续播放之前被 SDK 打断的声音的场景服务器录制音频&serverRecordAudio&该开关仅在服务器已经开启录制功能时才有效服务器录制视频&serverRecordVideo&该开关仅在服务器已经开启录制功能时才有效扩展消息&extendMessage&用于开发者自己沟通额外信息,被叫收到呼叫时会携带该信息 (仅在发起网络通话时有效)附带推送&apnsInuse&设置网络通话请求是否附带发送 APNS 推送通知被叫角标计数&apnsBadge&设置推送是否需要角标计数推送前缀&apnsWithPrefix&设置推送是否需要带前缀 (一般为昵称)推送文案&apnsContent&设置自定义的推送文案推送声音&apnsSound&设置自定义的推送声音文件推送 Payload&apnsPayload&设置自定义的 iOS 推送 Payload发起结果由&NIMNetCallStartHandler&返回:复制typedef&void(^NIMNetCallStartHandler)(NSError&*error,&UInt64&callID)如果发起成功,返回的 error 为 nil,callID&用于唯一标识一通网络通话,后续的操作及回调均由此区分不同通话。被叫收到通话请求回调复制-&(void)onReceive:(UInt64)callID
&&&&&&&&&&&&&from:(NSString&*)caller&&&&&&&&&&&&&type:(NIMNetCallType)type
&&&&&&&&&&message:(NSString&*)extendMessage在成功建立通话之前不允许进行通话类型切换。其中&extendMessage&透传主叫发起通话时携带的额外信息。被叫响应通话请求复制-&(void)response:(UInt64)callID
&&&&&&&&&&accept:(BOOL)accept
&&&&&&&&&&option:(NIMNetCallOption&*)option
&&&&&&completion:(NIMNetCallResponseHandler)completion可以通过&option&指定期望的发送视频清晰度和设置裁剪开关。响应结果由&NIMNetCallStartHandler&返回:复制typedef&void(^NIMNetCallResponseHandler)(NSError&*error,&UInt64&callID)如果响应成功,返回的 error 为 nil。在多端登录情况下,如果改通话已被该帐号其他端处理,error 携带错误码NIMLocalErrorCodeNetCallOtherHandled。主叫收到被叫响应回调复制-&(void)onResponse:(UInt64)callID
&&&&&&&&&&&&&&from:(NSString&*)callee
&&&&&&&&&&accepted:(BOOL)accepted呼入的通话已经被该帐号其他端处理回调复制-&(void)onResponsedByOther:(UInt64)callID
&&&&&&&&&&&&&&&&&&accepted:(BOOL)accepted对于已经被其他端处理过的通话,本端不能再做接听、拒绝或挂断操作。连接建立结果回调复制-&(void)onCall:(UInt64)callID
&&&&&&&&status:(NIMNetCallStatus)status收到&NIMNetCallStatusDisconnect&时无需调用&hangup:&挂断该通话。发送通话控制信息复制-&(void)control:(UInt64)callID&&&&&&&&&&&type:(NIMNetCallControlType)type通话控制信息用于方便通话双方沟通,可以选择性使用控制字段含义NIMNetCallControlTypeOpenAudio通知对方本端取消了静音NIMNetCallControlTypeCloseAudio通知对方本端开启了静音NIMNetCallControlTypeOpenVideo通知对方本端打开了摄像头NIMNetCallControlTypeCloseVideo通知对方本端关闭了摄像头NIMNetCallControlTypeToVideo请求对方切换到视频模式NIMNetCallControlTypeAgreeToVideo同意切换到视频模式,用于切到视频模式需要对方同意的场景NIMNetCallControlTypeRejectToVideo拒绝切换到视频模式,用于切到视频模式需要对方同意的场景NIMNetCallControlTypeToAudio通知对方本端切换到了音频模式NIMNetCallControlTypeBusyLine被叫通知主叫本端占线,用于主叫需要播放忙音的场景NIMNetCallControlTypeNoCamera通知对方本端摄像头不可用NIMNetCallControlTypeBackground通知对方本端切换到了后台NIMNetCallControlTypeFeedabck被叫通知主叫已经收到了通话请求,用于主叫需要确认被叫收到请求再播放回铃音的场景收到通话控制信息回调复制-&(void)onControl:(UInt64)callID
&&&&&&&&&&&&&from:(NSString&*)user&&&&&&&&&&&&&type:(NIMNetCallControlType)control结束通话复制-&(void)hangup:(UInt64)callID在发起通话请求时,如果 SDK 尚未返回 callID,可传入 0 挂断该通话。被叫在响应呼叫之前不要调用挂断接口。收到对方结束通话回调复制-&(void)onHangup:(UInt64)callID
&&&&&&&&&&&&&&by:(NSString&*)user收到该回调后无需调用&hangup:&结束通话当前通话信息获取当前通话标识 ID复制-&(UInt64)currentCallID如果没有正在进行中的通话 SDK 返回 0。当前通话网络状况回调复制-&(void)onCall:(UInt64)callID
&&&&&netStatus:(NIMNetCallNetStatus)status通常用于在 UI 上展现网络信号。获取当前通话网络状况复制-&(NIMNetCallNetStatus)netStatus如果没有正在进行中的通话,则返回值没有参考意义。本地摄像头预览就绪回调复制-&(void)onLocalPreviewReady:(CALayer&*)layer本地摄像头初始化完成时返回 layer,可以用如下示例代码展现本地预览画面:复制-&(void)onLocalPreviewReady:(CALayer&*)layer
{&&&&if&(self.localVideoLayer)&{
&&&&&&&&[self.localVideoLayer&removeFromSuperlayer];
&&&&}&&&&self.localVideoLayer&=&
&&&&layer.frame&=&self.localView.
&&&&[self.localView.layer&addSublayer:layer];
}获取本地摄像头预览层复制-&(CALayer&*)localPreviewLayer当没有进行中的网络通话,或者摄像头尚未初始化完成时返回 nil。远程视频 YUV 数据就绪复制-&(void)onRemoteYUVReady:(NSData&*)yuvData
&&&&&&&&&&&&&&&&&&&width:(NSUInteger)width
&&&&&&&&&&&&&&&&&&height:(NSUInteger)height
&&&&&&&&&&&&&&&&&&&&from:(NSString&*)user每获取到一帧对端画面都会回调,其中yuvData是紧凑的 YUV 数据 (stride 与画面宽度相同)。可以通过user区分不同的对端用户。将 YUV 数据直接用 OpenGL 渲染,比从&onRemoteImageReady:&得到的 image 贴图节省 CPU 资源。远程视频画面就绪回调复制-&(void)onRemoteImageReady:(CGImageRef)image如果实现了该委托,每获取到一帧对端画面都会回调,可以将 image 转换成&UIImage&后直接在&UIImageView&里面填充。如果已经使用&onRemoteYUVReady:width:height:from&得到的 YUV 数据渲染画面,不要再实现该委托以优化性能。服务器录制信息回调复制-&(void)onNetCallRecordingInfo:(NIMNetCallRecordingInfo&*)info提供服务器录制的音频文件和视频文件信息。话单通知当结束网络通话后,云信服务器会下发一条话单通知,用来表示这次通话的信息。 其中定义了:通话类型:语音,视频。通话事件类型: 1.对方拒接电话。 2.对方无人接听。 3.未接电话。 4.电话时长回单。解析话单通知消息的详细步骤:判断消息是否为通知消息判断&NIMMessage&的&messageType&字段是否为&NIMMessageTypeNotification&。判断通知消息是否为话单通知将&NIMMessage&的&messageObject&字段强类型转换为&NIMNotificationObject&。判断转换后的&NIMNotificationObject&中&notificationType&字段是否为&NIMNotificationTypeNetCall&。解析话单通知的具体内容将&NIMNotificationObject&中&content&字段强类型转换为&NIMNetCallNotificationContent&。查看转换后&NIMNetCallNotificationContent&的具体字段。其中,callType&字段为话单通知的具体通话类型。&eventType&字段表示具体的通话事件类型。多人会议与点对点通话的流程不同,多人会议暂不支持呼叫、推送和挂断等服务,只提供基本的预订、加入和离开会议接口。预订会议复制-&(void)reserveMeeting:(NIMNetCallMeeting&*)meeting
&&&&&&&&&&&&completion:(NIMNetCallMeetingHandler)completion需要先预订,本人和其他人才能加入会议。会议通过&meeting&的&name&字段做标识;可以通过&meeting&的 扩展字段&ext&在会议的创建和加入之间传递额外信息。同一个会议名称,只在会议使用完以后才可以重复使用,开发者需要保证不会出现重复预订某会议名称而不使用的情况。预订会议的结果通过&completion&返回。加入会议复制-&(void)joinMeeting:(NIMNetCallMeeting&*)meeting
&&&&&&&&&completion:(NIMNetCallMeetingHandler)completion会议通过&meeting&的&name&字段做标识。可以通过&actor&指定加入时的角色,非发言者 (观众)不发送音视频数据。加入成功以后,可以通过&callID&获取当前通话的 call id 。meeting&的&type&和&preferredVideoQuality&等参数含义与点对点通话相同。加入会议的结果通过&completion&返回。离开会议复制-&(void)leaveMeeting:(NIMNetCallMeeting&*)meeting当所有加入的人都离开了某会议以后,该会议对应的名称才可以被重复预订。改变自己在会议中的角色复制-&(BOOL)setMeetingRole:(BOOL)actor指定某用户设置是否对其静音复制-&(BOOL)setAudioMute:(BOOL)mute&
&&&&&&&&&&&&&forUser:(NSString&*)uid静音后将听不到该用户的声。需要在用户加入以后才能进行设置,该接口也可用于点对点双人通话。指定某用户设置是否接收其视频复制-&(BOOL)setVideoMute:(BOOL)mute&
&&&&&&&&&&&&&forUser:(NSString&*)uid拒绝后将没有该用户视频数据回调。需要在用户加入以后才能进行设置,该接口也可用于点对点双人通话。用户加入会议通知复制-&(void)onUserJoined:(NSString&*)uid
&&&&&&&&&&&&&meeting:(NIMNetCallMeeting&*)meeting通知上层有其他用户加入了会议。用户离开会议通知复制-&(void)onUserLeft:(NSString&*)uid
&&&&&&&&&&&meeting:(NIMNetCallMeeting&*)meeting通知上层有其他用户离开了会议。会议发生了错误复制-&(void)onMeetingError:(NSError&*)error
&&&&&&&&&&&&&&&meeting:(NIMNetCallMeeting&*)meeting一些异常情况可能会引起会议出错,请在收到该回调以后主动离开会议。通话中的设备控制设置静音复制-&(BOOL)setMute:(BOOL)mute静音后对端将听不到本端的声音。设置扬声器复制-&(BOOL)setSpeaker:(BOOL)useSpeaker用于在扬声器和听筒间切换。切换摄像头复制-&(void)switchCamera:(NIMNetCallCamera)camera用于在前后摄像头之间切换。关闭摄像头功能设置复制-&(BOOL)setCameraDisable:(BOOL)disable关闭摄像头以后对方将收不到自己的视频画面。切换通话模式复制-&(void)switchType:(NIMNetCallType)type用于在语音模式和视频模式之间切换。如果需要对方接受才能切换,请使用&control:type&和&onConrtol:from:type&进行协商,达成一致后再调用该接口进行切换。通话中的编解码控制设置视频最大编码码率复制-&(BOOL)setVideoMaxEncodeBitrate:(NSUInteger)bitrate可以在视频通话过程中实时改变视频编码码率,以满足不同网络状况和使用场景需求。如果用户尚未加入通话,则无法设置。切换视频编解码器复制-&(BOOL)switchVideoEncoder:(NIMNetCallVideoCodec)codec复制-&(BOOL)switchVideoDecoder:(NIMNetCallVideoCodec)codec可以在视频通话过程中实时切换软硬件编解码器。硬件编解码设置仅在 iOS 8.0 及以上系统有效。如果用户尚未加入通话,则无法设置。切换视频质量复制-&(BOOL)switchVideoQuality:(NIMNetCallVideoQuality)quality可以在视频通话过程中实时切换视频质量。如果用户尚未加入通话,则无法设置。通话中音视频本地录制通话建立以后,SDK 支持将本端的音视频图像和声音录制下来,保存成本地 mp4 格式文件。开始录制复制-&(BOOL)startLocalRecording:(NSURL&*)filePath
&&&&&&&&&&&&&&&videoBitrate:(UInt32)videoBitrate只有通话连接建立以后才允许开始录制。可以指定录制文件的路径&filePath,SDK 不负责创建目录,请确保文件路径的合法性;也可以不指定,由 SDK 自己选择文件路径。如果对录制文件大小有要求,可以指定录制文件的视频码率&videoBitrate;也可以不指定,由 SDK 自己选择合适的码率。结束录制复制-&(BOOL)stopLocalRecording录制相关回调复制-&(void)onLocalRecordStarted:(UInt64)callID
&&&&&&&&&&&&&&&&&&&&&fileURL:(NSURL&*)fileURL表示本地录制成功开始,携带录制对应的网络通话 ID 和录制文件路径信息。复制-&(void)onLocalRecordError:(NSError&*)error
&&&&&&&&&&&&&&&&&&&&callID:(UInt64)callID表示本地录制发生了错误。复制-&(void)&onLocalRecordStopped:(UInt64)callID
&&&&&&&&&&&&&&&&&&&&&&fileURL:(NSURL&*)fileURL表示本地录制成功结束,携带录制对应的网络通话 ID 和录制文件路径信息。实时会话 (白板)SDK 的实时会话管理类是&NIMRTSManager,提供数据通道 (可靠 TCP 传输通道/语音通道) 以满足实时会话的需求,用于在线白板教学和文件传输等实时场景,其中 TCP 通道可以同时存在多个,语音通道全局只能有一个,并且与网络通话功能互斥。实时会话流程主叫发起实时会话请求复制-&(NSString&*)requestRTS:(NSArray&NSString&*&&*)callees
&&&&&&&&&&&&&&&&services:(NSUInteger)types
&&&&&&&&&&&&&&&&&&option:(NIMRTSOption&*)option
&&&&&&&&&&&&&&

我要回帖

更多关于 微信聊天功能被限制 的文章

 

随机推荐