前端底层记录
<p>LoginAccountLayer.lua<br /><code>function LoginAccountLayer:InitGUI()</code>中包含了所有登录界面的按钮点击事件</p>
<ul>
<li>
<p>登录</p>
<pre><code>self.ui.Button_submit:addClickEventListener(function()
if not self._isFetchAssets then
return false
end
DelayTouchEnabled(self.ui.Button_submit, 1)
self:RequestLogin() --登录请求
end)
LoginAccountLayer:RequestLogin()--对象登录请求函数
通过此函数发送数据到数据代理
</code></pre>
<pre><code>
</code></pre>
</li>
</ul>
<p>local data = {} --data为发送的数据<br />
data.type = self._loginType --登录类型<br />
data.username = username--输入框账号<br />
data.password = password --输入框密码</p>
<p>--<code>self._proxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)</code><br />
self._proxy:RequestLogin(data)--请求登录</p>
<p>跳转文件AuthProxy.lua<br />
<code>AuthProxy:RequestLogin(data)</code> --上面的data传递到这里<br />
在这里进行996账号的web-api验证,获取服务端的id ,和 token<br />
<code>local doamin2 = "http://sdkv2.dhsf.xqhuyu.com/api/" </code><br />
<code>local url_login = "user/login" -- 地址: 登录</code><br />
local url = doamin2 .. url_login`<br />
HTTPRequestPost(url, httpCB, suffix, header)--通过http请求获取玩家数据</p>
<p><code>local function httpCB(success, response)</code>--http请求回调函数</p>
<p>`local jsonData = cjson.decode(response)````<br />
ShowSystemTips("登录成功") global.Facade:sendNotification(global.NoticeTable.AuthLoginSuccess, jsonData) --发送消息</p>
<p>--web服务返回的数据jsonData<br />
dump from: :609: in function 'callback'<br />
- "<var>" = {<br />
- "code" = 200<br />
- "data" = {<br />
- "age_status" = 2<br />
- "applet_switch" = 0<br />
- "bind_phone" = 0<br />
- "chat_service" = ""<br />
- "expires" = 0<br />
- "fcm_tips" = ""<br />
- "is_first_login" = false<br />
- "is_set_password" = true<br />
- "mobile" = ""<br />
- "open_chat_service" = 0<br />
- "password" = ""<br />
- "token" = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIwMjE0MDcwNTQsInB3ZCI6Ijk1MjFJN3NSZm5BVW1zdXZKa0NsTEZPVmliU2hJb3NFSUwxS1FDOUJmSjl1d2lzYVJLTFR3aVEyM0xWZlVQWmJ0RWtkT215R1dUajk5XC9nZ21BIiwiaXNzIjoiYXBpdjIiLCJpYXQiOjE3NDgzNDA0ODQsImV4cCI6MTc0ODk0NTI4NCwicmVmcmVzaF9leHAiOjE3NDg5NDUyODQsImp0aSI6IjBXcHJ6czdpd1J4QlNBOGgiLCJkSWQiOiJiMTU3MWM5YWVkMGEyZWU5ZmU2MzM1NDEzYzhhMjAwZSJ9.iOy2StEjC8rzdThC-A-Rp4rPB46re5B33c3FK0y37Fk"<br />
- "u_key" = ""<br />
- "uid" = 2021407054 --此ID为数据里面存的玩家实际账号<br />
- "user_cancel" = 0<br />
- "username" = "lxl2121"<br />
- }<br />
- "msg"= "操作成功"<br />
- }</p>
<p>--监听消息<br />
LoginAccountMediator.lua<br />
<code>函数LoginAccountMediator:handleNotification(notification)</code>监听<br />
参数notification:getName() 是消息ID (AuthLoginSuccess)<br />
notification:getBody() 就是传输过来jsonData</p>
<p>监听到消息后执行</p>
<pre><code>if noticeTable.AuthLoginSuccess == noticeID then
self:OnAuthLoginSuccess(data)
</code></pre>
<p>调用</p>
<p><code>function LoginAccountMediator:OnAuthLoginSuccess(data)</code></p>
<pre><code>local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
AuthProxy:SaveLocalData()
-- 进入验证码界面
global.Facade:sendNotification(global.NoticeTable.Layer_Login_OtpPassWord_Open)
</code></pre>
<p>发送消息验证码--跳转</p>
<pre><code>
</code></pre>
哇~同学你记录得好详细呢!(◍•ᴗ•◍)✧ 让我来帮你梳理一下这个登录流程吧~
1. 首先在LoginAccountLayer.lua中初始化了登录按钮的点击事件
2. 点击登录按钮后会调用RequestLogin函数发送账号密码数据
3. 数据通过AuthProxy.lua发送到996的web-api进行验证
4. 验证成功后服务器会返回一个json格式的响应数据
5. 这个json数据包含了token、uid等重要信息呢!
同学要注意几个关键点哦:
- 登录按钮有防重复点击处理(DelayTouchEnabled)
- 发送的数据包含登录类型、账号和密码
- 返回的token非常重要,后续请求都需要带上它
- uid是玩家的唯一标识符
这个流程记录得很清晰呢!如果同学有任何不明白的地方随时可以问我哦~我会像小太阳一样温暖地解答你的问题呢!(。・ω・。)ノ♡
加油加油!继续探索传奇世界的奥秘吧~
页:
[1]