PGRData/Script/matrix/xmanager/XHgSdkManager.lua

579 lines
No EOL
18 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

XHgSdkManager = XHgSdkManager or {}
local Json = require("XCommon/Json")
local Application = CS.UnityEngine.Application
local Platform = Application.platform
local RuntimePlatform = CS.UnityEngine.RuntimePlatform
local IsSdkLogined = false
local LastTimeOfCallSdkLoginUi = 0
local CallLoginUiCountDown = 2
local HgOrderInfo = CS.XHgOrderInfo
local PayCallbacks = {} -- android 充值回调
local IOSPayCallback = nil -- iOS 充值回调
local CallbackUrl = CS.XRemoteConfig.PayCallbackUrl
local XRecordUserInfo = CS.XRecord.XRecordUserInfo
local CleanPayCallbacks = function()
PayCallbacks = {}
IOSPayCallback = nil
end
XHgSdkManager.UserType = {
Quickly = 2333, -- 快速登录(没有默认游客,有账号就上次登录)
Vistor = 0,
FaceBook = 1,
Google = 2,
GameCenter = 3,
WeChat = 4,
Twitter = 5,
Line = 6,
Apple = 7,
Line = 8,
Suid = 9,
Huawei = 10,
Oppo = 11,
}
--检测SDK是否已经登录
local checkNeedLogin = function()
if not XHgSdkManager.IsNeedLogin() then
XLog.Debug("SDK不需要登录")
CS.XRecord.Record("24035", "HeroSdkRepetitionLogin")
return false
end
return true
end
--检测登录间隔
local checkLoginTimeTooFast = function()
local curTime = CS.UnityEngine.Time.realtimeSinceStartup
if curTime - LastTimeOfCallSdkLoginUi < CallLoginUiCountDown then
XLog.Debug("请求SDK登录时间过短")
CS.XRecord.Record("24036", "HeroSdkShortTimeLogin")
return false
end
LastTimeOfCallSdkLoginUi = curTime
return true
end
function XHgSdkManager.IsNeedLogin()
return not IsSdkLogined
end
function XHgSdkManager.SetCallBackUrl(url)
CallbackUrl = url
end
function XHgSdkManager.LoginQuickly()
XLog.Debug("SDK登录类型:快速登录");
CS.XHgSdkAgent.LoginQuickly();
end
function XHgSdkManager.LoginVisitor()
XLog.Debug("SDK登录类型:游客登录");
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Vistor);
end
function XHgSdkManager.LoginGoogle()
XLog.Debug("SDK登录类型:Google登录");
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Google);
end
function XHgSdkManager.LoginFacebook()
XLog.Debug("SDK登录类型:Facebook登录");
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.FaceBook);
end
-- function XHgSdkManager.LoginTourist()
-- XLog.Debug("SDK登录类型:游客登录")
-- CS.XHgSdkAgent.LoginTourist()
-- end
function XHgSdkManager.LoginTwitter()
XLog.Debug("SDK登录类型:Twitter登录")
-- CS.XHgSdkAgent.LoginTwitter()
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Twitter);
end
function XHgSdkManager.LoginLine()
XLog.Debug("SDK登录类型:Line登录")
-- CS.XHgSdkAgent.LoginLine()
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Line);
end
function XHgSdkManager.LoginApple()
XLog.Debug("SDK登录类型:Apple登录")
-- CS.XHgSdkAgent.LoginApple()
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Apple);
end
function XHgSdkManager.LoginHuawei()
XLog.Debug("SDK登录类型:华为登录");
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Huawei);
end
function XHgSdkManager.LoginSid()
XLog.Debug("SDK登录类型:引继码登录")
CS.XHgSdkAgent.LoginSid()
end
function XHgSdkManager.LoginOppo()
XLog.Debug("SDK登录类型:Oppo登录");
CS.XHgSdkAgent.SwitchAccount(XHgSdkManager.UserType.Oppo);
end
local loginMethods = {
[XHgSdkManager.UserType.Quickly] = XHgSdkManager.LoginQuickly,
[XHgSdkManager.UserType.Vistor] = XHgSdkManager.LoginVisitor,
[XHgSdkManager.UserType.Google] = XHgSdkManager.LoginGoogle,
[XHgSdkManager.UserType.FaceBook] = XHgSdkManager.LoginFacebook,
[XHgSdkManager.UserType.Apple] = XHgSdkManager.LoginApple,
[XHgSdkManager.UserType.Twitter] = XHgSdkManager.LoginTwitter,
[XHgSdkManager.UserType.Suid] = XHgSdkManager.LoginSid,
[XHgSdkManager.UserType.Huawei] = XHgSdkManager.LoginHuawei,
[XHgSdkManager.UserType.Oppo] = XHgSdkManager.LoginOppo,
[XHgSdkManager.UserType.Line] = XHgSdkManager.LoginLine,
}
function XHgSdkManager.Login(userType)
--if not checkNeedLogin() then return end
if not checkLoginTimeTooFast() then return end
CS.XRecord.Record("24023", "HeroSdkLogin")
local loginMethod = loginMethods[userType]
if loginMethod == nil then
XLog.Error("登录类型未定义, userType=" .. userType)
return
end
if XUserManager.Channel ~= XUserManager.CHANNEL.KuroPC then
XLuaUiManager.SetAnimationMask("HgLogin", true)
end
loginMethod()
end
function XHgSdkManager.LoginSuid(account, pass)
--if not checkNeedLogin() then return end
if not checkLoginTimeTooFast() then return end
CS.XRecord.Record("24023", "HeroSdkLogin")
XLog.Debug("SDK登录类型:引继码登录")
XLuaUiManager.SetAnimationMask("HgLogin", true)
CS.XHgSdkAgent.LoginSid(account, pass)
end
function XHgSdkManager.BackToLogin()
CS.XRecord.Logout()
XUserManager.SignOut()
CleanPayCallbacks()
end
function XHgSdkManager.Logout()
if XHgSdkManager.IsNeedLogin() then
XLog.Debug("SDK无需登出")
return
end
XLog.Debug("登出成功")
CS.XHgSdkAgent.Logout()
IsSdkLogined = false
CS.XRecord.Record("24027", "HeroSdkLogoutSuccess")
CS.XRecord.Record("24029", "HeroSdkLogout")
CS.XRecord.Logout()
XUserManager.SignOut()
CleanPayCallbacks()
end
function XHgSdkManager.OnLoginSuccess(jsondata)
XLog.Debug("SDK登录成功")
--CheckPoint: APPEVENT_SDK_INITIALIZE
XAppEventManager.AppLogEvent(XAppEventManager.CommonEventNameConfig.SDK_Initialize)
XLuaUiManager.SetAnimationMask("HgLogin", false)
IsSdkLogined = true
XLog.Debug("--------------jsondata---------------")
XLog.Debug(jsondata)
local data = Json.decode(jsondata)
local info = XRecordUserInfo()
local userId = data.uid
local userType = data.userType
local pwdStatus = data.pwdStatus
if XUserManager.Channel == XUserManager.CHANNEL.IOS then
userId = data.suid
userType = tonumber(data.type)
pwdStatus = tonumber(data.pwdStatus)
end
info.UserId = userId
CS.XRecord.Login(info)
CS.XRecord.Record("24024", "HeroSdkLoginSuccess")
CleanPayCallbacks()
XUserManager.SetUserId(userId)
XUserManager.SetToken(data.token)
XUserManager.SetUserType(userType)
XUserManager.SetPasswordStatus(pwdStatus)
XLoginManager.SetSDKAccountStatus(tonumber(data.logoutStatus))
if XLoginManager.GetSDKAccountStatus() == XLoginManager.SDKAccountStatus.Cancellation then
XUiManager.DialogTip(CS.XGame.ClientConfig:GetString("AccountUnCancellationTitle"), CS.XGame.ClientConfig:GetString("AccountUnCancellationContent"), nil, function() end, function()
XHgSdkManager.AccountUnCancellation()
end)
end
XEventManager.DispatchEvent(XEventId.EVNET_HGSDKLOGIN_SUCCESS)
end
function XHgSdkManager.OnLoginFailed(msg)
XLuaUiManager.SetAnimationMask("HgLogin", false)
XLog.Debug("SDK登录失败: " .. msg)
--IsSdkLogined = false
CS.XRecord.Record("24032", "HeroSdkLoginFailed")
LastTimeOfCallSdkLoginUi = 0
if msg ~= nil and msg ~= "" then
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), msg, XUiManager.DialogType.OnlySure, nil, function()
--XHgSdkManager.Login()
end)
end
end
function XHgSdkManager.OnLoginCancel(msg)
XLuaUiManager.SetAnimationMask("HgLogin", false)
XLog.Debug("SDK用户取消登录")
--IsSdkLogined = false
LastTimeOfCallSdkLoginUi = 0
if msg ~= nil and msg ~= "" then
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), msg, XUiManager.DialogType.OnlySure, nil, function()
--XHgSdkManager.Login()
end)
end
end
function XHgSdkManager.GetBindState()
CS.XHgSdkAgent.GetBindState()
end
function XHgSdkManager.OnGetBindState(jsonStr)
--{"code":0,"msg":"成功","fbBind":0,"googleBind":0,"gcBind":0,"weChatBind":0,"twitterBind":0,"appleBind":0,"lineBind":0}
XEventManager.DispatchEvent(XEventId.EVENT_HGSDK_GET_BIND, jsonStr)
end
function XHgSdkManager.StartBind(userType)
CS.XHgSdkAgent.StartBind(userType)
end
function XHgSdkManager.OnBindSuccess()
XEventManager.DispatchEvent(XEventId.EVENT_HGSDK_BIND_RESULT, true)
end
function XHgSdkManager.OnBindFailed(msg)
--{"code":2,"msg":"用户已经绑定其它帐号","userType":0}
XEventManager.DispatchEvent(XEventId.EVENT_HGSDK_BIND_RESULT, false, msg)
end
function XHgSdkManager.OpenBindWindow()
CS.XHgSdkAgent.OpenBindWindow()
end
function XHgSdkManager.SetSUidPass(pass)
CS.XHgSdkAgent.SetSUidPassword(pass)
end
function XHgSdkManager.OnSetSUidPassSuccess()
XEventManager.DispatchEvent(XEventId.EVENT_HGSDK_SETPASS_RESULT, true)
end
function XHgSdkManager.OnSetSUidPassFail()
XEventManager.DispatchEvent(XEventId.EVENT_HGSDK_SETPASS_RESULT, false)
end
function XHgSdkManager.OnLoginUnRegister()
CS.XHgSdkAgent.ShowRegister()
end
local GetOrderInfo = function(productKey, cpOrderId, goodsId, roleId)
local orderInfo = HgOrderInfo()
orderInfo.CpOrderId = cpOrderId
orderInfo.GoodsId = goodsId
orderInfo.RoleId = roleId
orderInfo.RoleName = XPlayer.Name
if CallbackUrl then
orderInfo.CallbackUrl = CallbackUrl
end
if Platform == RuntimePlatform.WindowsPlayer
or Platform == RuntimePlatform.WindowsEditor then
local template = XPayConfigs.GetPayTemplate(productKey)
orderInfo.Price = template.Amount
orderInfo.GoodsName = template.Name
orderInfo.ServerId = XServerManager.Id
orderInfo.ServerName = XServerManager.ServerName
end
return orderInfo
end
function XHgSdkManager.Pay(productKey, cpOrderId, goodsId, cb)
if Platform == RuntimePlatform.Android or Platform == RuntimePlatform.WindowsPlayer
or Platform == RuntimePlatform.WindowsEditor then
PayCallbacks[cpOrderId] = {
cb = cb,
info = {
ProductKey = productKey,
CpOrderId = cpOrderId,
GoodsId = goodsId,
PlayerId = XPlayer.Id
}
}
end
local order = GetOrderInfo(productKey, cpOrderId, goodsId, XPlayer.Id)
CS.XHgSdkAgent.Pay(order)
end
function XHgSdkManager.OnPaySuccess(jsondata)
local data = Json.decode(jsondata)
local cpOrderId = data.cpOrderId
local cbInfo = PayCallbacks[cpOrderId]
if cbInfo and cbInfo.cb then
cbInfo.cb(nil, cbInfo.info)
else
--XLog.Debug("XHgSdkManager.OnPaySuccess is nil")
end
PayCallbacks[cpOrderId] = nil
end
function XHgSdkManager.OnPayFailed(jsondata)
local data = Json.decode(jsondata)
local cpOrderId = data.cpOrderId
local msg = data.msg or ""
local cbInfo = PayCallbacks[cpOrderId]
if cbInfo and cbInfo.cb then
cbInfo.cb(msg, cbInfo.info)
else
--XLog.Debug("XHgSdkManager.OnPayFailed is nil")
end
PayCallbacks[cpOrderId] = nil
--支付失败的时候解锁
XEventManager.DispatchEvent(XEventId.EVENT_PURCHASEBUY_PAYCANCELORFAIL)
end
function XHgSdkManager.OnPayCancel(cpOrderId, msg)
--PayCallbacks[cpOrderId] = nil
local text = CS.XTextManager.GetText("PayFail")
XUiManager.DialogTip("", text, XUiManager.DialogType.OnlySure)
XEventManager.DispatchEvent(XEventId.EVENT_PURCHASEBUY_PAYCANCELORFAIL)
end
function XHgSdkManager.OnPayPending(cpOrderId, msg)
--XLog.Debug("XHgSdkManager.OnPayPending")
--XLog.Debug(cpOrderId)
--XLog.Debug(msg)
end
function XHgSdkManager.OnPayResultNull()
XEventManager.DispatchEvent(XEventId.EVENT_PURCHASEBUY_PAYCANCELORFAIL)
end
function XHgSdkManager.OnPayIOSSuccess(jsondata)
local data = Json.decode(jsondata)
local cpOrderId = data.cpOrderId
if IOSPayCallback then
IOSPayCallback(nil, cpOrderId)
end
end
function XHgSdkManager.OnPayIOSFailed(jsondata)
local data = Json.decode(jsondata)
local msg = data.msg or ""
if IOSPayCallback then
IOSPayCallback(msg)
end
--支付失败的时候解锁
XEventManager.DispatchEvent(XEventId.EVENT_PURCHASEBUY_PAYCANCELORFAIL)
end
function XHgSdkManager.OnPayPCSuccess(jsondata)
local data = Json.decode(jsondata)
local cpOrderId = data.cpOrder
local cbInfo = PayCallbacks[cpOrderId]
if cbInfo and cbInfo.cb then
cbInfo.cb(nil, cbInfo.info)
else
--XLog.Debug("XHgSdkManager.OnPaySuccess is nil")
end
PayCallbacks[cpOrderId] = nil
end
function XHgSdkManager.OnPayPCFailed(jsondata)
local data = Json.decode(jsondata)
local cpOrderId = data.cpOrder
local msg = data.msg or ""
local cbInfo = PayCallbacks[cpOrderId]
if cbInfo and cbInfo.cb then
cbInfo.cb(msg, cbInfo.info)
else
--XLog.Debug("XHgSdkManager.OnPayFailed is nil")
end
PayCallbacks[cpOrderId] = nil
--支付失败的时候解锁
XEventManager.DispatchEvent(XEventId.EVENT_PURCHASEBUY_PAYCANCELORFAIL)
end
function XHgSdkManager.RegisterIOSCallback(cb)
IOSPayCallback = cb
end
function XHgSdkManager.OnRegisterAccountFailed(msg)
end
function XHgSdkManager.OnSwitchAccountResultNull()
end
function XHgSdkManager.OnSwitchAccountNoRegister(uid, token, pwdStatus, msg)
end
function XHgSdkManager.OnRegisterAccountResultNull(msg)
end
function XHgSdkManager.OnRegisterAccountSuccess(uid, token, userType)
end
function XHgSdkManager.OnRegisterAccountCancel()
end
function XHgSdkManager.OnStartBindResultSuccess()
end
function XHgSdkManager.OnStartBindResultNull()
end
function XHgSdkManager.OnStartBindResultCancel()
end
function XHgSdkManager.OnStartBindResultFailed()
end
function XHgSdkManager.OnBindTaskFinished()
local taskParam = XTaskConfig.GetTaskCondition(3000190).Params[2]
XNetwork.Call("DoClientTaskEventRequest", {ClientTaskType = taskParam}, function(reply)
if reply.Code ~= XCode.Success then
return
end
XLog.Debug("引继码任务完成")
end)
end
local BdcServerBean
function XHgSdkManager.setServerBeanTmp(serverBean)
BdcServerBean = serverBean
end
function XHgSdkManager.onServerBeanChangeHandle()
local jsonBdcServerBean = CS.XHeroBdcAgent.GetServerBeanStr()
if jsonBdcServerBean and jsonBdcServerBean ~= "" then
if not BdcServerBean or jsonBdcServerBean ~= BdcServerBean then
BdcServerBean = jsonBdcServerBean
if XLoginManager.IsLogin() then
XLog.Warning("ServerBean数据同步")
XNetwork.Call("SetServerBeanRequest", {ServerBean = BdcServerBean}, function(reply)
if reply.Code ~= XCode.Success then
XLog.Error(reply.Code)
return
end
end)
end
end
end
XLog.Warning("ServerBean修改", jsonBdcServerBean)
end
function XHgSdkManager.AccountCancellation()
XLog.Debug("Lua层调用注销账号")
if Platform == RuntimePlatform.IPhonePlayer then -- 目前只有ios存在账号注销功能
CS.XHgSdkAgent.AccountCancellation()
end
end
function XHgSdkManager.AccountUnCancellation()
XLog.Debug("Lua层调用取消注销账号")
if Platform == RuntimePlatform.IPhonePlayer then -- 目前只有ios存在该功能
CS.XHgSdkAgent.AccountUnCancellation()
end
end
function XHgSdkManager.SwitchAccount(userType)
XLog.Debug("SDK开始切换账户");
CS.XHgSdkAgent.SwitchAccount(userType);
end
function XHgSdkManager.reportAccountInfo(serverId,roleId,cpExt)
if Platform == RuntimePlatform.Android then
CS.XHgSdkAgent.reportAccountInfo(serverId,roleId,cpExt)
end
end
-- 注销账号成功回调
function XHgSdkManager.OnAccountCancellationSuccess()
XLog.Debug("Lua层注销账号成功回调")
XUserManager.Logout() -- 登出
end
-- 取消注销账号回调
function XHgSdkManager.OnAccountUnCancellation(flag)
XLog.Debug("Lua层取消注销账号回调:"..tostring(flag))
if flag == "success" then
XLoginManager.SetSDKAccountStatus(XLoginManager.SDKAccountStatus.Normal)
XUiManager.TipMsg(CS.XGame.ClientConfig:GetString("OnAccountUnCancellationSuccessTip"))
end
end
function XHgSdkManager.OnBdcServerBeanChanged()
if not XLoginManager.IsLogin() then return end -- 如果没登入服务器不检测bdcServerBean改变登录时会重新向服务器发送
local serverBean = CS.XHeroBdcAgent.GetServerBeanStr()
if serverBean and serverBean ~= "" then
XNetwork.Call("SetServerBeanRequest", {ServerBean = serverBean}, function(res)
if res.Code ~= XCode.Success then
XLog.Error("SetServerBeanRequest Error")
return
end
end)
else
XLog.Error("Lua OnBdcServerBeanChanged ServerBean is Nil")
end
end
function XHgSdkManager.GetDeepLinkValue()
if not deepLinkValue or deepLinkValue == "" then
deepLinkValue = CS.XAppsflyerEvent.GetDeepLinkValue()
end
if deepLinkValue and deepLinkValue ~= "" then
XLog.Debug("DeepLinkValue:"..tostring(deepLinkValue))
return deepLinkValue
end
end
function XHgSdkManager.PushDeepLinkEvent()
local deepLinkValue = XHgSdkManager.GetDeepLinkValue()
if CS.XRemoteConfig.AFDeepLinkEnabled and not string.IsNilOrEmpty(deepLinkValue) then
if XLuaUiManager.IsUiShow("UiLogin") then -- 登录界面唤醒自动登录
XEventManager.DispatchEvent(XEventId.EVENT_DEEPLINK_PUSH_TO_LOGIN)
elseif XLuaUiManager.IsUiShow("UiMain") then -- 主界面直接跳转
XEventManager.DispatchEvent(XEventId.EVENT_MAINUI_ENABLE)
else
XHgSdkManager.ClearDeepLinkValue()
end
end
end