|
|
GamePlatform = GamePlatform or BaseClass()
|
|
local GamePlatform = GamePlatform
|
|
function GamePlatform:__init()
|
|
|
|
--是否自定义用户中心
|
|
self.custom_user_center = false
|
|
|
|
--是否自定义退出界面
|
|
self.custom_exit_game = ClientConfig.plat_custom_exit
|
|
|
|
--是否支持切换账号
|
|
self.custom_change_account = false
|
|
|
|
--登陆请求参数
|
|
self.login_param = nil
|
|
|
|
--充值请求参数
|
|
self.pay_param = {}
|
|
|
|
--平台用户ID
|
|
self.uid = 0
|
|
|
|
--外部登陆回调函数
|
|
self.login_callback = nil
|
|
|
|
--外部充值回调函数
|
|
self.pay_callback = nil
|
|
|
|
--上次调用登陆时间
|
|
self.last_login_time = 0
|
|
|
|
--平台标识
|
|
self.plat_name = ClientConfig.plat_name
|
|
|
|
--登陆状态
|
|
self.login_state = false
|
|
|
|
--上次请求充值时间
|
|
self.last_pay_request_time = 0
|
|
|
|
--上次发送角色等级时间
|
|
self.last_sent_role_level_time = os.time()
|
|
--SDK登陆服务器验证函数
|
|
self.login_method_name = "check_login_" .. string.gsub(self.plat_name, "_alpha", "")
|
|
|
|
ClientConfig.source_plat_name = ClientConfig.plat_name
|
|
|
|
self.can_send_voice = false --语音权限
|
|
|
|
self:InitOperTypeValue()
|
|
end
|
|
|
|
function GamePlatform:SDKCallBack( func_name, func_data)
|
|
if func_name == "LoginRequest" then
|
|
self.wait_login_call_back = false
|
|
GlobalEventSystem:Fire(EventName.HIDE_LOADING_VIEW)
|
|
self:LoginCallBack(func_data)
|
|
elseif func_name == "PayRequest" then
|
|
self:PayCallBack(func_data)
|
|
elseif func_name == "LoginOut" then
|
|
ClientConfig.login_token = nil
|
|
self:LoginOutCallBack(func_data)
|
|
elseif func_name == "RequestAudioPermission" then
|
|
self:OnRequestAudioPermission(func_data)
|
|
elseif func_name == "ScreenShot" then
|
|
self:ScreenShotBack(func_data)
|
|
end
|
|
end
|
|
|
|
function GamePlatform:ScreenShotBack(data)
|
|
if data then
|
|
local out_data = data
|
|
if type(data) == "string" then
|
|
out_data = JsonToTable(data)
|
|
end
|
|
if out_data and out_data.name then
|
|
local png_path = "phone/"..out_data.name..".png"
|
|
local save_path = Util.DataPath..png_path
|
|
if SystemRuntimePlatform.IsAndroid() then
|
|
local game_path = "luaFramework/"
|
|
save_path = game_path..png_path
|
|
end
|
|
|
|
if UnityEngine and UnityEngine.ScreenCapture then
|
|
UnityEngine.ScreenCapture.CaptureScreenshot(save_path)
|
|
end
|
|
self:CallStringFunc("ScreenShotPath", {path = save_path})
|
|
end
|
|
end
|
|
end
|
|
|
|
function GamePlatform:CallStringFunc(func,value)
|
|
return SDKUtil.CallStringFunc( "SDKPlatform", func, value)
|
|
end
|
|
|
|
function GamePlatform:InitWindow()
|
|
PlatformSetting:getInstance():Init(self)
|
|
end
|
|
|
|
function GamePlatform:InitSDK()
|
|
end
|
|
|
|
function GamePlatform:LoginRequest(login_back)
|
|
ClientConfig.login_token = nil
|
|
|
|
local cur_time = os.time()
|
|
if cur_time - self.last_login_time < 3 then
|
|
return
|
|
end
|
|
self.last_login_time = cur_time
|
|
|
|
self.login_callback = login_back
|
|
local login_data = {}
|
|
|
|
local login_func = function()
|
|
self:CallSDKMethod("LoginRequest",login_data)
|
|
|
|
GlobalEventSystem:Fire(EventName.SHOW_LOADING_VIEW)
|
|
self.wait_login_call_back = true
|
|
local hide_func = function()
|
|
if self.wait_login_call_back then
|
|
GlobalEventSystem:Fire(EventName.HIDE_LOADING_VIEW)
|
|
end
|
|
end
|
|
setTimeout(hide_func,3)
|
|
end
|
|
|
|
if self.login_state then
|
|
self.login_state = false
|
|
self:CallSDKMethod("LoginOut",login_data)
|
|
|
|
setTimeout(login_func, 0.5)
|
|
else
|
|
login_func()
|
|
end
|
|
end
|
|
|
|
function GamePlatform:SetLoginCallBack(login_back)
|
|
self.login_callback = login_back
|
|
end
|
|
|
|
function GamePlatform:LoginCallBack( data )
|
|
if data then
|
|
local login_data = data
|
|
if type(data) == "string" then
|
|
login_data = JsonToTable(data)
|
|
end
|
|
|
|
if login_data then
|
|
if login_data.paramstr then
|
|
login_data.paramstr = UrlEncode(login_data.paramstr) --阻止非法字符问题
|
|
end
|
|
if login_data.uid then
|
|
if login_data.token then
|
|
ClientConfig.login_token = login_data.token
|
|
end
|
|
|
|
self.uid = login_data.uid or 0
|
|
if login_data.sdk_channel and login_data.sdk_channel ~= "" then
|
|
self.checkChannel = login_data.sdk_channel
|
|
ClientConfig.source_plat_name = ClientConfig.plat_name .. "_" .. self.checkChannel
|
|
Debugger.Log("source_plat_name " .. ClientConfig.source_plat_name)
|
|
else
|
|
self.channel_id = (login_data.sdk_channel or login_data.channel) or login_data.login_channel
|
|
if self.channel_id then
|
|
self.channel_id = ClientConfig.plat_name .. "_" .. self.channel_id
|
|
end
|
|
end
|
|
|
|
local server_check = function( state, error, data )
|
|
if state then
|
|
local login_data = JsonToTable(data)
|
|
if login_data and tonumber(login_data["ret"]) == 0 then
|
|
if login_data.token then
|
|
ClientConfig.login_token = login_data.token
|
|
end
|
|
if login_data.uid then --覆盖掉上面的赋值
|
|
self.uid = login_data.uid
|
|
end
|
|
if login_data.sdk_channel and login_data.sdk_channel ~= "" then
|
|
self.checkChannel = login_data.sdk_channel
|
|
ClientConfig.source_plat_name = ClientConfig.plat_name .. "_" .. self.checkChannel
|
|
Debugger.Log("source_plat_name " .. ClientConfig.source_plat_name)
|
|
end
|
|
if self.login_callback then
|
|
self.login_callback( self.uid )
|
|
self.login_callback = nil
|
|
LoginModel:getInstance().no_login_state = false
|
|
end
|
|
self.login_state = true
|
|
return
|
|
end
|
|
end
|
|
local function ok()
|
|
Application.Quit()
|
|
end
|
|
Alert.show("登陆验证失败,请退出游戏再次进入",Alert.Type.One,ok)
|
|
end
|
|
|
|
self.login_param = {
|
|
paramstr = login_data.paramstr or "{}",
|
|
}
|
|
|
|
self:TryCheckLogin( server_check )
|
|
|
|
if login_data.get_pay_state and tonumber(login_data.get_pay_state) == 1 then
|
|
self:GetServerPayState()
|
|
end
|
|
return
|
|
else
|
|
local server_check = function(state, error, data)
|
|
if state then
|
|
local login_data = JsonToTable(data)
|
|
if login_data and tonumber(login_data["ret"]) == 0 then
|
|
self.uid = login_data.uid or "0"
|
|
if login_data.token then
|
|
ClientConfig.login_token = login_data.token
|
|
end
|
|
|
|
if login_data.sdk_channel and login_data.sdk_channel ~= "" then
|
|
self.checkChannel = login_data.sdk_channel
|
|
ClientConfig.source_plat_name = ClientConfig.plat_name .. "_" .. self.checkChannel
|
|
Debugger.Log("source_plat_name " .. ClientConfig.source_plat_name)
|
|
end
|
|
|
|
if self.login_callback then
|
|
self.login_callback( self.uid )
|
|
self.login_callback = nil
|
|
LoginModel:getInstance().no_login_state = false
|
|
end
|
|
self.login_state = true
|
|
return
|
|
end
|
|
end
|
|
local function ok()
|
|
Application.Quit()
|
|
end
|
|
Alert.show("登陆验证失败,请退出游戏再次进入",Alert.Type.One,ok)
|
|
end
|
|
self.check_login = nil
|
|
self.login_param = nil
|
|
if login_data.checkLogin and tonumber(login_data.checkLogin) == 1 then
|
|
self.login_param = {
|
|
paramstr = login_data.paramstr or "{}",
|
|
}
|
|
self:TryCheckLogin( server_check )
|
|
end
|
|
|
|
if login_data.get_pay_state and tonumber(login_data.get_pay_state) == 1 then
|
|
self:GetServerPayState()
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
Message.show("登陆失败,请重新尝试")
|
|
end
|
|
|
|
function GamePlatform:TryCheckLogin(check_back)
|
|
|
|
if not self.login_param then
|
|
check_back()
|
|
else
|
|
local callback = function(state, error, data)
|
|
self.wait_checklogin_call_back = false
|
|
GlobalEventSystem:Fire(EventName.HIDE_LOADING_VIEW)
|
|
check_back(state, error, data)
|
|
end
|
|
|
|
local now_time = os.time()
|
|
local now_method = self.login_method_name
|
|
local now_sign = string.lower(Util.md5(ClientConfig.login_key .. now_time .. now_method))
|
|
|
|
self.login_param["method"] = now_method
|
|
self.login_param["time"] = now_time
|
|
self.login_param["sign"] = now_sign
|
|
self.login_param["site"] = ClientConfig.plat_name
|
|
|
|
HttpUtil.HttpGetRequest(ClientConfig.login_php, self.login_param, callback)
|
|
GlobalEventSystem:Fire(EventName.SHOW_LOADING_VIEW)
|
|
|
|
self.wait_checklogin_call_back = true
|
|
local hide_func = function()
|
|
if self.wait_checklogin_call_back then
|
|
GlobalEventSystem:Fire(EventName.HIDE_LOADING_VIEW)
|
|
end
|
|
end
|
|
setTimeout(hide_func,3)
|
|
end
|
|
end
|
|
|
|
function GamePlatform:LoginOut()
|
|
self.login_state = false --避免多次调用登出接口
|
|
self:CallSDKMethod("LoginOut","")
|
|
end
|
|
|
|
function GamePlatform:PayRequest( custom_money, custom_info, custom_callpack )
|
|
local cur_time = os.time()
|
|
if cur_time - self.last_pay_request_time < 2 then
|
|
return
|
|
end
|
|
self.last_pay_request_time = cur_time
|
|
|
|
self:PayStart(custom_money * 10, custom_info, custom_callpack)
|
|
|
|
--TA订单请求打点
|
|
local product_id = custom_info.id
|
|
local product_cfg = product_id and Config.Rechargeproduct[product_id]
|
|
if product_cfg then
|
|
local data = {
|
|
event_name = "order_init",
|
|
currency = "RMB",
|
|
pay_amount = tonumber(custom_money) or 0,
|
|
pay_item_type = tostring(product_cfg.product_type) or "",
|
|
pay_sub_type = tostring(product_cfg.product_subtype) or "",
|
|
pay_item_id = tostring(product_id) or "",
|
|
pay_item = custom_info.pay_title or "",
|
|
is_quick = custom_info.recharge_type and custom_info.recharge_type == 1 or false
|
|
}
|
|
self:TATrack(data)
|
|
end
|
|
|
|
end
|
|
|
|
function GamePlatform:PayStart(custom_money, custom_info, custom_callpack)
|
|
local server_role = self:ServerRole(custom_info.id or 0)
|
|
local random = math.random(100,999)
|
|
|
|
local role_info = RoleManager.Instance.mainRoleInfo
|
|
local playerInfo = LoginController.Instance:GetPlatUserInfo()
|
|
local real_plat = string.gsub(self.plat_name, "_alpha", "")
|
|
local pay_callback_url = ClientConfig.url_account_path .. "api/pay.php?plat=suyou&platname=".. real_plat
|
|
local notify_url_str = ClientConfig.url_account_path .. "api/pay.php?plat=".. real_plat
|
|
local notify_url_post_str = ClientConfig.url_account_path .. "api/pay/".. real_plat .. ".php"
|
|
local now_order_num = server_role .. "-" .. self.uid .. "-" .. os.time() .. random .. "-" .. self.plat_name
|
|
|
|
local pay_data = {
|
|
pay_money = tostring(custom_money) or 0,
|
|
product_id = tostring(custom_info.id),
|
|
product_name = custom_info.pay_title or "",
|
|
user_id = self.uid,
|
|
order_num = now_order_num,
|
|
pay_suyou_notify_url = pay_callback_url,
|
|
notify_url = notify_url_str,
|
|
notify_url_post = notify_url_post_str,
|
|
role_id = tostring(role_info.role_id),
|
|
role_name = role_info.name,
|
|
role_level = tostring(role_info.level),
|
|
real_server = tostring(playerInfo.server_id),
|
|
server_name = playerInfo.server_name,
|
|
pay_state = self.use_web_pay_state or 0,
|
|
balance = tostring(role_info.jin),
|
|
vip = tostring(role_info.vip_flag),
|
|
}
|
|
local plat_name = ClientConfig.product_plat or string.gsub(ClientConfig.plat_name, "_alpha", "")
|
|
local index = plat_name .. "@" .. pay_data["product_id"]
|
|
if Config.Appstroeproduct then
|
|
local product_info = Config.Appstroeproduct[index]
|
|
if product_info then
|
|
pay_data["appstore_product_id"] = Trim(product_info.product) or 0
|
|
else
|
|
pay_data["appstore_product_id"] = ""
|
|
pay_data["appstore_product_id_1"] = plat_name .. (pay_data["pay_money"]/10)
|
|
pay_data["appstore_product_id_2"] = plat_name .. (pay_data["pay_money"]*10)
|
|
pay_data["appstore_product_id_3"] = plat_name .. (pay_data["pay_money"])
|
|
end
|
|
end
|
|
|
|
self:CallSDKMethod("PayRequest",pay_data)
|
|
self.pay_callback = custom_callpack
|
|
end
|
|
|
|
function GamePlatform:GetServerPayState()
|
|
--向后台获取充值方式
|
|
local func_callback = function(state, error, data)
|
|
if state then
|
|
local login_data = JsonToTable(data)
|
|
if login_data and tonumber(login_data["ret"]) == 0 then
|
|
local pay_code = tonumber(login_data["data"])
|
|
if pay_code ~= 0 and pay_code ~= -1 then
|
|
self.use_web_pay_state = pay_code
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local now_time = os.time()
|
|
local now_method = "check_webpay_status"
|
|
local now_sign = string.lower(Util.md5(ClientConfig.login_key .. now_time .. now_method))
|
|
|
|
local get_param = {
|
|
method = now_method,
|
|
time = now_time,
|
|
sign = now_sign,
|
|
platform = ClientConfig.plat_name,
|
|
lv = 0,
|
|
}
|
|
HttpUtil.HttpGetRequest(ClientConfig.login_php, get_param, func_callback)
|
|
end
|
|
|
|
function GamePlatform:ServerRole(product_id)
|
|
local playerInfo = LoginController.Instance:GetPlatUserInfo()
|
|
local role_info = RoleManager.Instance.mainRoleInfo
|
|
|
|
if not playerInfo or not role_info then
|
|
return ""
|
|
end
|
|
|
|
local server_role = playerInfo.server_id .. "gzsy" .. role_info.role_id .. "gzsy" .. product_id
|
|
return server_role
|
|
end
|
|
|
|
function GamePlatform:PayCallBack( data )
|
|
if self.pay_callback then
|
|
self.pay_callback(true)
|
|
self.pay_callback = nil
|
|
end
|
|
end
|
|
|
|
function GamePlatform:LoginOutCallBack(data)
|
|
if data then
|
|
local out_data = data
|
|
if type(data) == "string" then
|
|
out_data = JsonToTable(data)
|
|
end
|
|
if out_data and out_data.noLogin and tonumber(out_data.noLogin) == 1 then
|
|
LoginModel:getInstance().no_login_state = tonumber(out_data.noLogin)
|
|
end
|
|
end
|
|
|
|
GlobalEventSystem:Fire(EventName.CHANGE_ACCOUNT)
|
|
end
|
|
|
|
function GamePlatform:CallSDKMethod(func_name, info)
|
|
SDKUtil.CallSDKFunc( "SDKPlatform", func_name, info )
|
|
end
|
|
|
|
function GamePlatform:CallBoolFunc(value_name)
|
|
return SDKUtil.CallBoolFunc( "SDKPlatform", value_name, "" )
|
|
end
|
|
|
|
function GamePlatform:CallIntFunc(value_name, func_data)
|
|
if func_data == nil then
|
|
func_data = ""
|
|
end
|
|
return SDKUtil.CallIntFunc("SDKPlatform", value_name, func_data)
|
|
end
|
|
|
|
function GamePlatform:ShowUserCenter()
|
|
self:CallSDKMethod("ShowUserCenter","")
|
|
end
|
|
|
|
function GamePlatform:ExitPlatform()
|
|
if self:NeedCustomExitGame() then
|
|
self:CallSDKMethod("SDKExit","")
|
|
end
|
|
self:SubmitExtendData(self.exit_game_type)
|
|
end
|
|
|
|
function GamePlatform:CustonPayParam()
|
|
end
|
|
|
|
function GamePlatform:NeedCustomExitGame()
|
|
return self.custom_exit_game
|
|
end
|
|
|
|
function GamePlatform:SubmitCreateRoleInfo(role_id)
|
|
self:SubmitExtendData(self.create_role_type,tostring(role_id),"1")
|
|
end
|
|
|
|
function GamePlatform:RoleLevelChange(new_level)
|
|
if os.time() - self.last_sent_role_level_time < 30 then
|
|
return
|
|
end
|
|
|
|
self.last_sent_role_level_time = os.time()
|
|
self:SubmitExtendData(self.role_levelup_type)
|
|
end
|
|
|
|
function GamePlatform:SubmitEnterGame()
|
|
self:SubmitExtendData(self.gointo_game_type)
|
|
end
|
|
|
|
function GamePlatform:SubmitSelectServer()
|
|
self:SubmitExtendData(self.select_server_type)
|
|
end
|
|
|
|
function GamePlatform:SubmitExtendData( now_type,role_id,role_lv )
|
|
if not RoleManager or not RoleManager.Instance then
|
|
return
|
|
end
|
|
|
|
local playerInfo = LoginController.Instance:GetPlatUserInfo()
|
|
local role_info = RoleManager.Instance.mainRoleInfo
|
|
local cur_role_name = role_info.name
|
|
if cur_role_name == "" or now_type == self.create_role_type then
|
|
cur_role_name = playerInfo.role_name or "无"
|
|
end
|
|
local extend_data = {
|
|
type = now_type,
|
|
role_id = role_id or tostring(role_info.role_id),
|
|
role_name = cur_role_name,
|
|
role_level = role_lv or tostring(role_info.level),
|
|
real_server = tostring(playerInfo.server_id),
|
|
server_name = playerInfo.server_name,
|
|
balance = tostring(role_info.jin),
|
|
vip = tostring(role_info.vip_flag),
|
|
reg_time = tostring(playerInfo.create_time or os.time()),
|
|
user_id = self.uid,
|
|
|
|
--兼容老版本
|
|
uid = self.uid,
|
|
server = tostring(playerInfo.server_id),
|
|
roleCTime = tostring(playerInfo.create_time or os.time()),
|
|
serverNanme = playerInfo.server_name,
|
|
time = os.time(),
|
|
}
|
|
self:CallSDKMethod("SubmitExtendData",extend_data)
|
|
end
|
|
|
|
function GamePlatform:InitOperTypeValue()
|
|
self.select_server_type = 101
|
|
self.create_role_type = 102
|
|
self.gointo_game_type = 103
|
|
self.role_levelup_type = 104
|
|
self.exit_game_type = 105
|
|
end
|
|
|
|
function GamePlatform:GetUserID()
|
|
return self.uid
|
|
end
|
|
|
|
function GamePlatform:ShareBySDK()
|
|
local share_data = {}
|
|
self:CallSDKMethod("ShareBySDK", share_data)
|
|
end
|
|
|
|
function GamePlatform:SuyouEventRecord( event_id )
|
|
-- local url = "http://mqapi.suyougame.com/point/mrzj"
|
|
-- local secretKey = "9A22E32CA2CFF5282F614F84138437F6"
|
|
-- local cur_time = tostring(os.time())
|
|
-- local post_param = {
|
|
-- type = event_id,
|
|
-- source = ClientConfig.plat_name,
|
|
-- deviceId = LoginModel:getInstance().devece_id,
|
|
-- startTime = LoginModel:getInstance().first_setup_time,
|
|
-- time = cur_time,
|
|
-- sign = "",
|
|
-- }
|
|
-- post_param.sign = string.lower(Util.md5("deviceId="..post_param.deviceId.."source="..post_param.source.."startTime="..post_param.startTime.."time="..post_param.time.."type="..post_param.type..secretKey))
|
|
-- local call_func = function(ret,error_msg,data)
|
|
-- end
|
|
-- HttpUtil.HttpPostRequest(url, post_param, call_func)
|
|
end
|
|
|
|
|
|
function GamePlatform:RequestAudioPermission( )
|
|
local share_data = {}
|
|
self:CallSDKMethod("RequestAudioPermission", share_data)
|
|
end
|
|
|
|
function GamePlatform:IsNeedRequestAudioPermission( )
|
|
-- local is_need_permission = self:CallIntFunc("RequestAudioPermission")
|
|
-- return is_need_permission
|
|
end
|
|
|
|
function GamePlatform:OnRequestAudioPermission( data )
|
|
if data then
|
|
local out_data = data
|
|
self.can_send_voice = false
|
|
-- Debugger.Log("OnRequestAudioPermission out_data:" .. out_data)
|
|
if out_data and tonumber(out_data) == 1 then
|
|
self.can_send_voice = true
|
|
end
|
|
GlobalEventSystem:Bind(EventName.UPDATE_VOICE_AUTH, self.can_send_voice)
|
|
end
|
|
end
|
|
|
|
function GamePlatform:CanSendVoice( )
|
|
return self.can_send_voice
|
|
end
|
|
|
|
function GamePlatform:DeleteMe()
|
|
end
|
|
|
|
--ta打点额外数据
|
|
function GamePlatform:SubmitSpecialData( parm_type, parm_value )
|
|
local share_data = {type = parm_type, value = parm_value}
|
|
self:CallSDKMethod("SubmitSpecialData", share_data)
|
|
end
|
|
|
|
--ta打点数据上报,参数{event_name = str, key1 = value1, key2 = value2 ...}
|
|
function GamePlatform:TATrack( data )
|
|
self:CallSDKMethod("TATrack", data)
|
|
end
|