AIMPaaS作为一个PaaS产品,不提供账号体系,便于对接业务方现有的账号体系。本文介绍AIMSDK账号集成与登录功能的实现方法。

前提条件

AIMSDK登录前,需要App已完成登录。

AIMSDK的登录以App完成登录鉴权为前提,App在进行登录鉴权的过程中,App服务端会与AIMPaaS进行交互,从而获得对应的AuthToken。

登录

典型登录流程如下:

免登(本地登录)
  1. 登录准备
    1. 获取或创建DPSEngine,并调用DPSSettingService接口设置相关参数(如AppKey、AppID及设备相关信息)。
    2. 创建DPSManager。
  2. 登录

    调用DPSAuthService::Login可以触发登录,调用后会开始网络连接、自动尝试登录。

    说明 此接口仅仅是一个触发登录操作。
    • 本地登录事件通过DPSAuthListener::OnLocalLogin回调通知。
    • 登录相关的网络状态变化会通过DPSAuthListener::OnConnectionStatusChanged通知。
AIMSDK还支持离线使用和免登(本地登录)。
  • 离线使用
    说明 特殊场景时使用,可跳过。

    某些App在特殊场景下,需要不连接网络能够查看和搜索本地的会话和消息。

    • 创建DPSManager成功后,不调用DPSAuthService::Login是不会连接网络和登录的,可通过DPSManager获取相应的接口直接使用。
    • 离线使用在调用DPSAuthService::Login之后可以连接网络和自动登录。
  • 免登(本地登录)

    免等(本地登录)状态的作用是提升用户体验,在无网或网络状态不好的情况下快速进入消息界面。

    在一次登录成功后,如果没有执行退出登录的操作,在一定时间内(目前是30天左右),客户端是处于免等(本地登录)状态的,结束进程重启也是如此。

    免等(本地登录)状态可以通过DPSAuthService::IsLocalLogin查询。

Token定义与规范

  • Token定义

    AuthToken用于用户鉴权,接入方了解基本概念,根据App服务端给定的token URL,对DPSEngine的settingService作相应URL配置即可,平时无需主动获取AuthToken。

    AuthToken包含:accessToken与refreshToken两部分。accessToken有效期24h,当accessToken过期时,使用refreshToken去置换一个新的renewed accessToken。

    说明 这里的设计有安全性的考量,业务开发了解即可。

    AIMSDK获取AuthToken的时机不固定,可能是刚启动的时候,也可能是运行过程中。主动调用GetLoginToken接口会导致上一个AuthToken失效,建议App不要主动获取AuthToken(DPSSDK回调的时候会去服务端获取AuthToken),也不要缓存AuthToken。获取AuthToken前后需添加日志,方便排查问题。

  • 获取AuthToken流程
    DPSSDK在必要的时候,会向App发出请求,回调App的接口(接口在初始化的时候通过DPSSettingService::SetAuthTokenCallback设置进来),App需要对此回调接口进行响应,向AppServer请求AuthToken,AppServer通过AIMPaaS的getLoginToken接口获取AuthToken,然后返回给AIMSDK,AIMSDK拿到这个Token去AIMPaaS登录。获取AuthToken流程
    1. AIMSDK调用业务方配置的SetAuthTokenCallback向App发出鉴权请求。
    2. App与业务方服务端App Server进行通信,请求AuthToken。
    3. App Server根据对应uid向AIMPaaS请求AuthToken。
    4. AIMPaaS向App Server回传AuthToken。
    5. App Server将请求到的AuthToken回传App。
    6. App将AuthToken传递到AIMSDK,AIMSDK配置到DPSEngine的settingService中。
    7. AIMSDK拿新的AuthToken通过长连接去AIMPaaS登录。
    说明 AuthToken有相应的时效,因此绝大多数情况并不需要这样的请求过程,AIMSDK在AuthToken有效的情况下,会直接通过长连接去AIMPaaS登录。

    此外,上述的过程并不需要于接入方用户主动调用,建议不要主动获取AuthToken,也不要缓存AuthToken。

  • 自动重试

    开发者无需实现重试登录的逻辑,AIMSDK因网络断线等原因造成登录失败,会自动重试。重试策略包括网络状态变化、应用前后台切换、定时重试等。

    自动重试引起的网络状态变化会通过DPSAuthListener::OnConnectionStatusChanged回调通知App。

退出登录

调用DPSAuthService::Logout退出登录状态。

  1. 一般来说,退出登录后,应该退出IM界面。
  2. 再次进入IM界面需要重新进行登录。
  3. 退出登录后,免登(本地登录)状态会清除,不再重试登录。
  4. 退出登录返回后,应该立即退出IM界面。

强制下线

已登录的账户可能会被服务端强制下线。被强制下线会收到DPSAuthListener::OnKickout回调通知,开发者不需要在回调里调用Logout接口(AIMSDK内部已经做过处理)。OnKickout的参数包含了被踢的原因的message。

被服务端强制下线,应该立即退出IM界面。目前AIMSDK不提供强制下线接口,由业务方实现。业务方接入时,特别是多用户情况下,要注意对应的Manager。