c1_lua/lua/app/module/account/account_manager.lua
2023-08-28 14:12:36 +08:00

171 lines
5.5 KiB
Lua

local AccountManager = class("AccountManager", BaseModule)
function AccountManager:showBindUI()
UIManager:showUI("app/ui/game_setting/account_binding_ui")
end
function AccountManager:showDeleteUI(hideCloseBtn)
return UIManager:showUI("app/ui/game_setting/account_delete_ui", {hideCloseBtn = hideCloseBtn})
end
function AccountManager:getIsBinded()
local accountInfo = LocalData:getAccountInfo()
if accountInfo.google_id and accountInfo.google_id ~= "" then
return true
end
if accountInfo.apple_id and accountInfo.apple_id ~= "" then
return true
end
return false
end
function AccountManager:deleteAccount()
self:sendMessage(ProtoMsgType.FromMsgEnum.DeleteReq, {}, {}, self.onDeleteAccount, BIReport.ITEM_GET_TYPE.NONE)
end
function AccountManager:onDeleteAccount(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then -- 删除账号成功
local info = LocalData:getLastLoginInfo()
BIReport:postAccountDelete(info.type)
ModuleManager.LoginManager:goToLoginScene()
LocalData:saveBattleSnapshot({}) -- 清除
else
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DELETE_ACCOUNT_FAILED))
end
end
function AccountManager:bindAccount()
local loginType = SDKManager.BF_LOGIN_TYPE.GOOGLE
local loginTypeStr = NetManager.LOGIN_TYPE.GOOGLE
if Platform:isIosPlatform() then
loginType = SDKManager.BF_LOGIN_TYPE.APPLE
loginTypeStr = NetManager.LOGIN_TYPE.APPLE
end
BIReport:postAccountBindClick(loginTypeStr)
SDKManager:login(function(params)
if not params.token then
return
end
local args = {
type = SDKManager.LOGIN_TYPE[loginType],
id = params.id,
token = params.token
}
self:sendMessage(ProtoMsgType.FromMsgEnum.BindReq, args, {}, self.onBindAccount, BIReport.ITEM_GET_TYPE.NONE)
end, loginType)
end
function AccountManager:onBindAccount(result)
if result.status == 0 then
local accountInfo = LocalData:getAccountInfo()
local loginType = SDKManager.BF_LOGIN_TYPE.GOOGLE
local loginTypeStr = NetManager.LOGIN_TYPE.GOOGLE
if Platform:isIosPlatform() then
loginType = SDKManager.BF_LOGIN_TYPE.APPLE
loginTypeStr = NetManager.LOGIN_TYPE.APPLE
accountInfo.apple_id = result.reqData.id
else
accountInfo.google_id = result.reqData.id
end
LocalData:setLastLoginType(loginTypeStr)
LocalData:setAccountInfo(accountInfo)
LocalData:save()
BIReport:postAccountBindFinish(loginTypeStr, true)
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BIND_ACCOUNT_SUCCESS))
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BIND_ACCOUNT_SUCCESS)
else
local params = {
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
if result.status == 13 then -- 重复绑定
params.content = I18N:getGlobalText(I18N.GlobalConst.ALREADY_BINDED_DESC)
else
params.content = I18N:getGlobalText(I18N.GlobalConst.BIND_ACCOUNT_FAILED)
end
GFunc.showMessageBox(params)
local loginTypeStr = NetManager.LOGIN_TYPE.GOOGLE
if Platform:isIosPlatform() then
loginTypeStr = NetManager.LOGIN_TYPE.APPLE
end
BIReport:postAccountBindFinish(loginTypeStr, false)
end
end
function AccountManager:changeAccount()
local loginType = SDKManager.BF_LOGIN_TYPE.GOOGLE
local loginTypeStr = NetManager.LOGIN_TYPE.GOOGLE
if Platform:isIosPlatform() then
loginType = SDKManager.BF_LOGIN_TYPE.APPLE
loginTypeStr = NetManager.LOGIN_TYPE.APPLE
end
BIReport:postAccountChangeClick(loginTypeStr)
SDKManager:login(function(params)
if not params.token then
return
end
local accountInfo = LocalData:getAccountInfo()
local bindId = nil
if Platform:isIosPlatform() then
bindId = accountInfo.apple_id
else
bindId = accountInfo.google_id
end
if bindId and bindId ~= "" and bindId == params.id then
local params = {
content = I18N:getGlobalText(I18N.GlobalConst.CHANGE_ACCOUNT_FAILED_2),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
GFunc.showMessageBox(params)
return
end
local args = {
type = SDKManager.LOGIN_TYPE[loginType],
id = params.id,
token = params.token
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ExistReq, args, {}, self.onChangeAccount, BIReport.ITEM_GET_TYPE.NONE)
end, loginType)
end
function AccountManager:onChangeAccount(result)
if result.status == 0 then
local accountInfo = LocalData:getAccountInfo()
local loginType = SDKManager.BF_LOGIN_TYPE.GOOGLE
local loginTypeStr = NetManager.LOGIN_TYPE.GOOGLE
if Platform:isIosPlatform() then
loginType = SDKManager.BF_LOGIN_TYPE.APPLE
loginTypeStr = NetManager.LOGIN_TYPE.APPLE
accountInfo.apple_id = result.reqData.id
else
accountInfo.google_id = result.reqData.id
end
LocalData:setLastLoginInfo(loginTypeStr, result.reqData.id, result.reqData.token)
LocalData:setAccountInfo(accountInfo)
LocalData:save()
BIReport:postAccountChangeFinish(loginTypeStr, true)
ModuleManager.LoginManager:goToLoginScene()
else
local params = {
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
if result.status == 14 then
params.content = I18N:getGlobalText(I18N.GlobalConst.ACCOUNT_EXCHANGE_DESC)
else
params.content = I18N:getGlobalText(I18N.GlobalConst.CHANGE_ACCOUNT_FAILED)
end
GFunc.showMessageBox(params)
local loginTypeStr = NetManager.LOGIN_TYPE.GOOGLE
if Platform:isIosPlatform() then
loginTypeStr = NetManager.LOGIN_TYPE.APPLE
end
BIReport:postAccountChangeFinish(loginTypeStr, false)
end
end
return AccountManager