http://www.ox-holdings.com

1)新匍京a奥门项目里面不需要环信SDK的太多功能,群组信息提供者

摘要即时通信云搜狐云信于二零一八年0二月11日颁发45.0版,此番更新为关键版本更新,详细的情况见小说内容。发布的本子本次发表的版本号为 5.0版,更新时间为:二〇一八年03月七日。iOS 更新内容新添缓存寻觅以致清理接口@protocol NIMResourceManager /** * 搜索缓存的财富文件 * * @param option 寻觅选项 * @param completion 达成回调 */- (void)searchResourceFiles:(NIMResourceQueryOption *)option completion:(NIMResourceSearchHandler)completion;/** * 删除缓存的财富文件 * * @param option 寻找选项 * @param completion 完成回调 */- (void)removeResourceFiles:(NIMResourceQueryOption *卡塔尔国option completion:(NIMResourceDeleteHandler卡塔尔completion;@end群组已读模块@protocol NIMTeamManager /** * 刷新群组音信已读、未读数量 * * @param NIMMessage 要询问的新闻 * @discussion 音讯已读变化后,会透过 NIMChatManager 的代办 onRecvMessageReceipts: 回调给上层 * 刷新的音信必得为群组音信 */- (void)refreshTeamMessageReceipts:(NSArray *)messages;/** * 查询群组音信回执详细的情况 * * @param NIMMessage 要查询的音讯 * @discussion 详细的情况饱含已读人数的 id 列表和未读人数的 id 列表 * 查询详细情形对象不会随之回执人数变化而转换,假诺要博取最新的详细情形,必得重新调用此接口 * */- (void)queryMessageReceiptDetail:(NIMMessage *State of Qatarmessage completion:(NIMQueryReceiptDetailBlock卡塔尔国completion;@end群组全体成员禁言接口@protocol NIMTeamManager /** * 禁言群全员 * * @param mute 是还是不是禁言 * @param teamId 群组ID * @param completion 阅世操作实现后的回调 * @discussion 操作成功后,云信服务器会下发禁言的群公告消息 */- (void)updateMuteState:(BOOL)mute inTeam:(NSString *卡塔尔teamId completion:(nullable NIMTeamHandlerState of Qatarcompletion;@end本地反垃圾检查评定接口@protocol NIMAntispamManager /** * 本地反垃圾检查器 * * @param option 本地反垃圾检查选项 * @param error 错误提醒 * @discussion 此扩张不会漫游到其余端,上层要求确定保障 NSDictionary 能够转变为 JSON。 * @return 当地反垃圾检查结果,本地反垃圾列表会在历次登入后风华正茂并更新 * 因为互连网难点,也许尚未登录,都会导致地点反垃圾列表无效的动静,error 中会包蕴具体出错原因 */- (NIMLocalAntiSpamCheckResult *)checkLocalAntispam:(NIMLocalAntiSpamCheckOption *)option error:(NSError **卡塔尔(قطر‎error;@end改换收取消息的回帖接口的更改- (void卡塔尔onRecvMessageReceipt:(NIMMessageReceipt *卡塔尔国receipt;为- (void卡塔尔onRecvMessageReceipts:(NSArrayAndroid 更新内容新扩充1. 加多群组已读作用,新扩展接口:TeamService#sendTeamMessageReceipt: (消息接纳方卡塔尔国发送群音信已读回执Team瑟维斯#refreshTeamMessageReceipt: (新闻发送方卡塔尔国刷新群音讯已读未读数量TeamService#fetchTeamMessageReceiptDetail: (新闻发送方卡塔尔(قطر‎获取群音信已读未读账号列表MsgServiceObserve#observeTeamMessageReceipt: (新闻发送方卡塔尔国监听群消息已读未读数量改变IMMessage#setMsgAck: (消息发送方卡塔尔国构造需求已读回执的消息2. 群组全部禁言: TeamService#muteAllTeamMember。3. 增添顾客端反垃圾成效:MsgService#checkLocalAntiSpam。4. 增加日志导出接口: MiscService#zipLogs。5. 增加顾客端删除缓存接口:Misc瑟维斯#getSizeOfDirCache : 获取缓存大小MiscService#clearDirCache : 删除缓存6. 加上谈心室高优先级音讯推断接口:ChatRoomMessage#isHighPriorityMessage。7. 增多在猖獗地方起头化 SDK 的接口:NIMClient#config, 在Application#onCreate(卡塔尔国中安插SDK(仅仅是安插,不影响属性)NIMClient#initSDK, 在UI进程主线程上按需接纳的发轫化SDK8. 佚名推送作用: MixPushService#setPushShowNoDetail。Windows(PC卡塔尔 SDK 更新内容新添客户端反垃圾功用SDK提供缓存管理接口(查询、删除),nim_global.h群新闻已读功用群组禁言成效Web SDK 更新内容新扩充客商端反垃圾客商端提供删除NIM实例缓存的接口群组不常禁言群组消息已读功用web私有化配置Wechat小程序接济多条websocket微信小程序白名单列表管理新添文书档案转码效能转移闲谈室登陆带上海重机厂连标识闲聊室高优先级消息增添标识下载地址请从以下官方网址地址下载:

点击查看最先的作品

得以完结顾客新闻提供者,可在 AppDelegate.m 中据守左券RCIMUserInfoDataSource,RCIMGroupInfoDataSource,

<pre>
1)项目里面无需环信SDK的太多效果与利益,只是想要闲话和好友功用,其他都毫不,那SDK必定要三回九转跟着更新么?
a.环信SDK版本都以上前宽容并且牢固的,每一回换代安卓只要更新.a包就可以。
b.每回换代的本子都以安然如故可相信性的,能够放心使用。
2)A顾客通过Rest接口增多B为老铁,B的顾客端上好朋友列表上是或不是有?
没有错,B这边也增多A为很好的朋友了。
3)黄某某(产物工作部)中,怎么把文字抽出来? 用XML解析出来。
4)请问一下apns可以安装自定义声音么? 环信的推送不协理自定义,只可以够设置开和关,不得以自定义声音,要是有要求能够利用第三方的推送。
5)iOS的demo中去除基友,闲聊记录删除的只是一方亲密的朋友的聊天记录么? 闲聊记录不会去除,只是不在UI上显得出来了罢了。
6)环信帮忙@功效么? 不援救,供给本人去贯彻。
7)发送音讯的时候,未有网络,就能够马上显得发送不成功,环信会不会像QQ那样有个协调去不断伏乞的大运呢? 没有,发送不成功就供给点击叹号重新发送。
8)贰个环信应用能够登记多少个推送证书吗? 能够登记五个推送证书。
9)环信发送图片这里是断点发送的?如决断开了,隔了黄金年代段时间,怎么重连? 图片发送不会断点续传,发送不成功会现身二个叹号,点击之后会另行发送。
10)若无登记过的账号去调用环信的记名接口,是还是不是也能三翻五次闲聊服务器? 不是,未有挂号的客商不可能聊聊。
11)在哪设置气泡中度 在sizeThatFits中装置。
12)环信怎么决断当前客户是或不是登入? 环信不关怀客商是或不是登陆,雷同微信同样,就算不在线也得以推送,只好够通过Rest在获取好朋友详细的情况的时候,见到老铁是online依旧offline。
13)客户在报到状态下后台展现是有证书的,是否已脱离账号后证书名称在后台就显得为空了?对的,登陆的时候在后台会展现,退出之后就不出示了。
14)如何设置语音的时间长度约束? 那么些必要开垦者本身去设置,能够做贰个用当下摄像时间减去发轫录像时间的判别。别的,音频部分已经完全抽离出去,SDK已经不做了,全部放置UI上供开采者自行决定操作。
15)发送消息后 actity平素在打转,是怎么回事? 须求在出殡和安葬成功的回调方法里面刷新UI。
16)在服务端通过rest 删除的密友的话,环信的server 端会通告client端吗? 会的。
17)ios 可以重复建群吗?同样的三私有可以建多个群吗? 可以另行建群。
18)环信有相近Wechat交际圈的沙盘模拟经营? 近期还从未交际圈的模版。
19)假设客商在两台ios设置上互相踢下线,要怎么改善最后登录设置的推送设置? 在顾客登入的时候,会把用的证书名发到后台,后台就能够把证件和app当前客商绑定。
20)环信SDK援救离线音讯呢? 协助的,只要顾客在线,则直接把音讯发送过去,ios端若是不在线则透过apns推送过去的,Android端若是不在线则闲谈音信先保存在服务器上,等Android登入后一向推送过去。
21)怎样设置让环信推送显示小名并非username呢? 设置方法[[EaseMob sharedInstance].chatManager setApnsNickname:@"APNS昵称"]。
22)apns上传的是怎么着文件? apns上传的是p12,而且须求密码。
23)环信的神气能够换来app的啊? 表情就是字符串替换。字符串环信未有定义, app里协定好了就足以。举例<:卡塔尔(قطر‎> 那些字符串代表笑貌的图片,ui上截取了就替换就足以了。 对于环信来讲,发的便是三个字符串。
24)怎么剖断某条音信是旁人发的照旧要好发的? 用当前登入人的环信id和message的from做相比较,假如相通,正是团结发的,反之,是对方。
25)[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginStateChange:) name:KNOTIFICATION_LOGINCHANGE object:nil]; 什么日期接触? 登陆处境改动才会接触的通知:登入的时候,退出登陆的时候,要抽离的时候。
26)[[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES]; 那个理应写到哪个地方呢? 要想直接设置自动登入, 就在顾客率先次登入成功之后设置。
27)要发透传消息,是还是不是先要把推送证书配置好 ? 发透传不用推送证书的,发推送才要证件的。
28)环信能本人安装心跳包么?180s有一些长? 不得以。
29)环信的心跳包每180s发二次,怎能承保实时收到对么发来的新闻?是或不是做了监听? 有监听回调方法。
30)语音怎么过段时间就播放不了?一向突显正在下载语言 ,稍后点击 ? demo的话, 假诺是和煦发送的话,就不用验证是不是下载了,能够一贯播放。要是是对方的话,要一口咬住不放一下。
31)历史数据会有展示不完全的主题素材,如何做? EMConversation类,有个loadAllMessages,调用该措施就足以博获得存入db的兼具消息。
32)透传新闻是否有文字个数约束? 须要在30kb内, 未有个数约束。
33)怎么让未读信息处于监听格局吧? 未读音讯数退换是有回调方法的--(void卡塔尔国didUnreadMessagesCountChanged。
34)群主能修正吗? 前段时间还不可能,但他日会扩展这些接口。
35)图片压缩比顾客能调解么? 能够的,这些是iOS的减弱方法setCompressionQuality。
36)环信里面 android和ios 里面 message的恢宏字段是通用的吧? 是的。
37)iOS和安卓都用的百度地图呢? 安卓是百度地图,iOS是苹果本人的地图。
38)手机端加了个音讯免干扰功用,当webim 和手提式无线电电话机端都登录时方可通过这一个功能设置手提式有线电电话机是或不是选择音讯么? 不得以,免干扰只是安装推送免骚扰。
39)做了个测验,先用二个部手提式有线电话机发了众多消息,然后用另三个有线电话登这一个账号时,开采赢得的闲谈记录唯有2条,并且依然早前该账号在该手提式有线电话机上发的? 音信记录封存到地头了,所以换个手提式有线电话机看不到。
40)不是给各样顾客分配100m, 超越100M的数量能博取吗? 超越100M新的记录会顶掉老的笔录。
41)环信 SDK扶植模拟器吗?依旧必须要用真机来测验? 扶植,然而有个别效用只可以真机测量检验,比如推送,录像等。
42)IOS 中怎么着拿到某些闲聊组中的成员列表? 用 didFetchGroupOccupantsList方法获得。
43)环信那边语音能还是无法像Wechat那样:相近耳朵的时候就听筒,远远地离开耳朵的时候就扬声器播放啊?能够,要在- (voidState of QatarproximitySensorChanged:(BOOL卡塔尔国isCloseToUser方法中设置。
44)能或不可能查看离线新闻? 不可能,只好查看离线音讯未读数。
45)读取不时会话列表的法子,有的对象里username 是null,那是为啥? 创制会话的时候,是内需chatter 这几个指标,chatter不能够为null ,可以去打字与印刷下chatter,判定是或不是为空。
46)想删除客户端本地闲谈记录,如何做? 那是剔除谈心记录的不二秘诀(参谋): -(NSUInteger卡塔尔(قطر‎removeConversationsByChatters:(NSArray*)chattersdeleteMessages:(BOOL)aDeleteMessages。
47)后台集团管理员能够更换吗? 后台湾公司业管理员不可能直接删除,邮箱也不可能平素改良,然则足以用新的邮箱再增加二个处理,然后把旧的管理员从这么些org下移除掉。
48)上传图片后,再次来到的路子不能下载图片,什么来头? 为了安全,下载进度中还要步向其他参数。不是只经过url就能够下载的。须求参数(share-secret)。
49)NSArray *buddyList = [[EaseMob sharedInstance].chatManager buddyList]; 获取到的都是空的,什么来头? "这些是取内部存款和储蓄器值,要获得detail,要去服务器获取,或许安装sdk自动获取。 // 登陆成功后,自动去取基友列表// SDK获取停止后,会回调 复制代码12[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) { } onQueue:nil]"
50)图像和文字混排怎么落实? 自定义的将图纸,username甚至想要展现的其它内容(通过增加属性message.ext)一块呈现到UI上。
51)播放语音的时候,传感器打开了,可是语音播放完后,传感器还地处打开状态,曾几何时关闭的? 还要加上开启和倒闭间隔感应。
52)demo总是不弹出键盘,如何做? 弹出键盘的急迅键是Command + k(能够百度下xcode6的模仿器弹出键盘的法子)。
53)IOS使用环信的demo举办扩展开采,上传后被拒 ,说是后台播放音乐的由来,那如何是好? 可以考虑去掉声音,假诺要实现地方公告播放音响,再去调用localNotification的default sound就足以了。
54)贰个群ID不能作为一个别人ID? 不能够。
55)音信存到db里面去了 NSArray *chats = [weakSelf.conversation loadNumbersOfMessages:(currentCount + KPageCount) before:beforeTime];为何平素不拿出去吧? 那有依照时间和数据来分别获得的。打字与印刷一下数据。一时候来新新闻了,取的仍然为后有些条,数据就能够窘迫了。那几个api是没难题的。db能够取到表明已经存了数据。恐怕是跟取到的多少和岁月有涉及。
56)cmd音讯,跟谈天的新闻,不设有冲突么? 普通音信回调的办法跟这么些分歧,所以不冲突,普通闲聊得接纳格局didReceiveMessage,cmd音信的吸收接纳方式didReceiveCmdMessage。
57)服务器再次来到登入失败,提示:logInfalse(null卡塔尔国,error 已报到,请先调用logOff 。那是何等来头? 正在登入的时候又发起了登入伏乞。
58)闲聊列表是本土保存的照旧从服务器上获得的? 闲谈列表都以保存在地头了,是sdk自动保存的。服务器上也许有存谈天记录,但是客商端不能取服务器上得闲谈记录。谈天记录在沙盒里,地方在/library/easemobDB 里面。
59)在哪改正环信logo(CFBundleDisplayName),若是是安卓要在哪个地方改? 在InfoPlist.string 文件中退换CFBundleDisplayName;安卓中要在SplashAcitivity里面改正。
60)自动登陆的回调会调用若干遍? 程序步入的时候调二遍,会调用它的八个方式,willAutoLogin和didAtuoLogin。
61)环信的那叁个.a文件之中是或不是有pjsip生成的库文件呢? 有的,可是还尚无暴拆穿来。
62)iOS发送消息时,收到EMErrorServerTimeout 发送音讯超时的报错。 网络景况杰出,可能还或者有此外什么原因招致? 如果是不时的报错,是有极大只怕的。因为顾客端的互连网本来正是三个动荡的弱网络。客商望着以为互连网是好好的,但实则会有各个有时中断。
63)语音信息播报之后,未读标志消失,不过关掉页面,再一次步向,还或然有未读提醒,那个是还是不是是个bug? 这一个是由此增加属性来判别的,播放之后,就修正掉,再壹遍跻身的时候,根据那个值来决断是还是不是播放过。
64)能够兑现每条推送音信的别称都自定义么? 环信下一步会辅助自定义推送新闻模板。每一个app能够有友好一定的模板。但依据备注来推送,那么些猜想帮忙起来是有好多不便的。尚未想好怎么协理。
65)选择本地通告的时候,公告新闻前边显示的是环信id并非nickname,如何是好? "NSString *title = message.from; if (message.isGroup) { NSArray *groupArray = [[EaseMob sharedInstance].chatManager groupList]; for (EMGroup *group in groupArray) { if ([group.groupId isEqualToString:message.conversationChatter]) { title = [NSString stringWithFormat:@""%@(%@)"", message.groupSenderName, group.groupSubject]; break; } } } NSString *title = message.from中得到这几个title 再去自身的服务器要求nickname,再显示到UI上。"
66) * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[XMPPManager networkChangedToNone]: unrecognized selector sent to instance 0x15db1ef0' 然后就咽气了? 那么些报错,日常是用到了环信2.1.3版本里的SDKLite包,后边的2.1.3r3版本有修复,遭逢相近的标题,升级到2.1.3r3版本就能够减轻了
67)环信ios的push, inhouse类型的app帮忙啊? inhouse应该是指集团证书的,这么些sdk不爱护,只要推送证书对应配套就足以推送。
68)点击播放语音的时候,一向呈现正在下载,那些怎么消除?(message.downloading奥迪(Audi卡塔尔o) 消除办法是发送方不做判别,点击之后直接播放,只在选拔方做决断。
69)logininfo临时候为空,是怎么回事? 未有登入。
70)删除亲密的朋友后,好友如故存在于死党列表中,这是干吗? 要先湮灭缓存,再刷新列表。
71)在登入失败的意况下,依然进行其余操作,会现出哪些提醒新闻? 会提示互联网错误。
72)发送的消息内容在bubbleView上的哪儿呀? EMChatTextBubbleView里面。
73)问下ios 自动重连无需代码设置吗?只要求轻松地监督一下吗? 自动重连无需设置。
74)为何增加好朋友客户寻找任何字符都得以搜寻到吧? demo未有范围,搜什么都足以搜到,开垦者能够自身设定一下。
75)环信是从未提供亲密的朋友申请列表的接口,需求做本地数据保存是啊? 基友申请未管理,重启app服务器会再一次给发过来。
76)使用环信sdk摄像的语音是什么编码格式的? 未来的版本,音频部分已经从SDK中退出出去了,SDK已经不做管理了,全部放松权利UI上供开荒者自行管理了。可是录的时候是wmv,转换到amr传过去,接受时再更动过来。
77)音信记录保留的规律? sdk会保存全部音讯,重启app获取的音讯记录都是在缓存中的,要调用从db总得悉记录的秘技,加到缓存中,才具展现出来。
78)环信有木有能够获取具有未读音信的接口? 有收获未读音信数的接口,不能够博取到具有的未读音讯内容。
79)客户是遵纪守法环信的专门的工作配备的, demo在xcode5.1上面也抱错? Xcode5现行反革命不让提交项目了,必得用Xcode6运转。
80)ios推送能够团结设置Apns呈现内容呢? 能够的,今后环信已经支持自定义推送内容了,能够支撑:1、不显示详细情况:“alert”:“您有一条新音讯” 2、展现实际情况:“alert”:“ApnsName:XXXXX” 3、自定义。能够参见下环信的连带自定义推送部分的文书档案。
81)展现实际情况这里,ApnsName为空时 前边的冒号能否去掉? 环信近期已协助自定义推送内容。
82)ios推送字符长度有未有约束? 跟平日新闻无异于,30kb以内。其它,自定义的字段能够整个呈现。
83)老铁申请能够发推送音信么? 好朋友申请音讯无法推送,老铁申请未管理,下一次报到的时候服务器会发放客商。
84)集成了环信最新的ios sdk的话音通话作用更新的时候被拒了,因为顾客这边要求后台通话的效果的 ,所以在工程安装中的后台打开了voico over ip,不过苹果不断定那样做? 不用开那个。恐怕和苹果解释下,说用到之处。
85)做实时语音的时候调用- (EMCallSession *)asyncCallAudioWithChatter:(NSString *)chatter timeout:(NSUInteger)timeout error:(EMError *卡塔尔(قطر‎pError;那几个函数,报这些错误-[EMCallManager asyncCallAudioWithChatter:timeout:error:]: unrecognized selector sent to instance 0x7bea96e0(崩了)是如何原因? 假如用语音实时通话, 就导libEaseMobClientSDK.a那叁个库就足以了(无法导2个库)。
86)环信音讯推送,是地点推送,依然长途推送? ios长连接没断开是地面通知,断开了走apns。
87)iOS 文件在出殡和下葬之后, 对方的接纳到消息后, 对应的文书local路径是指什么? 此时文件是或不是业已存到对方沙盒内了啊? 对方选择到的时缩略图,原件需求点击查阅,技艺下载原件。
88)环信为何未有@功效?现在有未有支撑的布署? 有。可是还未有排期。这几个确定也要做的,是个通用供给。
89)iOS环信音信下载后的公文无后缀,请问还索要什么管理啊? 无需,发送的是何等,下载的正是何等。
90)服务端头阵送的文本音信,然后ios端再发布公文本音信。收到的消息顺序是先接到ios端的然后在才接过服务端的。 后台发,这么些理应发送作用难题,排序是遵纪守法音信接受时间。
91)勾选奥迪o and AirPlay后,上传App被AppStore拒却。 不勾选这几个,然后在本地推送里设置当地推送提醒音。
92)直接通过app本身的服务器去登入环信,登陆成功以往不可能促膝交谈是怎么回事? 必需透过客商端sdk登陆技艺闲谈,顾客端跟服务器之间未有长连接不能够促膝交谈。
93)环信SDK哪些数据做了本地储存的?群组列表也是存了的?加基友、参加群组之类的关照呢?im都存了,其他的都亟待开垦者自个儿管理。群组列表不是风靡的,只是会报给,那个最棒如故开辟者本人存。加死党、参预群组之类的文告sdk不存,ui存了。
94)头像在哪个类里面安装? EMChatViewBaseCell。
95)IOS,独有退出登入,才好不轻松不在线,对么? ios不在前台,正是不在线。但要注意步向到后台3分钟后才不在线,因为ios系统会在步向后台3分钟后,把施用的总是杀死。
96)近日不扶植群聊语音电话? 近些日子是语音单聊。
97)安卓和ios 录音的格式分别是何许? 安卓是amr格式,wav格式。iOS5在先有鲜明的辨证,不扶持amr间接播放。之后就未有刚毅表明了。应该是也不援助。iossdk中 发送: wav->amr; 选拔:amr - > wav,用libopencore那么些库转的。其余,以后iOS端的语音部分已经整整从SDK抽离出去了,全部放到UI上供开拓者自行管理。
98)为啥得到不到群组的owner? 获取与自身有关的群组的时候只得看到群组ID,和群组名称,唯有调用群实际情况的主意技术看到,调用群详细情形的秘诀,能看到描述和owner。
99)报错:imported from module ‘UIKit…’怎么着改? 未有导入UIKit,#import
100)二个新闻发送战败后,使用asyncSendMessage重新发送,音信的timestamp怎么翻新? 重新发送消息,是用的早先的时光,qq管理的也是用的以前的年华,sdk内处的小运。
101)ios的导航栏的颜料在哪改? [[UINavigationBar appearance] setBarTintColor:RGBACOLOR(78, 188, 211, 1)];
102)iOS要落实四个群聊不播放提醒音或然震惊,只好开拓者本人完毕??如故像android那样有相应的接口? 不播放,便是不调用震惊和节奏就能够了,要自身达成。
103)rest接口如若调用次数过大会报什么错? "会回去:503 (服务不可用) 服务器这两天不能选取(由于超载或停机维护)。 经常,那只是临时状态。"
104)[self setupUIDemoDB] 这些是必得的吧? 不是。那一个是demo中用到的第三方DB,存的是老铁申请那风流倜傥类的音讯。不提议利用,能够仁慈写叁个DB进行仓库储存105)在模拟器上登录的时候会报那一个错误,是怎么回事? 应该是顾客名多敲了空格。
105)四个客商端,不过却是分歧的使用,为了兑现两头的通讯,用了第1个的appkey,客户也都以在第三个app下报了名的,可是出于推送证书要绑定app,所以第一个从未推送,请问怎么消除? 能够上传多套证书,四个利用之间通讯只要保证是同八个appkey 就能够, 借使是推送的话 ,要担保项目中的证书名称跟上流传后台的证件名称相似。
106)IOS删除全数闲话记录的主意是哪位? 复制代码123456789101112/
! @method @brief 删除全体会话对象 @discussion @param aDeleteMessages 是还是不是删除那么些会话对象所关联的谈心记录 @param append2Chat 是否加到内部存款和储蓄器中。 YES为加到内部存款和储蓄器中。加到内部存款和储蓄器中之后, 会有照看的回调被触发进而更新UI; NO为不加到内部存款和储蓄器中。假诺不加到内部存款和储蓄器中, 则只会直接助长进DB, 不会有SDK的回调函数被触发进而去更新UI。 @result 是或不是成功推行 */- (BOOL)removeAllConversationsWithDeleteMessages:(BOOL)aDeleteMessages append2Chat:(BOOL)append2Chat。
107)客户发过来的语音音讯,那边听过后,黄点(未读标记)不死灭, 是怎么回事? "全局搜一下prepareMessage奥迪oModel那么些函数 还或许有modelWithMessage,把 [[EaseMob sharedInstance].chatManager insertMessageToDB:chatMessage]; 换成[chatMessage?updateMessageExtToDB];"
108)[NSConcreteData AES256Decrypt]: unrecognized selector sent to instance XXX,如何是好? other link flags 设置-ObjC 注意分寸写。
109)framework not found Metal for architecture armv7s 必要进步到xcode6。
110)SDK太大了,如何是好? SDK大不影响打包成ipa,打包出ipa安装包后,平时只会大增2MB左右。
111)SDK是不是帮忙六16人? 帮忙。
112)不恐怕选取闲扯音讯? "接收闲聊等回调,要留意以下几步骤: 1、表明达成IChatManagerDelegate,如: @interface EaseMobSDKAccountManager (卡塔尔2、注册当前类选取回调 [[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil]; 3、完成对应回调方法,如: // 收新闻的回调x000D-(void)didReceiveMessage:(EMMessage *)message{x000D__x000D}"
113)一条消息收到多次,为何? "日常是由本类数十一遍报了名了回调引致,请分明以下格局只进行了一回 [[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil]; 何况在类析构时注销回调 -(void卡塔尔(قطر‎dealloc{ [[EaseMob sharedInstance].chatManager removeDelegate:self]; "
114)不能选取老铁供给,如何做? 请分明选拔基友伏乞的类是还是不是开首化,并宣称了IChatManagerDelegate,落成了挂号回调理回调方法。
115)APP后台时束手束足吸取推送,咋做? 环信将notification分为三种,意气风发种是地面通告,生机勃勃种是apns。当您后台时,长连接还设有,会走didReceiveMessage方法,需求你自身维护本地通知(即LocalNotification)。
116)APP深透关闭,无法吸收接纳推送? "顾客能够经过以下几步核实自身的推送
1.首先须求客商上传APNS推送证书到环信管理后台。
2.在环信iOSSDK初始化时填写客商自个儿的申明名称。
3.报了名推送。
4.真机登陆环信im账号。
5.翻看管理后台南,对应im账户下是或不是有客户刚刚写的证书名。(若无,请检查是还是不是得到了deviceToken)
6.明确客商日前注脚是还是不是和友爱的品种相称。(开垦证书与分娩证书供给种种对应)"
117)环信 pod 上面的SDK是最新么? "通过Cocoapods下载地址 不包括实时语音版本SDK(EaseMobClientSDKLite),引用时 #importpod'EaseMobSDK', :git => 'https://github.com/easemob/sdk-ios-cocoapods.git' 包蕴实时语音版本SDK(EaseMobClientSDK),援用时 #importpod 'EaseMobSDKFull', :git => 'https://github.com/easemob/sdk-ios-cocoapods-integration.git'"
118)注册deviceToken回调现身error,注册推送战败errorCode = 3000?
那是安排非凡,还从未到环信。平时是profile文件难题,或然表明未有打开推送功能。 相通那时候报的errorCode,能够百度消除,http://www.educity.cn/wenda/100742.html。
119)为啥设置EMPushNotificationOptions重回error 是nil,设置也窘迫?
EMPushNotificationOptions设置必要在您拿到deviceToken成功后手艺安装。请先显著deviceToken获取没难点。
120)为啥提交的APNS别称和应用证书名后台看不到?
那四个也是急需客户鲜明了deviceToken精确获取后才得以。
121)项目中是或不是能够用别样推送,和环信推送是不是有冲突?
从不冲突。
122)是或不是能够用环信推广告之类的别的新闻?
环信的推送首要为IM服务,如若有这么些需求,建议开垦者用专项使用的推送服务。
123)后台上传证书展现极度,咋做?
可怜日常是因为证书制作进度不对,或许密码输入有标题,密码为开辟者导出证书时设置的密码。
124)证书不安装密码是还是不是可用?
时下须要必需设置密码。
125)项目要提交了,想测下,如何操作?
卷入时行使ad-hoc方式,可以打包出多少个release版本的ipa,用这些测量检验就可以。
126)固然开垦者想按home键后马上接到推送,如哪里理?
因为此时顾客还是长连接中,可以监听didReceiveMessage方法,之后开荒者自个儿达成localNotification。
127)IOS做退出登入有乞请超时的问题。
退出登录时,真机时把isUnbind那一个特性设为YES, 淹没device_token绑定,若是现身退出解绑失利的情景,大概是从未有过互联网。
128)群音信ios登入客商发群音讯,android的记名客商收不到是怎么原因?
拍卖方法:请提供下发送双方的log日志,和那些app的appkey,token,以至丢得音讯的id,工作人员会开展每种考察。
129)把appkey下的全数顾客全体设置成免骚扰。有连锁接口么?
不设置推送证书,借使设置了,删掉就能够。
130)环信的SDK在xcode7上能用么?
当前的风靡版本2.2.0生龙活虎度支撑。
131)自动登入的情况如几时候设置为no,独有退出登录才设置吗?
脱离的时候自动就改成no了。
132)闲谈室中头像和别称的获取,今后有哪些方案吗?
和群聊的头像外号方案是相像的,能够参照:http://docs.easemob.com/doku.php?id=start:000quickstart:40nickna
133)1. 2.1.9本子的sdk.a包会有与fmpeg 冲突的意况,那几个要怎么管理啊?2.他们用到了那么些http://videojj.com/,录像播放的第三方?
若是用到了环信的实时语音库,同一时间也应用了其它第三方的库,就能冲突。
134)发实时语音 iOS 不走apns?
一时一刻还不扶助,现在实时语音是通过P2P直连可能Server relay。

Web SDK 开拓手册

安装代理

SDK 概述

今日头条云信 SDK 为 Web 应用提供八个圆满的 IM 系统开荒框架, 屏蔽掉 IM 系统的复杂性的内幕, 对外提供比较容易的 API 接口, 方便第三方应用飞快集成 IM 成效。
博客园云信还支付了可供开采者们参谋,怎么着使用该SDK的Web 德姆o:

  • Web源码导读
  • Web(移动端H5State of Qatar源码导读(不包罗音录制卡塔尔(قطر‎

[[RCIM sharedRCIM] setUserInfoDataSource:self];

付出策画

[[RCIM sharedRCIM] setGroupInfoDataSource:self];

下载并引进 SDK 文件

  • 从云信官方网址下载 Web SDK 并解压
  • 目录布局介绍
  • 固然要在浏览器里面使用 SDK, 相应的 JS 文件都在 js 目录下.
  • 比方要在Wechat小程序里面使用 SDK, 相应的 JS 文件在 weixin-app 目录下.
  • 接收并引进
  • 只要要接受 IM 功能, 请引进 NIM_Web_NIM_v.js
  • 假诺经过 script 标签引进, 请通过 NIM 来获取援用
  • 若是要接受闲谈室效能, 请引进 NIM_Web_Chatroom_v.js
  • 假使因而 script 标签引进, 请通过 Chatroom 来获取引用
  • 意气风发旦同期利用 IM 和聊天室效能, 请引进 NIM_Web_SDK_v.js
  • <p style='color: #d9534f;'>假若经过 script 标签引进, 请通过 SDK.NIMSDK.Chatroom 来获取 NIMChatroom 的援用, 下文中的 API 都以由此 NIMChatroom 来调用的</p>
  • 假诺要使用 IM 的插件版实时音录像功用, 请引入 NIM_Web_Netcall_v.js, 通过 Netcall 来获取援用, 调用 NIM.use(Netcall) 来加载实时音录像插件
  • 若果要利用 IM 的WebRTC实时音录制成效, 请引进 NIM_Web_WebRTC_v.js, 通过 WebRTC 来获取援引, 调用 NIM.use(WebRTC) 来加载实时音录制插件

落到实处际景况势

打包

若是开拓者采纳 webpack/babel 来打包, 那么请使用 exclude 将 SDK 文件清除, 幸免 babel 贰次打包引起的错误

- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion;

浏览器宽容性

云信 Web SDK (不分包实时音录像卡塔尔(قطر‎宽容到 IE8

  • IE8/IE9 须要将品种配置在 HTTPS 遭逢下技术一连到云信服务器, 别的高档浏览器能够在 HTTP 恐怕 HTTPS 意况下三番五次到云信服务器

群组消息提供者:

数据库包容性

在支撑数据库的浏览器上 SDK 会将数据缓存到数据库中, 后续同步皆以增量更新, 加速初叶化速度

- (void)getGroupInfoWithGroupId:(NSString *)groupId completion:(void (^)(RCGroup *))completion;

是还是不是扶植数据库

// 通过此 `boolean` 值来查看 SDK 在某个浏览器上是否支持数据库
NIM.support.db

办法调用表达:

不采纳数据库

如若开荒者不想采用数据库, 那么能够安装开端化参数dbfalse来剥夺数据库

var nim = NIM.getInstance({
db: false
});

那八个格局,由 RCIM 类创造单例实行落到实处,所以总体工程中只要求达成一次就足以。

Wechat小程序

选拔前请找技能援助开通效率

当会话列表大概会话分界面中对应的顾客必要显示的时候,每一种客户都会触发那几个情势,所以公约议程中的参数 UserID/groupID 正是对应以此需求出示的客户的 ID,这些 ID 是已知的,能够直接行使。进而,开垦者能够透过这些已知的 UserID,获取到该 UserID 对应的保存在自个儿服务器只怕此前自行创设数据库写入的客户音讯,并落实完全回调。

require

请查阅支出思考来下载并引入SDK 文件

  • 三个Wechat小程序同不时间只好有二个 WebSocket 连接, 所以未有主意同不时候利用 NIM 和 Chatroom
  • 身体力行代码如下
// 只使用 NIM
var NIM = require('NIM_Web_NIM_v')
// 只使用 Chatroom
var Chatroom = require('NIM_Web_Chatroom_v')

值得注意的是,当顾客率先次索要展示的时候,该方法会被触发,并活动对该用户展开了音讯的缓存。在 App 存活的生命周期中,之后该客户需求突显的时候,便不会触发该办法,SDK 自动遍历缓存的数码。(从 2.6.0 开端 IMKit可以缓存顾客消息到数据Curry,开垦者可以开启 RCIM.h 里的  enablePersistentUserInfoCache )

接口调用

Wechat小程序的许多接口跟浏览器遭遇完全风流罗曼蒂克致, 如有不相同会附加表达, 请查阅别的章节

顾客/群组消息提供者的议和代理方法完整回调之后,能够保险 App 的地面公告功用,对应体现的客商新闻完整准确。

真机考虑

在Wechat民众品台 > 设置 > 开荒设置 > 服务器配置, 配置域名白名单. 注意半年内可报名3次改进, 请谨慎修正.

安装 IM 必要的域名

  • request合法域名
  • lbs.netease.im
  • wlnimsc0.netease.im
  • socket合法域名
  • wlnimsc0.netease.im
  • uploadFile合法域名
  • nos.netease.com
  • downloadFile合法域名
  • nos.netease.com

安装聊天室需求的域名

  • request合法域名
  • wlnim43.netease.im
  • socket合法域名
  • wlnim43.netease.im
  • uploadFile合法域名
  • nos.netease.com
  • downloadFile合法域名
  • nos.netease.com

若果,当客户消息更正的时候,须要相应达成 RCIM 类中的那五个方法开展翻新。

依赖表达

  • SDK 使用一文山会海开源库来更加好的形成专门的职业, 全体库均挂在 NIM 下边
  • SDK 使用 es5-shim 来让低版本浏览器兼容 ES5 的一部分方法
  • SDK 使用 platform.js 来检查评定浏览器平台, 通过 NIM.platform 来获取此库的引用
  • SDK 使用 socket.io-client 0.9 来建立 Socket 连接, 通过 NIM.iowindow.io 来获取此库的援用

/**

初始化 SDK

请查阅支付考虑来下载并引入SDK 文件

* 当地客户音信改造,调用此办法改良kit层客户缓存信息

示范代码

  • 此接口为单例方式, 对于同二个账号, 长久重返同大器晚成份实例, 即独有首先次调用会伊始化三个实例
  • 接轨调用此接口会直接重返初步化过的实例, 同一时间也会调用接口更新配备立异传入的安顿
  • 接轨调用此接口时, 如果连接已断开, 会自动建立连接
  • 当产生掉线时,SDK会自动进行重连
  • 开荒者在摄取onconnect回调之后表示链接已经济建设立, 那个时候 SDK 会早先协同数据, 随后在抽取onsyncdone回调之后表示 SDK 完结了数据同步工作, 那时开采者能够开展渲染UI等操作了。
  • 这里的data表示数量, 在背后章节的身体力行代码中会数十次采纳那些指标
  • 这里的nim代表 SDK, 在后头章节的以身作则代码中会数十次利用那些对象.
  • 那边的参数并非独具的带头化参数, 请查阅别的章节的初步化参数
  • 初始化SDK
  • 多端登录起首化参数
  • 客户关系伊始化参数
  • 知音关系早先化参数
  • 顾客名片最初化参数
  • 群组开端化参数
  • 会话初步化参数
  • 音信初叶化参数
  • 系统通报最先化参数
  • 协助实行达成
  • 完整的起头化代码
var data = {};
// 注意这里, 引入的 SDK 文件不一样的话, 你可能需要使用 SDK.NIM.getInstance 来调用接口
var nim = NIM.getInstance({
// debug: true,
appKey: 'appKey',
account: 'account',
token: 'token',
onconnect: onConnect,
onwillreconnect: onWillReconnect,
ondisconnect: onDisconnect,
onerror: onError
});
function onConnect() {
console.log('连接成功');
}
function onWillReconnect(obj) {
// 此时说明 SDK 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
console.log('即将重连');
console.log(obj.retryCount);
console.log(obj.duration);
}
function onDisconnect(error) {
// 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
console.log('丢失连接');
console.log(error);
if (error) {
switch (error.code) {
// 账号或者密码错误, 请跳转到登录页面并提示错误
case 302:
break;
// 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误
case 417:
break;
// 被踢, 请提示错误后跳转到登录页面
case 'kicked':
break;
default:
break;
}
}
}
function onError(error) {
console.log(error);
}

* @param userInfo 要更新的客商实体

参数解释

  • debug: 是或不是展开日志, 开辟者可以开启日志, 那样 SDK 会将重点操作的音讯打字与印刷到调节台上, 便于调节和测量检验
  • appKey: 在云信管理后台查看应用的 appKey
  • account: 帐号, 应用内唯风姿洒脱
  • token: 帐号的 token, 用于建设布局连接
  • transports: 用于建设构造长连接的协商数组,可不填,默认为['websocket', 'xhr-polling']
  • 暗中认可状态 sdk优用websocket连接,假若浏览器不扶持websocket,则接受xhr-polling
  • 开荒者可手动设置连接及各种,可协助选项包蕴websocket、xhr-polling、flashsocket
  • 示例如: transports: ['websocket'、'xhr-polling'、'flashsocket']
  • onconnect: 连接创设后的回调, 会传入贰个对象, 富含登陆的音讯, 有以下字段
  • lastLoginDeviceId: 上次报到的配备的配备号
  • connectionId: 本次登陆的总是号
  • ip: 客户端IP
  • port: 顾客端端口
  • country: 此次登录的国家
  • onwillreconnect: 就要重连的回调
  • 当时验证 SDK 已经断开连接, 请开采者在分界面上提示客商连接已断开, 并且正在重新组建连接
  • 此回调会接到二个对象, 满含额外的音讯, 有以下字段
  • duration: 间隔下一次重连的年月
  • retryCount: 重连尝试的次数
  • ondisconnect: 断开连接后的回调
  • 这会儿表达 SDK 处于断开状态, 开辟者那时应该依据错误码提醒相应的错误消息, 並且跳转到登入页面
  • 此回调会接到三个对象, 包括错误的新闻, 有以下字段
  • code: 出错开上下班时间的错误码, 恐怕为空
  • 302: 账号大概密码错误, 请跳转到登入页面并提示错误
  • 417: 重复登陆, 已经在任何端登陆了, 请跳转到登入页面并提醒错误
  • 'kicked': 被踢
  • onerror: 爆发错误的回调, 会传入错误对象

* @paramuserId  要翻新的客商 Id

同台实现

SDK 在一块儿到位之后会通报开拓者, 开辟者能够在此回调之后再先河化本身的分界面, 以致开展任何操作, 同步的多少包罗上面章节中的

  • 黑名单, 对应回调 onblacklist, 请参考顾客关系托管里面包车型地铁发轫化参数
  • 静音列表, 对应回调 onmutelist, 请参考顾客关系托管其间的最初化参数
  • 很好的朋友, 对应回调 onfriends, 请参考好友关系托管中间的初叶化参数
  • 自己的名片, 对应回调 onmyinfo, 请参考顾客著名影片托管个中的起先化参数
  • 老铁的名片, 对应回调 onusers, 请参考客户名片托管此中的伊始化参数
  • 群, 对应回调 onteams, 请参考群组里头的初步化参数
  • 对话, 对应回调 onsessions, 请参考会话个中的初步化参数
  • 参观消息, 对应回调 onroamingmsgs, 请参考消息里面包车型地铁开首化参数
  • 离线新闻, 对应回调 onofflinemsgs, 请参考消息中间的先河化参数
  • 离线系统通报, 对应回调 onofflinesysmsgs, 请参考系统通报此中的初叶化参数
  • 离线自定义系统通报, 对应回调 onofflinecustomsysmsgs, 请参考系统通报当中的开端化参数

示范代码

  • 这里的参数并非具有的开端化参数, 请查阅初始化 SDK, 以至此外章节的发轫化参数
  • 初始化SDK
  • 多端登陆初阶化参数
  • 顾客关系伊始化参数
  • 知音关系初叶化参数
  • 用户名片开端化参数
  • 群组伊始化参数
  • 会话起头化参数
  • 信息初步化参数
  • 系统通报开头化参数
  • 一块到位
  • 完全的初步化代码
var nim = NIM.getInstance({
onsyncdone: onSyncDone,
});
function onSyncDone() {
console.log('同步完成');
}

*/

联机按键

SDK 默许会同步全数的数目, 开垦者能够通过按钮来选拔不联合某个数据, 那么些开关都是开头化参数

  • syncRelations, 是还是不是同步黑名单和静音列表, 私下认可true. 如果传false就收不到黑名单和静音列表, 即不会选用onblacklist回调和onmutelist回调, 开采者后续能够调用获取黑名单和静音列表来获得黑名单和静音列表。
  • syncFriends, 是不是同步基友列表, 暗中认可true. 如果传false就收不到onfriends回调, 开拓者后续能够调用赢得亲密的朋友列表来博取老铁列表。
  • syncFriendUsers, 是不是同步亲密的朋友对应的客商名片列表, 暗中认可true, 如果传false就收不到onusers回调.
  • syncRobots, 是还是不是同步机器人列表,默许false, 如果传false就收不到onrobots回调。
  • syncTeams, 是不是同步群列表, 默许true. 如果传false就收不到群列表, 即不会收下onteams回调, 开荒者后续可以调用赢得群列表来获得群列表.
  • syncExtraTeamInfo, 是或不是同步额外的群音讯, 暗中同意true随同步额外的群音信, 前段时间席卷
  • 脚下报到顾客是不是打开某些群的新闻提醒 (SDK 只是存款和储蓄了此音信, 具体用此音信来做哪些事情完全由开垦者调整State of Qatar
  • 调用接口纠正本身的群属性来关闭/开启有些群的音信提醒
  • 调用接口是或不是必要群消息文告来询问是或不是供给群音讯通告
  • syncTeamMembers, 是或不是同步群成员, 私下认可true. 只有在syncTeams=true的时候才起功能, 要是传false就不会同步群成员, 即不会吸收接纳onteammembersonsyncteammembersdone回调, 开采者后续能够调用收获群成员来博取群成员.
  • syncRoamingMsgs, 是或不是同步漫游音信, 暗中同意true. 如果传false就收不到漫游音信, 即不会收下onroamingmsgs回调.
  • syncMsgReceipts, 是不是同步已读回执时间戳, 暗中同意true. 如果传false就收不到已读回执时间戳.

身体力行代码

  • 那边的参数并不是兼具的伊始化参数, 请查阅初始化 SDK, 以至别的章节的初阶化参数
  • 初始化SDK
  • 多端登陆早先化参数
  • 顾客关系早先化参数
  • 基友关系初叶化参数
  • 客户著名影片开始化参数
  • 群组开端化参数
  • 会话开始化参数
  • 音信开始化参数
  • 系统通报初步化参数
  • 联手到位
  • 全体的初阶化代码
var nim = NIM.getInstance({
syncRelations: false
});

- (void)refreshUserInfoCache:(RCUserInfo *)userInfo

一体化的初叶化代码

  • 请查阅此外章节的开端化参数
  • 初始化SDK
  • 多端登入伊始化参数
  • 顾客关系早先化参数
  • 亲密的朋友关系开首化参数
  • 客商名片开头化参数
  • 群组起初化参数
  • 会话先导化参数
  • 新闻早先化参数
  • 系统通报初步化参数
  • 少年老成道到位
  • 风度翩翩体化的最早化代码
var data = {};
var nim = NIM.getInstance({
// 初始化SDK
// debug: true
appKey: 'appKey',
account: 'account',
token: 'token',
onconnect: onConnect,
onerror: onError,
onwillreconnect: onWillReconnect,
ondisconnect: onDisconnect,
// 多端登录
onloginportschange: onLoginPortsChange,
// 用户关系
onblacklist: onBlacklist,
onsyncmarkinblacklist: onMarkInBlacklist,
onmutelist: onMutelist,
onsyncmarkinmutelist: onMarkInMutelist,
// 好友关系
onfriends: onFriends,
onsyncfriendaction: onSyncFriendAction,
// 用户名片
onmyinfo: onMyInfo,
onupdatemyinfo: onUpdateMyInfo,
onusers: onUsers,
onupdateuser: onUpdateUser,
onrobots: onRobots,
// 群组
onteams: onTeams,
onsynccreateteam: onCreateTeam,
onteammembers: onTeamMembers,
onsyncteammembersdone: onSyncTeamMembersDone,
onupdateteammember: onUpdateTeamMember,
// 会话
onsessions: onSessions,
onupdatesession: onUpdateSession,
// 消息
onroamingmsgs: onRoamingMsgs,
onofflinemsgs: onOfflineMsgs,
onmsg: onMsg,
// 系统通知
onofflinesysmsgs: onOfflineSysMsgs,
onsysmsg: onSysMsg,
onupdatesysmsg: onUpdateSysMsg,
onsysmsgunread: onSysMsgUnread,
onupdatesysmsgunread: onUpdateSysMsgUnread,
onofflinecustomsysmsgs: onOfflineCustomSysMsgs,
oncustomsysmsg: onCustomSysMsg,
// 同步完成
onsyncdone: onSyncDone
});

function onConnect() {
console.log('连接成功');
}
function onWillReconnect(obj) {
// 此时说明 `SDK` 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
console.log('即将重连');
console.log(obj.retryCount);
console.log(obj.duration);
}
function onDisconnect(error) {
// 此时说明 `SDK` 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
console.log('丢失连接');
console.log(error);
if (error) {
switch (error.code) {
// 账号或者密码错误, 请跳转到登录页面并提示错误
case 302:
break;
// 被踢, 请提示错误后跳转到登录页面
case 'kicked':
break;
default:
break;
}
}
}
function onError(error) {
console.log(error);
}

function onLoginPortsChange(loginPorts) {
console.log('当前登录帐号在其它端的状态发生改变了', loginPorts);
}

function onBlacklist(blacklist) {
console.log('收到黑名单', blacklist);
data.blacklist = nim.mergeRelations(data.blacklist, blacklist);
data.blacklist = nim.cutRelations(data.blacklist, blacklist.invalid);
refreshBlacklistUI();
}
function onMarkInBlacklist(obj) {
console.log(obj);
console.log(obj.account + '被你在其它端' + (obj.isAdd ? '加入' : '移除') + '黑名单');
if (obj.isAdd) {
addToBlacklist(obj);
} else {
removeFromBlacklist(obj);
}
}
function addToBlacklist(obj) {
data.blacklist = nim.mergeRelations(data.blacklist, obj.record);
refreshBlacklistUI();
}
function removeFromBlacklist(obj) {
data.blacklist = nim.cutRelations(data.blacklist, obj.record);
refreshBlacklistUI();
}
function refreshBlacklistUI() {
// 刷新界面
}
function onMutelist(mutelist) {
console.log('收到静音列表', mutelist);
data.mutelist = nim.mergeRelations(data.mutelist, mutelist);
data.mutelist = nim.cutRelations(data.mutelist, mutelist.invalid);
refreshMutelistUI();
}
function onMarkInMutelist(obj) {
console.log(obj);
console.log(obj.account + '被你' + (obj.isAdd ? '加入' : '移除') + '静音列表');
if (obj.isAdd) {
addToMutelist(obj);
} else {
removeFromMutelist(obj);
}
}
function addToMutelist(obj) {
data.mutelist = nim.mergeRelations(data.mutelist, obj.record);
refreshMutelistUI();
}
function removeFromMutelist(obj) {
data.mutelist = nim.cutRelations(data.mutelist, obj.record);
refreshMutelistUI();
}
function refreshMutelistUI() {
// 刷新界面
}

function onFriends(friends) {
console.log('收到好友列表', friends);
data.friends = nim.mergeFriends(data.friends, friends);
data.friends = nim.cutFriends(data.friends, friends.invalid);
refreshFriendsUI();
}
function onSyncFriendAction(obj) {
console.log(obj);
switch (obj.type) {
case 'addFriend':
console.log('你在其它端直接加了一个好友' + obj.account + ', 附言' + obj.ps);
onAddFriend(obj.friend);
break;
case 'applyFriend':
console.log('你在其它端申请加了一个好友' + obj.account + ', 附言' + obj.ps);
break;
case 'passFriendApply':
console.log('你在其它端通过了一个好友申请' + obj.account + ', 附言' + obj.ps);
onAddFriend(obj.friend);
break;
case 'rejectFriendApply':
console.log('你在其它端拒绝了一个好友申请' + obj.account + ', 附言' + obj.ps);
break;
case 'deleteFriend':
console.log('你在其它端删了一个好友' + obj.account);
onDeleteFriend(obj.account);
break;
case 'updateFriend':
console.log('你在其它端更新了一个好友', obj.friend);
onUpdateFriend(obj.friend);
break;
}
}
function onAddFriend(friend) {
data.friends = nim.mergeFriends(data.friends, friend);
refreshFriendsUI();
}
function onDeleteFriend(account) {
data.friends = nim.cutFriendsByAccounts(data.friends, account);
refreshFriendsUI();
}
function onUpdateFriend(friend) {
data.friends = nim.mergeFriends(data.friends, friend);
refreshFriendsUI();
}
function refreshFriendsUI() {
// 刷新界面
}

function onMyInfo(user) {
console.log('收到我的名片', user);
data.myInfo = user;
updateMyInfoUI();
}
function onUpdateMyInfo(user) {
console.log('我的名片更新了', user);
data.myInfo = NIM.util.merge(data.myInfo, user);
updateMyInfoUI();
}
function updateMyInfoUI() {
// 刷新界面
}
function onUsers(users) {
console.log('收到用户名片列表', users);
data.users = nim.mergeUsers(data.users, users);
}
function onUpdateUser(user) {
console.log('用户名片更新了', user);
data.users = nim.mergeUsers(data.users, user);
}
function onRobots (robots) {
console.log('收到机器人列表', robots);
data.robots = robots;
}
function onTeams(teams) {
console.log('群列表', teams);
data.teams = nim.mergeTeams(data.teams, teams);
onInvalidTeams(teams.invalid);
}
function onInvalidTeams(teams) {
data.teams = nim.cutTeams(data.teams, teams);
data.invalidTeams = nim.mergeTeams(data.invalidTeams, teams);
refreshTeamsUI();
}
function onCreateTeam(team) {
console.log('你创建了一个群', team);
data.teams = nim.mergeTeams(data.teams, team);
refreshTeamsUI();
onTeamMembers({
teamId: team.teamId,
members: owner
});
}
function refreshTeamsUI() {
// 刷新界面
}
function onTeamMembers(teamId, members) {
console.log('群id', teamId, '群成员', members);
var teamId = obj.teamId;
var members = obj.members;
data.teamMembers = data.teamMembers || {};
data.teamMembers[teamId] = nim.mergeTeamMembers(data.teamMembers[teamId], members);
data.teamMembers[teamId] = nim.cutTeamMembers(data.teamMembers[teamId], members.invalid);
refreshTeamMembersUI();
}
function onSyncTeamMembersDone() {
console.log('同步群列表完成');
}
function onUpdateTeamMember(teamMember) {
console.log('群成员信息更新了', teamMember);
onTeamMembers({
teamId: teamMember.teamId,
members: teamMember
});
}
function refreshTeamMembersUI() {
// 刷新界面
}

function onSessions(sessions) {
console.log('收到会话列表', sessions);
data.sessions = nim.mergeSessions(data.sessions, sessions);
updateSessionsUI();
}
function onUpdateSession(session) {
console.log('会话更新了', session);
data.sessions = nim.mergeSessions(data.sessions, session);
updateSessionsUI();
}
function updateSessionsUI() {
// 刷新界面
}

function onRoamingMsgs(obj) {
console.log('漫游消息', obj);
pushMsg(obj.msgs);
}
function onOfflineMsgs(obj) {
console.log('离线消息', obj);
pushMsg(obj.msgs);
}
function onMsg(msg) {
console.log('收到消息', msg.scene, msg.type, msg);
pushMsg(msg);
}
function pushMsg(msgs) {
if (!Array.isArray(msgs)) { msgs = [msgs]; }
var sessionId = msgs[0].sessionId;
data.msgs = data.msgs || {};
data.msgs[sessionId] = nim.mergeMsgs(data.msgs[sessionId], msgs);
}

function onOfflineSysMsgs(sysMsgs) {
console.log('收到离线系统通知', sysMsgs);
pushSysMsgs(sysMsgs);
}
function onSysMsg(sysMsg) {
console.log('收到系统通知', sysMsg)
pushSysMsgs(sysMsg);
}
function onUpdateSysMsg(sysMsg) {
pushSysMsgs(sysMsg);
}
function pushSysMsgs(sysMsgs) {
data.sysMsgs = nim.mergeSysMsgs(data.sysMsgs, sysMsgs);
refreshSysMsgsUI();
}
function onSysMsgUnread(obj) {
console.log('收到系统通知未读数', obj);
data.sysMsgUnread = obj;
refreshSysMsgsUI();
}
function onUpdateSysMsgUnread(obj) {
console.log('系统通知未读数更新了', obj);
data.sysMsgUnread = obj;
refreshSysMsgsUI();
}
function refreshSysMsgsUI() {
// 刷新界面
}
function onOfflineCustomSysMsgs(sysMsgs) {
console.log('收到离线自定义系统通知', sysMsgs);
}
function onCustomSysMsg(sysMsg) {
console.log('收到自定义系统通知', sysMsg);
}

function onSyncDone() {
console.log('同步完成');
}

withUserId:(NSString *)userId;

签到与登出

/**

登出 IM

  • 初始化 SDK随后, SDK 会自动登陆
  • 在收到onconnect回调后方可调用nim.disconnect();来登出 SDK
  • 登出 SDK 后得以调用nim.connect();来重新登陆 SDK

* 本地群组音讯改变,调用此方法立异kit层群组缓存消息

切换 IM

风姿浪漫旦急需切换 IM, 操作步骤如下

  • 调用登出IM来登出IM
  • 调用初始化SDK来开端化新的 IM

* @param groupInfo 要翻新的群组实体

更新 IM 配置

SDK 设计为单例情势, 假设必要创新当前 IM 的布置, 那么能够调用此接口, 参数列表和格式跟NIM.getInstance保持风流洒脱致, 以立异 token 为例

// 断开 IM
nim.disconnect();
// 更新 token
nim.setOptions({
token: 'newToken'
});
// 重新连接
nim.connect();

* @param groupId  要创新的群组 Id

多端登陆

云信支持多端同一时候登入, 即客商能够并且在移动端和网页端登陆同意气风发账号

*/

最初化参数

  • 这里的参数并不是富有的初叶化参数, 请查阅初始化 SDK, 以致其余章节的开头化参数
  • 初始化SDK
  • 多端登入最初化参数
  • 客户关系开端化参数
  • 好朋友关系早先化参数
  • 客商名片起头化参数
  • 群组开首化参数
  • 会话起头化参数
  • 消息初始化参数
  • 系统通报初叶化参数
  • 一路到位
  • 完全的初始化代码

演示代码

var nim = NIM.getInstance({
onloginportschange: onLoginPortsChange
});
function onLoginPortsChange(loginPorts) {
console.log('当前登录帐号在其它端的状态发生改变了', loginPorts);
}

参数解释

  • onloginportschange: 多端登陆景况变化的回调, 会收到登录端列表, 以下意况会抽取此回调
  • 登陆时其余端在线
  • 报到后此外端上线恐怕下线

- (void)refreshGroupInfoCache:(RCGroup*)groupInfo

登录端

登入端代表签到在某些设备上的连带音讯, 犹如下字段

  • type: 登录的设施等级次序
  • os: 登陆设备的操作系统
  • mac: 登入设备的 mac 地址
  • deviceId: 登陆设备ID, uuid
  • account: 登入的帐号
  • connectionId: 登录设备分配的总是号
  • ip: 登陆的服务器 IP
  • time: 登入时间
  • online: 是不是在线

withGroupId:(NSString *)groupId;

设施等级次序

日前云信扶助的登陆端有以下几类别型

  • 'Android' (安卓)
  • 'iOS' (苹果)
  • 'PC' (桌面)
  • 'Web' (浏览器)
  • 'Mac' (桌面)

肃清客商音讯缓存的接口:

踢别的端

演示代码

nim.kick({
deviceIds: ['deviceId1'],
done: onKick
});
function onKick(error, obj) {
console.log('踢其它端' + (!error?'成功':'失败'));
console.log(error);
console.log(obj);
}

参数解释

  • 其余登陆端的设施号能够在onloginportschange回调里获取, 参谋登陆端对象

/**

客户关系托管

SDK 提供了顾客关系托管, 富含黑名单和静音列表

*  打消全数本地客商音讯的缓存。

黑名单

  • 假设叁个客商被插足了黑名单, 那么就不再会接到此客户发送的音讯
  • 假定二个顾客被从黑名单移除, 那么会再度接收此客商发送的音讯

*/

静音列表

  • SDK只担负爱戴静音列表, 具体根据静音列表要开展的操作由开拓者决定

- (void)clearUserInfoCache;

起初化参数

  • 此处的参数并非具有的开端化参数, 请查阅初始化 SDK, 以至别的章节的最早化参数
  • 初始化SDK
  • 多端登入初步化参数
  • 客商关系带头化参数
  • 亲密的朋友关系开始化参数
  • 客商名片带头化参数
  • 群组开头化参数
  • 会话初叶化参数
  • 消息开首化参数
  • 系统通报开端化参数
  • 联机到位
  • 完整的发轫化代码

演示代码

var nim = NIM.getInstance({
onblacklist: onBlacklist,
onsyncmarkinblacklist: onMarkInBlacklist,
onmutelist: onMutelist,
onsyncmarkinmutelist: onMarkInMutelist
});
function onBlacklist(blacklist) {
console.log('收到黑名单', blacklist);
data.blacklist = nim.mergeRelations(data.blacklist, blacklist);
data.blacklist = nim.cutRelations(data.blacklist, blacklist.invalid);
refreshBlacklistUI();
}
function onMarkInBlacklist(obj) {
console.log(obj);
console.log(obj.account + '被你' + (obj.isAdd ? '加入' : '移除') + '黑名单');
if (obj.isAdd) {
addToBlacklist(obj);
} else {
removeFromBlacklist(obj);
}
}
function addToBlacklist(obj) {
data.blacklist = nim.mergeRelations(data.blacklist, obj.record);
refreshBlacklistUI();
}
function removeFromBlacklist(obj) {
data.blacklist = nim.cutRelations(data.blacklist, obj.record);
refreshBlacklistUI();
}
function refreshBlacklistUI() {
// 刷新界面
}
function onMutelist(mutelist) {
console.log('收到静音列表', mutelist);
data.mutelist = nim.mergeRelations(data.mutelist, mutelist);
data.mutelist = nim.cutRelations(data.mutelist, mutelist.invalid);
refreshMutelistUI();
}
function onMarkInMutelist(obj) {
console.log(obj);
console.log(obj.account + '被你' + (obj.isAdd ? '加入' : '移除') + '静音列表');
if (obj.isAdd) {
addToMutelist(obj);
} else {
removeFromMutelist(obj);
}
}
function addToMutelist(obj) {
data.mutelist = nim.mergeRelations(data.mutelist, obj.record);
refreshMutelistUI();
}
function removeFromMutelist(obj) {
data.mutelist = nim.cutRelations(data.mutelist, obj.record);
refreshMutelistUI();
}
function refreshMutelistUI() {
// 刷新界面
}

参数解释

  • onblacklist: 同步黑名单的回调, 会传入黑名单列表blacklist
  • blacklist的属性invalid含蓄被删去的黑名单列表
  • 此回调是增量回调, 能够调用nim.mergeRelations和nim.cutRelations来统朝气蓬勃数据
  • onsyncmarkinblacklist: 当前登录客商在其余端步入黑名单/从黑名单移除后的回调, 会传入一个参数, 包涵多少个字段
  • account: 要步向黑名单/从黑名单移除的账号
  • isAdd: true代表参与黑名单, false表示从黑名单移除
  • reocrd, 拼装好的靶子
  • onmutelist: 同步静音列表的回调, 会传入静音列表mutelist
  • mutelist的属性invalid包罗被删除的静音列表
  • 此回调是增量回调, 能够调用nim.mergeRelations和nim.cutRelations来统风华正茂数据
  • onsyncmarkinmutelist: 当前登入顾客在其余端步向静音列表/从静音列表移除后的回调, 会传入三个参数, 满含八个字段
  • account: 要投入静音列表/从静音列表移除的账号
  • isAdd: true意味着加入静音列表, false代表从静音列表移除
  • reocrd, 拼装好的目的

/**

参与黑名单/从黑名单移除

  • 此接口能够变成以下多少个效果与利益, 通过参数isAdd来调节实际上的效果
  • isAddtrue时, 会将account加盟黑名单
  • 设若三个客户被参与了黑名单, 那么就不再会接到此客商发送的音讯
  • isAddfalse时, 会将account从黑名单移除
  • 假如三个客户被从黑名单移除, 那么会再也吸收此客户发送的新闻
  • 各类功效SDK都提供了相应的独立接口
nim.markInBlacklist({
account: 'account',
// `true`表示加入黑名单, `false`表示从黑名单移除
isAdd: true,
done: markInBlacklistDone
});
function markInBlacklistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('将' + obj.account + (isAdd ? '加入黑名单' : '从黑名单移除') + (!error?'成功':'失败'));
if (!error) {
onMarkInBlacklist(obj);
}
}

*  清除全数位置群组音讯的缓存。

步入黑名单

  • 假使一个用户被到场了黑名单, 那么就不再会接受此顾客发送的消息
  • SDK内部调用nim.markInBlacklist来达成实际工作
nim.addToBlacklist({
account: 'account',
done: addToBlacklistDone
});
function addToBlacklistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('加入黑名单' + (!error?'成功':'失败'));
if (!error) {
addToBlacklist(obj);
}
}

*/

从黑名单移除

  • 意气风发经三个顾客被从黑名单移除, 那么会重新采纳此客户发送的消息
  • SDK内部调用nim.markInBlacklist来落成实际职业
nim.removeFromBlacklist({
account: 'account',
done: removeFromBlacklistDone
});
function removeFromBlacklistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('从黑名单移除' + (!error?'成功':'失败'));
if (!error) {
removeFromBlacklist(obj);
}
}

- (void)clearGroupInfoCache;

参加静音列表/从静音列表移除

  • 此接口能够做到以下七个功效, 通过参数isAdd来调节其实的功用
  • isAddtrue时, 会将account加盟静音列表
  • isAddfalse时, 会将account从静音列表移除
  • 各样作用SDK都提供了相应的独门接口
nim.markInMutelist({
account: 'account',
// `true`表示加入静音列表, `false`表示从静音列表移除
isAdd: 'true',
done: markInMutelistDone
});
function markInMutelistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('将' + obj.account + (isAdd ? '加入静音列表' : '从静音列表移除') + (!error?'成功':'失败'));
if (!error) {
onMarkInMutelist(obj);
}
}

客商音讯的有关接口已经提供,具体逻辑达成每一种开采者都是各有己见,不再赘述。

参与静音列表

  • SDK只负责尊敬静音列表, 具体要依赖静音列表进行的操作由开垦者决定
  • SDK内部调用nim.markInMutelist来产生实际职业
nim.addToMutelist({
account: 'account',
done: addToMutelistDone
});
function addToMutelistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('加入静音列表' + (!error?'成功':'失败'));
if (!error) {
addToMutelist(obj);
}
}

转自融云

从静音列表移除

  • SDK只担当维护静音列表, 具体要根据静音列表举办的操作由开采者决定
  • SDK内部调用nim.markInMutelist来成功实际专门的职业
nim.removeFromMutelist({
account: 'account',
done: removeFromMutelistDone
});
function removeFromMutelistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('从静音列表移除' + (!error?'成功':'失败'));
if (!error) {
removeFromMutelist(obj);
}
}

获得黑名单和静音列表

  • 万蓬蓬勃勃开辟者在初始化SDK的时候设置了syncRelationsfalse, 那么就收不到onblacklistonmutelist回调, 能够调用此接口来获得黑名单和静音列表。
nim.getRelations({
done: getRelationsDone
});
function getRelationsDone(error, obj) {
console.log('获取静音列表' + (!error?'成功':'失败'), error, obj);
if (!error) {
onBlacklist(obj.blacklist);
onMutelist(obj.mutelist);
}
}

知音关系托管

  • SDK 提供好友关系托管

知音关系初阶化参数

  • 此间的参数并非兼顾的初叶化参数, 请查阅初始化 SDK, 以至其余章节的带头化参数
  • 初始化SDK
  • 多端登入带头化参数
  • 客户关系起首化参数
  • 好朋友关系最先化参数
  • 客户名片初叶化参数
  • 群组发轫化参数
  • 会话初阶化参数
  • 消息初叶化参数
  • 系统通报早先化参数
  • 联机到位
  • 完整的伊始化代码
  • 请参考管理种类通报中间的跟亲密的朋友相关的逻辑

示范代码

var nim = NIM.getInstance({
onfriends: onFriends,
onsyncfriendaction: onSyncFriendAction
});
function onFriends(friends) {
console.log('收到好友列表', friends);
data.friends = nim.mergeFriends(data.friends, friends);
data.friends = nim.cutFriends(data.friends, friends.invalid);
refreshFriendsUI();
}
function onSyncFriendAction(obj) {
console.log(obj);
switch (obj.type) {
case 'addFriend':
console.log('你在其它端直接加了一个好友' + obj.account + ', 附言' + obj.ps);
onAddFriend(obj.friend);
break;
case 'applyFriend':
console.log('你在其它端申请加了一个好友' + obj.account + ', 附言' + obj.ps);
break;
case 'passFriendApply':
console.log('你在其它端通过了一个好友申请' + obj.account + ', 附言' + obj.ps);
onAddFriend(obj.friend);
break;
case 'rejectFriendApply':
console.log('你在其它端拒绝了一个好友申请' + obj.account + ', 附言' + obj.ps);
break;
case 'deleteFriend':
console.log('你在其它端删了一个好友' + obj.account);
onDeleteFriend(obj.account);
break;
case 'updateFriend':
console.log('你在其它端更新了一个好友', obj.friend);
onUpdateFriend(obj.friend);
break;
}
}
function onAddFriend(friend) {
data.friends = nim.mergeFriends(data.friends, friend);
refreshFriendsUI();
}
function onDeleteFriend(account) {
data.friends = nim.cutFriendsByAccounts(data.friends, account);
refreshFriendsUI();
}
function onUpdateFriend(friend) {
data.friends = nim.mergeFriends(data.friends, friend);
refreshFriendsUI();
}
function refreshFriendsUI() {
// 刷新界面
}

参数解释

  • onfriends, 同步好朋友列表的回调, 会传入好友列表friends
  • friends的脾气invalid包括被删去的相守列表
  • 此回调是增量回调, 能够调用nim.mergeFriends和nim.cutFriends来归拢数据
  • onsyncfriendaction, 当前报到客商在别的端实行好朋友相关的操作后的回调
  • 操作蕴涵
  • 直接加为基友
  • 报名加为老铁
  • 透过好朋友申请
  • 推却好朋友申请
  • 剔除老铁
  • 履新基友
  • 此回调会抽出多少个参数obj, 它有多个字段type的值为操作的门类, 具体品种如下:
  • 'addFriend' (直接加为老铁卡塔尔国, 那个时候obj的字段如下:
  • account的值为被直接加为很好的朋友的账号
  • friend为被直接加为亲密的朋友的知音对象
  • ps为附言
  • 'applyFriend' (申请加为基友卡塔尔, 这时obj的字段如下:
  • account的值为被提请加为好朋友的账号
  • ps为附言
  • 'passFriendApply' (通过基友申请卡塔尔, 当时obj的字段如下:
  • account的值为被通过老铁申请的账号
  • friend为被通过好友申请的好朋友对象
  • ps为附言
  • 'rejectFriendApply' (推却好朋友申请卡塔尔, 当时obj的字段如下:
  • account的值为被推却好朋友申请的账号
  • ps为附言
  • 'deleteFriend' (删除亲密的朋友卡塔尔(قطر‎, 这个时候obj的字段如下:
  • account的值为被删去好朋友的账号
  • 'updateFriend' (更新好友State of Qatar, 这时obj的字段如下:
  • friend的值为被更新的老铁对象
  • 能够调用nim.mergeFriends和nim.cutFriendsByAccounts来合并数据

知音对象

知音对象有以下字段:

  • account: 账号
  • alias: 昵称
  • custom: 扩张字段, 开荒者能够活动扩大, 提出封装成JSON格式字符串
  • createTime: 成为亲密的朋友的年月
  • updateTime: 更新时间

直白加为好友

  • 向来加有些客户为很好的朋友后, 对方无需认同, 直接成为当下登入顾客的知心人
  • ps: 附言, 选填, 开拓者也可以应用JSON格式的字符串来扩充此内容
  • 对方会吸收一条项目为'addFriend'的系统通报, 此类系统通报的from字段的值为申请方的帐号, to字段的值为采用方的账号。
nim.addFriend({
account: 'account',
ps: 'ps',
done: addFriendDone
});
function addFriendDone(error, obj) {
console.log(error);
console.log(obj);
console.log('直接加为好友' + (!error?'成功':'失败'));
if (!error) {
onAddFriend(obj.friend);
}
}

报名加为死党

  • 申请加某个客户为好朋友后, 对方会选用一条项目为'applyFriend'的系统通报, 此类系统通报的from字段的值为申请方的帐号, to字段的值为选择方的账号, 顾客在吸收接纳老铁申请后, 能够采用经过或许拒绝亲密的朋友申请。
  • 如果通过好朋友申请, 那么申请方会收到一条项目为'passFriendApply'的系统通报, 此类系统通报的from字段的值为经过方的帐号, to字段的值为申请方的账号。
  • 如果不容基友申请, 那么申请方会收到一条项目为'rejectFriendApply'的系统通报, 此类系统通报的from字段的值为谢绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开采者也能够接纳JSON格式的字符串来扩张此内容
nim.applyFriend({
account: 'account',
ps: 'ps',
done: applyFriendDone
});
function applyFriendDone(error, obj) {
console.log(error);
console.log(obj);
console.log('申请加为好友' + (!error?'成功':'失败'));
}

经过基友申请

  • 申请加某些顾客为亲密的朋友后, 对方会接纳一条项目为'applyFriend'的系统通报, 此类系统通报的from字段的值为申请方的帐号, to字段的值为选用方的账号, 客户在选拔好朋友申请后, 能够挑选通过可能谢绝亲密的朋友申请。
  • 如果因此基友申请, 那么申请方会收到一条项目为'passFriendApply'的系统通报, 此类系统通报的from字段的值为经过方的帐号, to字段的值为申请方的账号。
  • 如果闭门羹好朋友申请, 那么申请方会收到一条项目为'rejectFriendApply'的系统通报, 此类系统通报的from字段的值为屏绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开荒者也足以应用JSON格式的字符串来增加此内容
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.passFriendApply({
idServer: sysMsg.idServer,
account: 'account',
ps: 'ps',
done: passFriendApplyDone
});
function passFriendApplyDone(error, obj) {
console.log(error);
console.log(obj);
console.log('通过好友申请' + (!error?'成功':'失败'));
if (!error) {
onAddFriend(obj.friend);
}
}

拒却亲密的朋友申请

  • 申请加某些客户为老铁后, 对方会收取一条项目为'applyFriend'的系统通报, 此类系统通报的from字段的值为申请方的帐号, to字段的值为接纳方的账号, 客商在收受亲密的朋友申请后, 能够接纳经过大概屏绝基友申请。
  • 如果经过基友申请, 那么申请方会收到一条项目为'passFriendApply'的系统通报, 此类系统通报的from字段的值为通过方的帐号, to字段的值为申请方的账号。
  • 如果驳倒亲密的朋友申请, 那么申请方会收到一条项目为'rejectFriendApply'的系统通报, 此类系统通报的from字段的值为回绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开采者也得以使用JSON格式的字符串来扩张此内容
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectFriendApply({
idServer: sysMsg.idServer,
account: 'account',
ps: 'ps',
done: rejectFriendApplyDone
});
function rejectFriendApplyDone(error, obj) {
console.log(error);
console.log(obj);
console.log('拒绝好友申请' + (!error?'成功':'失败'));
}

去除老铁

  • 删去老铁后, 被去除的人会收下一条项目为'deleteFriend'的系统通报, 此类系统通报的from字段的值为删除方的帐号, to字段的值为被删除方的账号。
nim.deleteFriend({
account: 'account',
done: deleteFriendDone
});
function deleteFriendDone(error, obj) {
console.log(error);
console.log(obj);
console.log('删除好友' + (!error?'成功':'失败'));
if (!error) {
onDeleteFriend(obj.account);
}
}

履新亲密的朋友

  • 开辟者能够用此接口来更新基友的备注
  • 开拓者也足以动用JSON格式的扩大字段来开展扩充
nim.updateFriend({
account: 'account',
alias: 'alias',
custom: 'custom',
done: updateFriendDone
});
function updateFriendDone(error, obj) {
console.log(error);
console.log(obj);
console.log('更新好友' + (!error?'成功':'失败'));
if (!error) {
onUpdateFriend(obj);
}
}

获取亲密的朋友列表

  • 如若开辟者在初始化SDK的时候设置了syncFriendsfalse, 那么就收不到onfriends回调, 能够调用此接口来得到好友列表。
nim.getFriends({
done: getFriendsDone
});
function getFriendsDone(error, friends) {
console.log('获取好友列表' + (!error?'成功':'失败'), error, friends);
if (!error) {
onFriends(friends);
}
}

用客商名片托管

SDK 提供顾客名片托管

客户名片早先化参数

  • 那边的参数实际不是具有的开始化参数, 请查阅初始化 SDK, 以致别的章节的初始化参数
  • 初始化SDK
  • 多端登入伊始化参数
  • 客户关系领头化参数
  • 老铁关系开端化参数
  • 顾客名片最先化参数
  • 群组初阶化参数
  • 会话伊始化参数
  • 消息伊始化参数
  • 系统通报开首化参数
  • 手拉手到位
  • 全体的初叶化代码

演示代码

var nim = NIM.getInstance({
onmyinfo: onMyInfo,
onupdatemyinfo: onUpdateMyInfo,
onusers: onUsers,
onupdateuser: onUpdateUser
});
function onMyInfo(user) {
console.log('收到我的名片', user);
data.myInfo = user;
updateMyInfoUI();
}
function onUpdateMyInfo(user) {
console.log('我的名片更新了', user);
data.myInfo = NIM.util.merge(data.myInfo, user);
updateMyInfoUI();
}
function updateMyInfoUI() {
// 刷新界面
}
function onUsers(users) {
console.log('收到用户名片列表', users);
data.users = nim.mergeUsers(data.users, users);
}
function onUpdateUser(user) {
console.log('用户名片更新了', user);
data.users = nim.mergeUsers(data.users, user);
}

参数解释

  • onmyinfo: 同步登入顾客名片的回调, 会传入客商名片
  • onupdatemyinfo: 当前报到顾客在此外端纠正自身的私家名片之后的回调, 会传入客商著名影片
  • onusers: 同步好朋友客户名片的回调, 会传入客户名片数组
  • 此回调是增量回调, 能够调用nim.mergeUsers来合併数据
  • onupdateuser: 客户著名影片更新后的回调, 会传入客户名片,请参考客户名片更新机会

客户名片对象

顾客名片对象有以下字段:

  • account: 账号
  • nick: 昵称
  • avatar: 头像
  • sign: 签名
  • gender: 性别
  • email: 邮箱
  • birth: 生日
  • tel: 电话号码
  • custom: 扩张字段
  • 引入应用JSON格式营造, 非JSON格式的话, Web端会正常选拔, 然而会被其余端甩掉
  • createTime: 创设时间
  • updateTime: 更新时间

性别

  • 'unknown' (未知)
  • 'male' (男)
  • 'female' (女)

更新本身的名片

nim.updateMyInfo({
nick: 'newNick',
avatar: 'http://newAvatar',
sign: 'newSign',
gender: 'male',
email: 'new@email.com',
birth: '1900-01-01',
tel: '13523578129',
custom: '{type: "newCustom", value: "new"}',
done: updateMyInfoDone
});
function updateMyInfoDone(error, user) {
console.log('更新我的名片' + (!error?'成功':'失败'));
console.log(error);
console.log(user);
if (!error) {
onUpdateMyInfo(user);
}
}

客商名片更新机会

  • 顾客名片除本人之外,不保险别的客商名片实时更新,其余客商著名影片更新机遇为
  • 收下此顾客发来的消息
  • 老是同步会同步亲密的朋友对应的客户名片
  • 万黄金年代想手动刷新客户名片,请参见获取客户名片和拿到顾客名片数组

取得顾客名片

  • 请参考顾客名片更新机遇
  • 能够流传参数sync=true来免强从服务器获取最新的数据
nim.getUser({
account: 'account',
done: getUserDone
});
function getUserDone(error, user) {
console.log(error);
console.log(user);
console.log('获取用户名片' + (!error?'成功':'失败'));
if (!error) {
onUsers(user);
}
}

获取客商名片数组

  • 请参考客户著名影片更新时机
  • 能够流传参数sync=true来强逼从服务器获取最新的数量
  • 每便最多 150 个
nim.getUsers({
accounts: ['account1', 'account2'],
done: getUsersDone
});
function getUsersDone(error, users) {
console.log(error);
console.log(users);
console.log('获取用户名片数组' + (!error?'成功':'失败'));
if (!error) {
onUsers(users);
}
}

郑重声明:本文版权归新匍京a奥门-最全网站手机版app官方下载所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。