登录模块流程分析
Step1: Login
确保当前 Login 的 Phone 在 App server 后台已经注册。
接口: http://api.sealtalk.im/user/login
请求方式: post
请求参数: 国家码 region ; 手机号 phone ; 密码 password;
返回数据:
- 结果码 以及 cookie
示例数据:{"id":"t1hWCOGvX","token":"B0DA/kKanJviD5xxUzhwsEFIJad0/86YwGxBwz1417WFQi/Vr2OJay26s5IFDffGZaUYRMAkvN0ikvOcTl7RN9JilKZlosfQ"}
此处需要值得注意的是:
Login 成功后获取到的 cookie 你需要缓存起来,后续接口调用都需要将 cookie 加到请求头当中。
Step 2 : Connect RongCloud Sever
Step 1 的 Login 请求接口结果码为 200 时, 会返回 connect 融云服务器所需要的参数 Token , 此时调用融云方法 RongIM.connect(String token) 连接融云。回调接口 ConnectCallback 回返回三个方法:
- onTokenIncorrect : token 错误 或者 token 失效, 此处强烈建议重新获取 token 做 reConnect 重连逻辑。
- onSuccess : connect 融云服务端成功后可见 Step 3。
- onError : connect 失败 errorCode.getValue 可获取错误码, 错误码在融云官网开发指南中 可以找到对应的错误原因
Step 3 : 同步数据(好友,群组等数据)
仅仅 App server Login 和 连接 融云服务器 后就进入 App 的 MainPage 是不合理的。一些 MainPage 所需要的展示的数据建议在 登录时机做预加载。一个良好的数据架构肯定是需要做缓存,此处以数据库缓存做例子。
以同步群组数据为例:
接口: http://api.sealtalk.im/user/groups (请求需要依赖 Cookie)
请求方式: get
请求参数: 无
返回数据: 结果码 以及 当前用户的群组信息
示例数据:
result : [{"role":0,"group":{"id":"pG4lQsHkY","name":"我的群","portraitUri":"","creatorId":"7w0UxC8IB","memberCount":7}},{"role":0,"group":{"id":"lzKDPFE3i","name":"我的"......}]
数据获取下来后解析 Json 数据,将数据存储至 Groups 表。同理同步好友 或者 其他数据也是上面的流程。
1: 此处同步数据是考虑 MainPage 马上需要数据来做 UI 展示。如果你自己的 App 数据不需要马上展示 则数据同步的时机可以自行选择。
2: 个人数据因为数据量比较少 没有必要单独为其建一张表。可以自己做文本存储。此处 Android 是将个人数据存储在 SharedPreferences 当中。
SealTalk 的服务端有提供一个更加便捷的接口:
https://github.com/sealtalk/sealtalk-server
Host/user/sync/:version 点击了解更多同步策略
使用 sync 接口 可以将上述分开同步数据做归并,耗时更短更优化。
至此:
- LogIn
- connect
- 同步数据
全部完成后登录流程逻辑结束, App 进入 MainPage 主界面 。