311 lines
No EOL
9.1 KiB
Lua
311 lines
No EOL
9.1 KiB
Lua
XHeroSdkManager = XHeroSdkManager or {}
|
||
|
||
local Json = require("XCommon/Json")
|
||
|
||
local Application = CS.UnityEngine.Application
|
||
local Platform = Application.platform
|
||
local RuntimePlatform = CS.UnityEngine.RuntimePlatform
|
||
|
||
local IsSdkLogined = false
|
||
local LogoutSccess = 0
|
||
local LogoutFailed = 1
|
||
local LogoutCb = nil
|
||
local LastTimeOfCallSdkLoginUi = 0
|
||
local CallLoginUiCountDown = 2
|
||
local HeroRoleInfo = CS.XHeroRoleInfo
|
||
local HeroOrderInfo = CS.XHeroOrderInfo
|
||
local PayCallbacks = {} -- android 充值回调
|
||
local IOSPayCallback = nil -- iOS 充值回调
|
||
local HasSdkLoginError = false -- sdk登陆存在错误
|
||
--local CallbackUrl = "http://haru.free.idcfengye.com/api/XPay/HeroPayResult"
|
||
local CallbackUrl = CS.XRemoteConfig.PayCallbackUrl
|
||
local XRecordUserInfo = CS.XRecord.XRecordUserInfo
|
||
|
||
local CleanPayCallbacks = function()
|
||
PayCallbacks = {}
|
||
IOSPayCallback = nil
|
||
end
|
||
|
||
function XHeroSdkManager.IsNeedLogin()
|
||
return not (CS.XHeroSdkAgent.IsLogined() and IsSdkLogined)
|
||
end
|
||
|
||
function XHeroSdkManager.HasLoginError()
|
||
return HasSdkLoginError
|
||
end
|
||
|
||
function XHeroSdkManager.Login()
|
||
if not XHeroSdkManager.IsNeedLogin() then
|
||
CS.XRecord.Record("24035", "HeroSdkRepetitionLogin")
|
||
return
|
||
end
|
||
|
||
local curTime = CS.UnityEngine.Time.realtimeSinceStartup
|
||
if curTime - LastTimeOfCallSdkLoginUi < CallLoginUiCountDown then
|
||
CS.XRecord.Record("24036", "HeroSdkShortTimeLogin")
|
||
return
|
||
end
|
||
LastTimeOfCallSdkLoginUi = curTime
|
||
|
||
HasSdkLoginError = false
|
||
CS.XRecord.Record("24023", "HeroSdkLogin")
|
||
CS.XHeroSdkAgent.Login()
|
||
end
|
||
|
||
function XHeroSdkManager.Logout(cb)
|
||
if XHeroSdkManager.IsNeedLogin() then
|
||
if cb then
|
||
cb(LogoutFailed)
|
||
end
|
||
return
|
||
end
|
||
|
||
LogoutCb = cb
|
||
CS.XRecord.Record("24029", "HeroSdkLogout")
|
||
CS.XHeroSdkAgent.Logout()
|
||
|
||
if Platform == RuntimePlatform.IPhonePlayer then
|
||
-- iOS 无回调,直接调用退出
|
||
XHeroSdkManager.OnLogoutSuccess()
|
||
end
|
||
end
|
||
|
||
function XHeroSdkManager.OnLoginSuccess(uid, username, token, loginChannel)
|
||
if IsSdkLogined and XUserManager.UserId ~= uid then
|
||
XLog.Error("重复的登陆成功回调 user_id1:" .. tostring(XUserManager.UserId) .. ", user_id2:" .. tostring(uid))
|
||
HasSdkLoginError = true
|
||
end
|
||
IsSdkLogined = true
|
||
LastTimeOfCallSdkLoginUi = 0
|
||
|
||
XLog.Debug("uid:" .. tostring(uid) .. ", username:" .. tostring(username) .. ", token:" .. tostring(token))
|
||
XUserManager.SetUserId(uid)
|
||
XUserManager.SetUserName(username)
|
||
XUserManager.SetToken(token)
|
||
XUserManager.SetLoginChannel(loginChannel)
|
||
|
||
local info = XRecordUserInfo()
|
||
info.UserId = XUserManager.GetUniqueUserId()
|
||
info.UserName = username
|
||
CS.XRecord.Login(info)
|
||
CS.XRecord.Record("24024", "HeroSdkLoginSuccess")
|
||
|
||
CleanPayCallbacks()
|
||
end
|
||
|
||
function XHeroSdkManager.OnLoginFailed(msg)
|
||
XLog.Error("Hero sdk login failed. " .. msg)
|
||
IsSdkLogined = false
|
||
CS.XRecord.Record("24032", "HeroSdkLoginFailed")
|
||
|
||
LastTimeOfCallSdkLoginUi = 0
|
||
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), CS.XTextManager.GetText("HeroSdkLoginFailed"), XUiManager.DialogType.OnlySure, nil, function()
|
||
XHeroSdkManager.Login()
|
||
end)
|
||
end
|
||
|
||
function XHeroSdkManager.OnLoginCancel()
|
||
IsSdkLogined = false
|
||
LastTimeOfCallSdkLoginUi = 0
|
||
-- CS.XRecord.Record("24032", "HeroSdkLoginFailed")
|
||
end
|
||
|
||
function XHeroSdkManager.OnSwitchAccountSuccess(uid, username, token)
|
||
-- 先设置UserId
|
||
XUserManager.OnSwitchAccountSuccess(uid, username, token)
|
||
|
||
-- 再进行埋点
|
||
local info = XRecordUserInfo()
|
||
info.UserId = XUserManager.GetUniqueUserId()
|
||
info.UserName = username
|
||
CS.XRecord.Login(info)
|
||
CS.XRecord.Record("24025", "HeroSdkSwitchAccountSuccess")
|
||
|
||
CleanPayCallbacks()
|
||
end
|
||
|
||
function XHeroSdkManager.OnSwitchAccountFailed(msg)
|
||
CS.XRecord.Record("24026", "HeroSdkSwitchAccountFailed")
|
||
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), msg, XUiManager.DialogType.OnlySure, nil, nil)
|
||
end
|
||
|
||
function XHeroSdkManager.OnSwitchAccountCancel()
|
||
--TODO
|
||
end
|
||
|
||
function XHeroSdkManager.OnLogoutSuccess()
|
||
IsSdkLogined = false
|
||
CS.XRecord.Record("24027", "HeroSdkLogoutSuccess")
|
||
CS.XRecord.Logout()
|
||
CleanPayCallbacks()
|
||
XUserManager.SignOut()
|
||
|
||
if LogoutCb then
|
||
LogoutCb(LogoutSccess)
|
||
LogoutCb = nil
|
||
end
|
||
end
|
||
|
||
function XHeroSdkManager.OnLogoutFailed(msg)
|
||
IsSdkLogined = true
|
||
CS.XRecord.Record("24028", "HeroSdkLogoutFailed")
|
||
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), msg, XUiManager.DialogType.OnlySure, nil, nil)
|
||
|
||
if LogoutCb then
|
||
LogoutCb(LogoutFailed)
|
||
LogoutCb = nil
|
||
end
|
||
end
|
||
|
||
function XHeroSdkManager.OnSdkKickOff(msg)
|
||
XLog.Debug("XHeroSdkManager.OnSdkKickOff() msg = " .. msg)
|
||
XDataCenter.AntiAddictionManager.Kick(msg)
|
||
end
|
||
|
||
local GetRoleInfo = function()
|
||
local roleInfo = HeroRoleInfo()
|
||
roleInfo.Id = XPlayer.Id
|
||
if XUserManager.IsKuroSdk() then
|
||
-- 库洛母包需要有正确的区服ID,下面那个else获取的是服务器列表索引值,其实是错的
|
||
roleInfo.ServerId = CS.XHeroBdcAgent.ServerId
|
||
else
|
||
roleInfo.ServerId = XServerManager.Id
|
||
end
|
||
roleInfo.ServerName = XServerManager.ServerName
|
||
roleInfo.Name = XPlayer.Name
|
||
roleInfo.Level = XPlayer.Level
|
||
roleInfo.CreateTime = XPlayer.CreateTime
|
||
roleInfo.PaidGem = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.PaidGem)
|
||
roleInfo.Coin = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.Coin)
|
||
roleInfo.SumPay = 0
|
||
roleInfo.VipLevel = 0
|
||
roleInfo.PartyName = nil
|
||
|
||
return roleInfo
|
||
end
|
||
|
||
function XHeroSdkManager.EnterGame()
|
||
if not XUserManager.IsUseSdk() then
|
||
return
|
||
end
|
||
CS.XHeroSdkAgent.EnterGame(GetRoleInfo())
|
||
end
|
||
|
||
function XHeroSdkManager.CreateNewRole()
|
||
if not XUserManager.IsUseSdk() then
|
||
return
|
||
end
|
||
CS.XHeroSdkAgent.CreateNewRole(GetRoleInfo())
|
||
end
|
||
|
||
function XHeroSdkManager.RoleLevelUp()
|
||
if not XUserManager.IsUseSdk() then
|
||
return
|
||
end
|
||
CS.XHeroSdkAgent.RoleLevelUp(GetRoleInfo())
|
||
end
|
||
|
||
local GetOrderInfo = function(cpOrderId, goodsId, extraParams,productKey)
|
||
local orderInfo = HeroOrderInfo()
|
||
orderInfo.CpOrderId = cpOrderId
|
||
orderInfo.GoodsId = goodsId
|
||
|
||
if extraParams and _G.next(extraParams) then
|
||
orderInfo.ExtraParams = Json.encode(extraParams)
|
||
end
|
||
local template = XPayConfigs.GetPayTemplate(productKey)
|
||
|
||
if XUserManager.IsKuroSdk() and template then
|
||
orderInfo.Price = template.Amount
|
||
orderInfo.GoodsName = template.Name
|
||
orderInfo.GoodsDesc = template.Desc
|
||
end
|
||
-- if productInfo.GoodsName and #productInfo.GoodsName > 0 then
|
||
-- orderInfo.GoodsName = productInfo.GoodsName
|
||
-- end
|
||
-- if productInfo.GoodsDesc and #productInfo.GoodsDesc > 0 then
|
||
-- orderInfo.GoodsDesc = productInfo.GoodsDesc
|
||
-- end
|
||
-- if productInfo.Amount and productInfo.Amount > 0 then
|
||
-- orderInfo.Amount = productInfo.Amount
|
||
-- end
|
||
-- if productInfo.Price and productInfo.Price > 0 then
|
||
-- orderInfo.Price = productInfo.Price
|
||
-- end
|
||
-- if productInfo.Count and productInfo.Count > 0 then
|
||
-- orderInfo.Count = productInfo.Count
|
||
-- end
|
||
if CallbackUrl then
|
||
orderInfo.CallbackUrl = CallbackUrl
|
||
end
|
||
|
||
return orderInfo
|
||
end
|
||
|
||
function XHeroSdkManager.Pay(productKey, cpOrderId, goodsId, cb)
|
||
-- local extraParams = {
|
||
-- PlayerId = XPlayer.Id,
|
||
-- ProductKey = productKey,
|
||
-- CpOrderId = cpOrderId,
|
||
-- ProductId = productInfo.ProductId
|
||
-- }
|
||
if Platform == RuntimePlatform.Android then
|
||
PayCallbacks[cpOrderId] = {
|
||
cb = cb,
|
||
info = {
|
||
ProductKey = productKey,
|
||
CpOrderId = cpOrderId,
|
||
GoodsId = goodsId,
|
||
PlayerId = XPlayer.Id
|
||
}
|
||
}
|
||
end
|
||
|
||
local order = GetOrderInfo(cpOrderId, goodsId,nil,productKey)
|
||
CS.XHeroSdkAgent.Pay(order, GetRoleInfo())
|
||
XDataCenter.AntiAddictionManager.BeginPayAction()
|
||
end
|
||
|
||
function XHeroSdkManager.OnPayAndSuccess(sdkOrderId, cpOrderId)
|
||
local cbInfo = PayCallbacks[cpOrderId]
|
||
if cbInfo and cbInfo.cb then
|
||
cbInfo.info.sdkOrderId = sdkOrderId
|
||
cbInfo.cb(nil, cbInfo.info)
|
||
end
|
||
|
||
PayCallbacks[cpOrderId] = nil
|
||
XDataCenter.AntiAddictionManager.EndPayAction()
|
||
end
|
||
|
||
function XHeroSdkManager.OnPayAndFailed(cpOrderId, msg)
|
||
local cbInfo = PayCallbacks[cpOrderId]
|
||
if cbInfo and cbInfo.cb then
|
||
cbInfo.cb(msg, cbInfo.info)
|
||
end
|
||
|
||
PayCallbacks[cpOrderId] = nil
|
||
XDataCenter.AntiAddictionManager.EndPayAction()
|
||
end
|
||
|
||
function XHeroSdkManager.OnPayAndCancel(cpOrderId)
|
||
PayCallbacks[cpOrderId] = nil
|
||
XDataCenter.AntiAddictionManager.EndPayAction()
|
||
end
|
||
|
||
function XHeroSdkManager.OnPayIOSSuccess(orderId)
|
||
if IOSPayCallback then
|
||
IOSPayCallback(nil, orderId)
|
||
end
|
||
XDataCenter.AntiAddictionManager.EndPayAction()
|
||
end
|
||
|
||
function XHeroSdkManager.OnPayIOSFailed(msg)
|
||
if IOSPayCallback then
|
||
IOSPayCallback(msg)
|
||
end
|
||
XDataCenter.AntiAddictionManager.EndPayAction()
|
||
end
|
||
|
||
function XHeroSdkManager.RegisterIOSCallback(cb)
|
||
IOSPayCallback = cb
|
||
end |