账号集成与登录
更新时间: 2023/07/21 06:56:54
帐号集成与登录
- App 在用户注册时,由 App Server(App自己的服务器)通过创建帐号的接口向网易云信 Web Server 发起创建帐号的请求。具体参见服务端API接口:注册云信 IM 账号
- 帐号创建成功后,网易云信 Web Server 会返回该帐号的 token 等信息,App Server 要负责保存 token 信息
- App 发起登录请求时,先走自有的登录验证逻辑,如帐号密码验证
- 验证成功后,App Server 将该用户对应的 token 返回给 App 客户端,客户端负责保存 token
- 当 App 需要调用网易云信的IM服务时,需要先进行 token 验证,以登录 IM 服务
- token 验证成功后,登录 IM 服务成功,即可调用 SDK 的相关接口进行 IM 消息服务
使用网易云信 IM 服务时,App 帐号和网易云信 ID(account id)是彼此独立的,account id 只用于 IM 功能的鉴权,和App本身的用户信息没有任何关系。理解这一点非常重要。一般我们推荐 App 用户帐号
、密码
和网易云信登录 IM 使用的 account id
、token
是完全不一致的,后者不由终端用户创建,而是应用服务器分配,以保证其安全性。
手动登录和自动登录
登录分为手动登录和自动登录两种模式,这两种模式的区别主要在于:
- SDK 是否会接管登录失败后的处理
- 服务器是否会验证当前登录设备的安全性
第一点,SDK 认为手动登录即是终端用户发起登录的流程,那么在登录失败后(如网络情况不佳,密码错误)SDK 会触发相应回调,并停止重连操作,等待用户再次发起登录操作。而自动登录则会在登录失败后仍旧尝试重连,直到登录成功为止(密码错误等情况除外)。 第二点,服务器为了保障当前用户的安全性,在登录时会根据当前登录是否是自动登录进行检查设备唯一性的检查,如果当前登录为自动登录,且当前登录设备不是上一次登录设备,则会自动禁止其登录,以保证安全性。当然你也可以设置自动登录为强制登录,以忽略安全性检查。这种做法比较适合非 IM 产品延迟加载通讯模块的场景:通过服务器下发的正确云信 ID 直接进行自动登录,无需关心任何登录出错的情况,简单方便。
特别的,如您选择自动登录,当您的应用在后台被唤起时,会计算为1次登录行为,计入日活统计作为计费依据。
断线重连
一旦登录成功后(或者调用过自动登录),IM SDK 将接管所有的重连情况:在网络正常的情况下不停重试重连直到正常登录为止,并不需要做额外的登录操作(聊天室同理)。
产品形态与登录策略
接入网易云信IM服务的产品大致分为两种形态:
- IM 产品,通讯作为其核心模块,典型例子:微信,云信,网络直播相关的 App
- 非 IM 产品,通讯只是其附带模块,典型例子:各种有私信模块的 App
对于 IM 产品,由于通讯能力是核心能力,如果云信无法登录成功则整个 App 无法正常表现,所以推荐在执行业务逻辑前,首先完成应用服务器和云信服务器的登录。只有应用服务器和云信服务器都登录成功才认为整个登录完成。 而对于非 IM 产品而言,通讯能力是可以在登录应用服务器成功后延迟加载:登录成功拿到服务器下发的云信 ID 和 token 后进行自动登录即可。
用户控制台帐号管理
如果您暂时只需进行快速测试,可以在用户控制台,通过「帐号管理」功能快速创建、管理帐号,而无需再通过调用服务端 API 进行帐号创建。
需要注意的是,目前通过 server 端接口注册的帐号不会出现在控制台的帐号列表中。这么做的原因是:
-
管理后台提供的用户列表只是部分用户列表,是为了方便开发者在接入过程中,在没有服务端开发的情况下,可以快速的进行客户端集成而提供的入口。用户可以在管理后台上快速的创建测试用户,并在客户端上登录测试;
-
接口创建的用户在管理后台不显示,是为了保护用户的隐私及帐号安全,以免出现对用户进行了不当的禁用或其他误操作。
已有存量帐号集成
对于已经存在大量用户帐号的应用,若需要接入网易云信 IM 服务,我们推荐遵从「按需创建」的原则。
考虑到存量帐号中可能存在相当比例的僵尸用户或非活跃用户,在迁入网易云信时直接全量导入对您是一种不必须要的开销。开发者可以在用户第一次触发使用网易云信的 IM 行为时检查该用户的网易云信是否创建了 account id,如未创建则遵循帐号创建流程,在后台自动创建再登录,这种方式会使您的用户只有在必要的时候才会创建网易云信的帐号,同时在网易云信中创建的用户都是有效的活跃用户。
常见问题
怎么创建用户?
测试应用可以在注册开发者帐号后登录管理后台创建测试用户,也可以参照开发手册中Server文档的创建账号接口来创建用户。线上应用只能通过接口创建用户,可查看接口说明。
为什么我不能通过客户端sdk创建账号,必须要通过服务端创建?
网易云信的账号体系和应用的账号体系是一个业务绑定的关系,通过应用服务器才能创建账号可以有效控制账号的创建行为,任何应用的客户端都存在被破解的风险,如果直接通过客户端就可以创建网易云信账号可能会使您的应用出现被盗刷账号的情况(可能友商提供类似的客户端接口,使您在开发时节省了几行代码,但是为您的应用安全埋下了风险的种子);
网易云信的账号能不能删除,account id可不可以就是我业务系统的账号?
网易云信的账号是不允许删除的,但是如果您不想使用这个账号,可以通过服务端接口将账号禁用。我们不禁止开发者直接将业务系统的uid或account作为网易云信的account id来注册,但是我们不推荐这么做。我们推荐开发者在创建网易云信账号时使用随机字串等与应用业务无强关联的字串作为网易云信account id,再在应用自己的服务器端维护业务uid与网易云信account id的关联关系。
- 这么做的好处是:
- 有效保护业务方的账号体系,不会直接将用户的account等暴露到网易云信服务中,尽管我们对业务方存储在网易云信的数据采用安全可靠的保护措施,不存在泄露风险,但是作为有态度的服务提供方,我们还是推荐你们也适当保护自己的数据;
- 如果业务方希望删除网易云信账号,只需要将绑定关系解除即可,如果业务方希望重置一个账号在网易云信中的状态,也只需要解除绑定,新建网易云信account id重新绑定即可。
我通过server端接口注册的账号会不会出现在我的管理后台呢?
通过server端注册的帐号不会出现在管理后台。
- 这么做的原因是:
- 管理后台提供的用户列表只是部分用户列表,是为了方便开发者在接入过程中,在没有服务端开发的情况下,可以快速的进行客户端集成而提供的入口。用户可以在管理后台上快速的创建测试用户,并在客户端上登录测试;
- 接口创建的用户在管理后台不显示,是为了保护用户的隐私及帐号安全。以免出现误操作,对用户进行了不当的禁用或其他操作。