常见问题
更新时间: 2024/03/14 18:45:31
服务端
服务器端能支撑多少在线用户?产品的性能怎么样?
网易云信是一个提供高效可靠通信云服务的平台,支持上亿用户量级的产品,系统架构保证弹性可扩展,并支持接入产品动态扩容。
关于我们的数据在网易云信上是否安全?
在网易通信上数据的传输和存储均有私有协议加密,存储的数据安全可靠。
我的用户都在国外,请问访问速度怎么样?
在国外的用户可以通过我们在AWS的云主机连通服务,网易云信在国外多地均有部署服务器,服务连通时优先选择最近的服务器以保证访问速度。
登录中的token和我的帐号密码是什么关系,如何维护token?
token是产品应用与网易云信平台鉴权的凭证,帐号密码则属于第三方产品应用帐号体系的范畴,两者之间存在的映射关系需要由应用的后台服务维护;我们推荐的做法是应用在用户第一次接入网易云信平台时通过后台接口为用户创建帐号和token,并将该组帐号和token与应用的帐号体系关联;后续访问网易云信平台时均需要用到该token,token的更新可以通过网易云信的服务器接口实现,更新策略可以由应用按照自己的安全策略决定。
为什么不能通过客户端SDK创建账号,必须要通过服务端创建?
网易云信的账号体系和应用的账号体系是一个业务绑定的关系,创建账号在应用服务器进行可以有效控制账号的创建行为,任何应用的客户端都存在被破解的风险,如果直接通过客户端就可以创建网易云信账号可能会使您的应用出现被盗刷账号的情况。可能友商提供类似的客户端接口,使您在开发的时候节省了几行代码,但是为您的应用安全埋下了风险的种子。
网易云信的账号能不能删除,accid可不可以就是我业务系统的账号?
网易云信的账号是不允许删除的,但是如果您不想使用这个账号,可以通过云信服务端接口将账号禁用。我们不禁止开发者直接将业务系统的uid或account作为网易云信的accid来注册,但是我们不推荐这么做。我们推荐开发者在创建网易云信账号时使用随机字串等与应用业务无强关联的字串作为网易云信accid,然后在自己的应用服务器端维护业务uid与网易云信accid的关联关系。
这么做的好处是:
- 有效保护业务方的账号体系,不会直接将用户的account等暴露到网易云信服务中,尽管我们对业务方存储在网易云信的数据采用安全可靠的保护措施,不存在泄露风险,但是作为有态度的服务提供方,我们还是推荐用户也适当保护自己的数据;
- 如果业务方希望删除网易云信账号,只需要将绑定关系解除即可,如果业务方希望重置一个账号在网易云信中的状态,也只需要解除绑定,新建网易云信accid重新绑定即可。
封禁云信账号具体请参见封禁账号。
我有上百万的存量用户账号,你们能提供批量导账号的方法吗?
网易云信的收费方式取决于应用的活跃用户,对于任何应用的账号接入,我们推荐遵从“按需创建”的原则。您的上百万账号中可能存在相当比例的僵尸用户或非活跃用户,在迁入网易云信时直接全量导入对您是一种不必须要的开销。您可以在用户第一次触发使用网易云信的IM行为时检查该用户的网易云信是否创建了accid,如未创建则后台自动创建再登录,这种方式会使您的用户只有在必要的时候才会创建网易云信的账号,同时在网易云信中创建的用户都是有效的活跃用户。虽然这种方式会让您在网易云信中的注册用户量下降,但是帮你节省了支付给网易云信的费用,作为有态度的服务提供方,我们还是将最佳实践方式推荐给您。
我通过服务器端接口注册的账号会不会出现在我的管理后台呢?
通过服务器端注册的帐号不会出现在管理后台。
这么做的原因是:
- 管理后台提供的用户列表只是部分用户列表,是为了方便开发者在接入过程中,在没有服务端开发的情况下,可以快速的进行客户端集成而提供的入口。用户可以在管理后台上快速的创建测试用户,并在客户端上登录测试;
- 接口创建的用户在管理后台不显示,是为了保护用户的隐私及帐号安全。以免出现误操作,对用户进行了不当的禁用或其他操作。
服务端端发消息例子里的md5是什么?
这个md5是根据文件内容,如图片、语音等,用Md5加密算法计算。
接入
如何接入你们的平台?集成网易云信的大概流程是怎样?
接入我们的平台只需要四个步骤即可, 第一步,注册成为网易网易云信开发者 第二步,创建应用 第三步,用户体系集成 第四步,下载SDK并集成 详细可参见新手接入。
用网易云信开发即时通讯是必须要用你们的服务器和数据库吗?
不需要。网易网易云信的集成,通过在客户端集成SDK的形式来连接网易网易云信的云端服务。应用本身的业务逻辑和实际部署,还是跟传统开发完全一样,由开发团队自己维护部署即可。
App Key从哪获得?
注册并激活网易云信开发者帐号后,登录网易云信管理后台,创建应用后在“APP Key”页面得到。
怎么创建用户?
测试应用可以在注册开发者帐号后登录管理后台创建测试用户,也可以参照服务端文档中的创建账号接口来创建用户。线上应用只能通过接口创建用户,可查看[接口说明](/docs/TM5MzM5Njk/Dc2NTM1NzI。
多端互踢的机制是什么样?什么时候会收到被踢的通知?
网易云信支持最基本的三种互踢策略:
- 每个平台只能有一个端在线,平台分桌面端(PC+WEB)和移动端(IOS+AOS);
- 同一时间最多只能一个客户端在线(即所有端互斥);
- 所有端都可以同时在线,但是最多同时在线客户端数不能超过10个,超过时最早登录的端会被踢下线;在客户端触发互踢策略时被踢端会收到被踢通知;如应用希望实现自己的互踢策略,网易云信也提供了主动踢自己其他在线端的接口,可以由应用按需调用,此时被踢的客户端也会收到通知。
数据加密和压缩等问题
PC: 与服务器通讯的和本地缓存的所有文本数据都有压缩和加密。 iOS: 本地聊天数据只有表名(即会话名)加密,图片消息默认压缩为jpeg,压缩质量参数0.5(这个可以上层自由配置),视频音频均不压缩。和服务器通信的文本数据都有压缩和加密。 WEB: 只存储文本数据,不存储图片、音视频(所以就没有数据压缩)。数据不加密,浏览器自己有同源限制(安全限制)。 Android: Android本地聊天数据不加密,图片消息(图片与文件一样上传)不压缩,视频音频不压缩。和服务器通信的文本数据都有压缩和加密。 各端均不限制收发消息频率
如何集成网易云信账号体系
你的用户在客户端注册到您的服务器,您的服务器保存了这个账号,再调用我们服务端注册网易云信IM账号的接口生成网易云信IM账号和token,这个时候将用户注册的账号和网易云信IM账号绑定,用户登录的时候就先登录他注册的账号,到您的服务器拿到绑定的网易云信IM账号和token去客户端登录网易云信。这里有两套账户体系
iOS版SDK
iOS SDK 兼容 ATS
前言
随着苹果在 2017.1.1
推出的新政,App
将不在允许直接使用 Allow Arbitrary Loads = YES
对所有域名进行规避的方案。基于此,网易云信 iOS SDK
也做了相应的兼容处理。
我们做了什么
网易云信 SDK
主要提供 IM
相关的功能,其内部实现为基于 TCP
自主加密的协议,这方面并不需要做任何适配工作。而为保证整个 IM
功能的完整性,网易云信也内置了文件传输的功能,包括但不限于:消息内附件,用户头像,群主头像等信息。在旧版本,这些文件都是以 HTTP
请求的方式上传至服务器。这显然不符合苹果的规定。所以在新版本,我们文件传输进行了升级,上传下载一律采用 HTTPS
进行传输。
上层开发者需要做什么
在我们做完上面更新后,上层开发者可以直接使用我们的新 iOS SDK
,而不需要再 plist
中进行任何 ATS
相关的设置。
但是网易云信是个多端产品,虽然 iOS
能够保证完全兼容 HTTPS
,但其他端仍未完全兼容 HTTPS
,从这些端收到的文件 URL
仍旧是使用 HTTP
(当然还有老版本的问题)。所以上层开发者如果有某些特殊化的使用场景,则需要自行进行兼容。
网易云信中使用到文件信息的地方包括:
- 图片消息附件
- 语音消息附件
- 视频消息附件
- 文件消息附件
- 自定义消息附件
- 用户头像
- 群头像
- 用户在聊天中的头像
前四种消息附件 iOS SDK
已经完成完全的兼容处理:自动将其他端发送文件附件 URL
从 HTTP
转换为 HTTPS
格式。
而自定义消息,由于整个类结构是由上层决定,iOS SDK
并不能智能完成这部分消息的附件 URL
格式的自动转换,需要上层用户做相应的处理。在 idHTTP
转为 HTTPS
的接口:convertHttpToHttps:,在需要下载该文件的地方,先进行转换即可。具体参考 Demo
中下载阅后即焚的实现。需要注意的是,如果某种自定义消息需要由 SDK
接管附件下载,那么需要在 NIMCsutomAttachment
协议 attachmentURLStringForDownloading
处理 HTTP
到 HTTPS
的转换过程。
后三种头像信息,如果上层开发直接使用网易云信头像,那么不需要做任何处理。如果使用自己服务器的文件地址,那么需要设置 NIMSDKCofig
中的 enableHttpsForInfo
为 NO
。
集成iOS NIM SDK的最低要求?
SDK 最低支持 7.0,Xcode 版本要求 8.0 以上。
iOS Demo打开编译失败?
-
确认打开的文件是 NIM.xcworkspace;
-
确认 Xcode 版本在 8.0 以上。
集成碰到问题,如何解决?
推荐按照开发者如下顺序进行排查:
- 查看官方文档
- 对比相关功能Demo
- 咨询技术支持
SDK过大怎么办?
由于 NIM SDK 是静态库,且为了方便开发者使用,我们将armv7 i386 x86_64 arm64平台的静 态库合并成一个Fat Library,导致整个 SDK 比较大。但实际编译时会根据调用功能多少增加 ipa 文件大小,实测大约只会增加2-3M左右。
- 小贴士:开发者可以使用 lipo -info 命令来查看某个静态库是否是Fat Library。
登录失败怎么处理?
登录接口回调方法中包含错误信息,请检查[error code],常见的错误码有 :
- 408 ,即 NIMRemoteErrorCodeTimeoutError,请求超时。引起这个错误的原因往往是客户端网络状 况不良,请检查网络状况;
- 415,即 NIMRemoteErrorCodeConnectionError,连接服务器出错;
- 302 ,即 NIMRemoteErrorCodeInvalidPass,认证失败。登录的用户名和密码不匹配。请检查输入的 用户名密码是否和服务器设置的有出入。
iOS如何快速实现一个聊天窗口界面?
从头开始实现一个聊天窗口的代码量大约在 5 千行左右且有各种坑需要处理,推荐直接使用云 信中的UI库 NIMKit ,或者使用一些开源的解决方案,如JSQMessage。
APP退到后台后无法收到消息和通知?
由于 iOS 系统的限制,大部分 APP 并不能支持后台运行,所以在 APP 退到后台后几秒到几分 钟后 APP 就被挂起,无法收取任何消息。在这种情况下所有的消息和通知都是通过推送 (APNS) 来通知用户。只有在用户收到推送并打开 APP 后,SDK 才会自动重连上服务器并拉取 离线的消息和通知。
APP退到后台无法收到推送消息?
并不是接入 NIM SDK 后苹果推送 (APNS) 就会自动生效,为了使之生效,开发需要做如下配 置 :
- 制作 APNS 所需要的证书,具体参考制作推送证书p12文件;
- 上传证书到 NIM 管理后台,并设置证书名;
- APP中设置证书名;
- 客户端注册APNS,并在获取到 APNS Token时将值传给SDK 。
IOS的SDK由于缓存较大 上架时候被拒,能不能设置不同步icloud?
我们的SDK目录就是设置成默认不备份。“可以去读取下 $Documents/NIMSDK 下面的两个子目录Users和Global目录的属性,他们都是有NSURLIsExcludedFromBackupKey这个file attributes,而且都是YES”
Android版SDK
SDK初始化操作必须放在Application的onCreate中吗?
是的。因为典型情况下,网易云信的service会工作在push进程,当push进程从后台自动启动时,除了Application的onCreate,就没有其他机会去初始化SDK了。当然,如果您将网易云信的service和主UI进程放在一起,且不要求后台自动登录,那么可以在您觉得合适的地方去初始化。
想做一个@某人的效果,如何做?
-
当发送群消息@某人的时候,可以通过扩展字段带上被@的账号列表发送出去;群成员收到群消息时,查看扩展字段的@账号列表里有没有自己,如果有,则界面上做被@的提醒;
-
此外,最近会话列表项也提供扩展标签 Tag ,可以满足开发者在最近会话列表中做@提醒的需求:在监听到最新联系人有更新时,可以根据最近一条消息的,可以满足开发者在最近会话列表中做@提醒的需求:在监听到最新联系人有更新时,可以根据最近一条消息的 ID 查询出该条消息,查看扩展字段是否包含@账号列表,如果包含自己,可以在扩展标签上做一个标记,如果有新消息到来(未进入聊天界面查看时),要继续保持最近会话列表里面有@提醒,就可以参考扩展标签,做界面的上被@的提醒。
未读数怎么清零?
- 联系人的未读数信息是存放在RecentContact类中,未读数由SDK负责管理,并没有提供设置未读数的接口;
- SDK更新未读数的依据由setChattingAccount接口控制,该接口会设置当前正在聊天的对象,调用该接口后,这个聊天对象的未读数就会被置为0,同时,如果后面有该联系人的新消息到达,其未读数也不会递增。如果收到不是当前聊天对象的新消息,SDK则会将消息来源的未读数自动累加,并通过observeRecentContact观察者接口通知到UI;
- 调用setChattingAccount后SDK会认为设置对象就是聊天对象,该聊天对象的未读数会一直是0,因此,当用户退出与这个聊天对象的会话后,需要重新设置聊天对象为空;(MsgService#setChattingAccount(MSG_CHATTING_ACCOUNT_NONE, SessionTypeEnum.None))。
为什么发出自定义通知后,没有触发我的receiver?
请检查一下是否
<permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG" android:protectionLevel="signature"/>
和
<uses-permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG"/>
都添加到了manifest文件中,第一项为声明权限,第二项为声明要使用该权限,二者缺一不可。
消息发送失败,如何重发此条消息?
发消息API:sendMessage(IMMessage msg, boolean resend); 仔细看参数,后面的boolean表示重发消息。
如何判断attachment的发送状态?
def 未下载 ,跟失败一样,都可以用 downloadAttachment重新下载。
我们用自己的V7包可以么?
如果使用我们的uikit的话,那么v7包就要用我们的版本,我们的是基于v7 19的,如果用其他版本(21/23),会引起冲突。
PC版SDK
集成NIM Windows客户端SDK的最低要求?
Windows客户端 SDK是VC2010开发的,使用方式是APP开发者通过动态加载SDK DLL使用,只要在发布的应用程序中带上msvcr100.dll 和 msvcp100.dll两个运行库即可,因此对集成SDK无最低要求,建议vc版本越高越好。
Windows客户端如何使用自定义的用户数据目录?
Windows客户端 SDK本身提供用户自定义数据目录文件路径,只需用户在初始化SDK时传入绝对路径,但是,这里需要注意的是,Windows 7开始对系统盘下面的目录是有很强的权限控制的,使用不当极易导致用户数据无法正常读写,因此建议APP开发者尽量将用户数据目录放在系统本地应用数据目录下
%LOCALAPPDATA%,
WIN7即以上在系统盘C:\Users\<user name>\AppData\Local,
WIN XP/2000在C:\Documents and Settings\ <user name>\Local Settings\Application Data
具体使用方法就是在只要在初始化SDK时传入目录名字,SDK即会在系统本地应用数据目录下创建相应的文件目录作为用户数据目录。
Windows客户端的SDK 支持哪些开发语言 ?
Windows客户端 SDK开放的是C接口,因此常见的桌面开发语言都可以调用,比如C++,Java,VB,C#,Javascript,Python等。
Unity SDK
集成SDK对Unity 版本要求是什么?
Unity SDK和Demo使用Unity 5.3.1f1开发,不低于这个版本都可以集成SDK。
使用SDK有什么需要注意的问题?
SDK提供的接口都是异步接口,通过回调函数接收执行结果,在回调函数中不能直接操作UI对象,可以将结果保存起来在update函数中更新游戏,或者通过其他方式进行更新。(在Demo中提供了Loom类实现这个功能。)
开发中是否可以调试SDK功能?
网易云信Unity SDK使用非托管代码实现基本的通信能力,如线程,网络传输等,由于Visual Studio Tools for Unity插件的问题导致调试代码可能会出现问题,参考Troubleshooting and known issues
用户登录需要注意哪些问题?
只能登录一个账号,登录其他账号时必须调用Logout函数先注销已登录账号。如果多次调用Login接口会返回kNIMLocalResAPIErrorEntered
(20002)错误,表明已有账号在执行登录。在Unity Editor中运行游戏时尤其要注意这点,由于Editor使用同一个进程承载游戏,在结束运行时如果没有注销登录,后面再执行登录都会失败,SDK启动的线程未正常关闭会导致Unity进程无法正常关闭。Logout函数同样也时异步方法,必须等待函数执行完成即回调函数被触发才能再次调用登录接口。
为什么注销重新登录后一些接口的回调函数无法执行?
调用Logout
注销登录时底层会先释放已有对象然后再重新创建,导致原先设置在这些对象的回调函数已经无效,需要调用NIM.ClientAPI.RegisterSdkCallbacks
重新注册。
Web版SDK
SDK 兼容老版本浏览器吗?
目前 SDK 兼容到 IE8, IE8/IE9 使用 xhr-polling 来模拟长连接, 其它高级浏览器使用 WebSocket 建立长连接。
文件上传兼容老版本浏览器吗?
目前文件上传兼容到 IE8, IE8/IE9 使用 Iframe 上传文件, 其它高级浏览器使用 FormData 上传文件。
消息
是否支持自定义消息类型?
网易云信原生支持了文本,图片,语音,视频和地理位置等常用的消息类型;对于产品的特殊需求网易云信也提供自定义消息类型,产品可以使用自定义消息实现“阅后即焚”等特殊的消息类型。
网易云信发送的图片缩略图和原图是什么样的一个比例?
iOS:长宽等比缩放,2倍显示屏幕上,短边缩到150为止。iPhone4以上到除了plus,都是2倍屏幕 所谓的Retina,plus系列是三倍屏幕,就是说plus上会是225为止。iPhone 3gs以及以下,是一倍屏幕到75为止;
Android:在SDKOption#thumbSize中设置一个宽度,等比例缩放。一般来说是会话窗口里面图片那个气泡的宽度大小。也可以简单设置成 屏幕宽度的一半。
是否能指定不接受来自特定用户或特定群的消息?
网易云信提供基于自己的好友体系的黑名单功能。同样也提供了修改群消息通知的接口。详见如下文档: iOS消息提醒 iOS群消息提醒
消息历史记录保存多久 ,如何获取?
SDK会保存一份本地消息历史记录,并提供了删除和查询的接口,由应用自己管理。网易云信服务端提供保存服务端保存历史记录的服务。该服务占用服务端存储资源,是一项收费服务,最长可以保存3年。服务端保存的历史记录,同样提供查询接口供应用使用。
管理后台向用户(或群)发系统消息如何实现?
- 创建一个网易云信帐号专门用于发系统消息;
- 调用服务端消息服务接口中的发送普通/透传消息接口即可,详见接口说明;
- 普通消息就是常见的会在聊天窗口中出现的对话消息,透传消息的使用场景为应用业务通知(并不需要在聊天窗口出现时)。关于透传消息的概念及两者的区别,请参阅开发手册Server页面的消息服务章节。
消息长度有没有限制?
网易云信的消息长度限制为5000字符。
网易云信语音消息的音频文件和视频消息的视频文件分别是什么格式
对于语音,视频消息而言,网易云信只负责提供文件的上传和消息投递,所以音频使用任何格式都 可以。但是推荐使用网易云信提供的接口进行音频的录制和播放,因为我们提供了高清语音录制方 法,语音清晰度远超同类产品。使用网易云信提供的接口进行音频录制时限定的格式为aac。
收到视频消息后,是否能边下边播?
这取决于您使用的播放器是否支持对视频 URL 的边下边播。网易云信 SDK 尚未支持视频消息附件的边下边播功能。
网易云信如何发表情?
聊天时的表情其实就是字符串,通过一定规则的映射显示不同的图片即可。具体可以参考网易云信 Demo中的实现。
能不能限制只发送文本消息,不要发送图片和文件
可以的,这个功能在上层中可以限制,限制只发送文本消息,不能发送图片和文件消息,而且我们提供的是一个平台根据您的需要可以删减任何不需要的功能。
Demo的卸载重装消息的问题
1)每次卸载重装都会产生新的设备ID,然后登录上来,服务器会漫游100个会话(每个会话100条曾经收发的消息)过来。 2)Android这边其实并不卸载,就清理数据,但是也会重新生成一个设备ID,登录上来之后,也会收到漫游。比如说,我在Android设备上登录了,发了“hello world”,然后我去清理一把应用的数据,再去登录,服务器就去漫游“hello world”过来。 3)漫游是服务器管理的,跟客户端并没有关系,但是客户端要记得就是去系统里清理应用数据,也会漫游的,反正就是SDK的db被清空了,就会漫游过来。或者另外一种情况:用户去设置应用管理里面,可以清理掉,一个app产生的数据,这时候再登录,也会漫游的。 只要产生新的设备ID,就会有漫游。
会话列表及漫游消息详解
各端获取最近会话列表均从本地数据拿。获取的列表数量没有上限。 会影响本地数据的情况: 1、应用执行过删除会话接口。 2、换了新手机,或者清除过网易云信本地数据。 3、开启漫游的情况, 服务端会同步漫游数据到本地数据库。
漫游详情
漫游消息现在线上的配置是100个会话,每个会话最新100条,最近7天 其他细节: 1、Web高级浏览器(支持本地数据库的),也会和其他客户端一样,具有本地历史数据。
群组
群成员上限是多少,群数量上限是多少?
网易云信产品默认每个用户可以创建50个高级群,每个群最多200个成员,对于产品的特殊需求我们可以支持群数量和群容量的扩容。
服务端接口创建了群,并指定了成员,成功后查询群成员只能看到群主自己?
创建群的接口有参数“magree”表示“是否需要群成员同意”,如果你建了群只能看到自己,请首先检查这个参数,如果选择了该选项,只有在被邀请者同意之后才会出现在群成员列表中。
SDK是否提供设置群容量的接口?管理后台可以设置么?
SDK不提供该接口。管理后台暂时不可设置,后续会考虑提供。
高级群群主执行quitTeam是否会成功?是否会解散群?
高级群主执行quitTeam不会成功,不会解散群。群主要退群需要将群主权限转让给群里指定成员或直接解散群。
退群后我希望把最近联系人列表的记录也删掉,该怎么做?
删除最近联系人记录有两个接口,分别是deleteRecentContact和deleteRecentContact2,其中第一个接口以RecentContact类型作为参数,调用后不会再触发观察者通知,适合在最近联系人列表调用。第二个接口以account和sessionType作为参数,删除成功后会触发MsgServiceObserver的observeRecentContactDeleted通知。因此你可以调用第二个接口,并在最近联系人列表上添加删除事件的观察者。
聊天室
有获取聊天室管理员列表的接口吗?
目前还没有直接能获取的接口,不过建议您先获取聊天室成员之后,根据成员的memberType去检索出来成员身份。
聊天室收发消息和IM普通有什么不同吗?
聊天室消息收发接口与普通消息收发统一,在发送消息时指定会话类型为聊天室即可。会话 id 即为聊天室 id。但聊天室的消息,SDK对收到的消息是有做合并的,而其他IM消息,只有离线消息和漫游消息会从服务器批量下来。
聊天室在线人数怎么获取?
用户进入聊天室后可以通过获取聊天室信息获取聊天室内的在线人数。聊天室内的成员进出,网易云信服务器会客户端下发一条进出类型的通知类消息,客户端再根据通知类消息实时加减聊天室在线人数。