anysdk-Lua用户系统接口

来自AnySDK 文档
跳转至: 导航搜索

获取用户插件

获取用户插件,需在初始化并loadAllPlugins之后(注意:初始化和load最好只进行一次,建议agent设置为全局的)

--获取AgentManger
local agent = AgentManager:getInstance()
--初始化并load plugins(注意:初始化和load最好只进行一次,建议agent设置为全局的)
--init
local appKey = "BA5B660B-6DD5-0F67-8CC7-8FE0BA7545D6";
local appSecret = "e23ae7d6da34334d4cc11df0dc7f3de0";
local privateKey = "76E1D975EA4B9A4ECD0E85AF2D782E99";
local oauthLoginServer = "http://oauth.anysdk.com/api/OauthLoginDemo/Login.php";
agent:init(appKey,appSecret,privateKey,oauthLoginServer)
--load
agent:loadAllPlugins()

--get user
local user_plugin = agent:getUserPlugin()

设置监听

用户系统存在回调信息,需要设置监听,实现监听方法。

--(pPlugin: ProtocolUser, 用户系统插件, code: UserActionResultCode ,登陆回调返回值;msg : string,返回登陆信息,可能为空)
local function onActionListener( pPlugin, code, msg )
    print("on user action listener.")
    if code == UserActionResultCode.kInitSuccess then
        --do something
    end
end
user_plugin:setActionListener(onActionListener)

如果需要多次设置监听需要先删除之前的回调监听

user_plugin:removeListener()

相关接口

初始化

在加载插件的同时已经对所有sdk进行了初始化,开发者不需要额外再进行初始化。 回调信息

回调信息 code msg
初始化成功 kInitSuccess null或者错误信息的简单描述
初始化失败 kInitFail null或者错误信息的简单描述

调用实例

local function onActionListener( pPlugin, code, msg )
    if code == UserActionResultCode.kInitSuccess then  --初始化SDK成功回调
        --sdk初始化成功,游戏相关处理
    end
    if code == UserActionResultCode.kInitFail  then   --初始化SDK失败回调
        --sdk初始化失败,游戏相关处理
    end
end

登陆

1、登陆流程描述
登陆流程.jpg
1、游戏客户端调用登陆接口(向渠道平台服务器发起登录请求)
2、用户登录成功,渠道平台服务器返回认证码
3、AnySDK框架拿着认证码向游戏服务器请求登录验证
4、游戏服务器将认证码转发给AnySDK服务器
5、AnySDK服务器向渠道平台服务器进行用户登录验证
6、AnySDK服务器接收验证结果
7、AnySDK服务器将结果转发给游戏服务器
8、游戏服务器通知AnySDK框架登录验证结果
9、AnySDK框架回调给游戏客户端是否登陆成功


2、登陆函数

一定要接到初始化SDK成功回调,才可以调登录接口的函数

方法一:login();
方法二:login(info); //param:info(table)

登陆参数可以传入一个表,可传入服务器id(server_id)、登陆验证地址(server_url)和透传参数(任意key值)。
服务器id:key为server_id,服务端收到的参数名为server_id,不传则默认为1。
登陆验证地址:key为server_url,传入的地址将覆盖掉配置的登陆验证地址。
透传参数:key任意(以上两个key除外),服务端收到的参数名为server_ext_for_login,是个json字符串。
PS:AnySDK客户端【渠道参数】的【登陆验证透传参数】,服务端收到的参数名为server_ext_for_client。

local info = {
    server_id   = "2",
    server_url  = "http://xxx.xxx.xxx",
    key1        = "value1",
    key2        = "value2"
}
user_plugin:login(info)
在成功初始化插件结束后,您就可以开始调用登录接口了。
登陆回调信息
回调信息 code msg
登陆成功 kLoginSuccess 游戏服务端回传给客户端数据的ext字段
登陆失败 kLoginFail null或者错误信息的简单描述
登陆网络出错 kLoginNetworkError null或者错误信息的简单描述
登陆取消 kLoginCancel null或者错误信息的简单描述
举例说明
--调用用户系统登陆功能
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin then
    user_plugin:login()
end

--处理回调函数	
if code == UserActionResultCode.kLoginSuccess  then   --登陆成功回调
    --登陆成功后,游戏相关处理
end
if code == UserActionResultCode.kLoginTimeOut  then   --登陆失败回调
    --登陆失败后,游戏相关处理
end
if code == UserActionResultCode.kLoginCancel  then   --登陆取消回调
    --登陆失败后,游戏相关处理
end
if code == UserActionResultCode.kLoginFail  then   --登陆失败回调
    --登陆失败后,游戏相关处理
end
3、当前登陆状态
isLogined(), return: bool
您可以通过调用该函数来判断是否已经登陆。
4、获取用户唯一标示符
getUserID(), return: string
用户唯一标示符

登出

logout();
注销账号分两种,一种是由开发者在任何场景调用,用来注销当前的登录账号;另一种是由玩家在平台界面里面选择注销当前的账号。
登出回调信息
回调信息 code msg
登出成功 kLogoutSuccess null或者错误信息的简单描述
登出失败 kLogoutFail null或者错误信息的简单描述
举例说明:
--调用用户系统登出功能
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("logout") then
    user_plugin:callFuncWithParam("logout")
end

--处理回调函数	
if code == UserActionResultCode.kLogoutSuccess then  --用户登出成功回调
    --登出成功,游戏相关操作
end
if code == UserActionResultCode.kLogoutFail then  --平台中心退出回调
    --登出失败,游戏相关操作
end

进入平台中心

enterPlatform();
进入平台中心的首页界面。
回调信息:
回调信息 code msg
进入平台中心 kPlatformEnter null或者错误信息的简单描述
退出平台中心 kPlatformBack null或者错误信息的简单描述
举例说明:
--调用用户系统进入平台中心功能
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("enterPlatform")  then
    user_plugin:callFuncWithParam("enterPlatform");
end

--处理回调函数	
if code == UserActionResultCode.kPlatformEnter then  --平台中心进入回调
    --do something
end
if code == UserActionResultCode.kPlatformBack then  --平台中心退出回调
    --do something
end

显示悬浮工具栏

showToolBar(place), param_type:ToolBarPlace
place: 浮动工具栏初始位置,仅第一次进入时有效,之后工具栏会显示在用户最后一 次停留的位置,共有 6 个值可以设置。
对应的状态码 描述
ToolBarPlace.kToolBarTopLeft value=1;左上角
ToolBarPlace.kToolBarTopRight value=2;右上角
ToolBarPlace.kToolBarMidLeft value=3;左边中间
ToolBarPlace.kToolBarMidRight value=4;右边中间
ToolBarPlace.kToolBarBottomLeft value=5;左下角
ToolBarPlace.kToolBarBottomRight value=6;右下角
举例说明:
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("showToolBar")  then
    local param1 = PluginParam:create(ToolBarPlace.kToolBarTopLeft)
    user_plugin:callFuncWithParam("showToolBar", param1)
end

隐藏悬浮工具栏

hideToolBar()
举例说明
--在暂停时隐藏悬浮按钮
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("hideToolBar")  then
    user_plugin:callFuncWithParam("hideToolBar");
end

切换账号

accountSwitch()
游戏方需要在游戏的菜单中添加“切换账号”的入口,方便用户切换账号。
回调信息
回调信息 code msg
切换账号成功 kAccountSwitchSuccess null或者错误信息的简单描述
切换账号失败 kAccountSwitchFail null或者错误信息的简单描述
举例说明
--用户系统调用切换账号功能
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("accountSwitch") then
    user_plugin:callFuncWithParam("accountSwitch");
end


--处理回调函数	
if code == UserActionResultCode.kAccountSwitchSuccess  then   --切换账号成功回调
    --切换账号成功,游戏相关操作
end
if code == UserActionResultCode.kAccountSwitchFail  then   --切换账号失败回调
    --切换账号失败,游戏相关操作
end

退出界面

exit()
游戏退出时调用该函数。
注意:部分渠道SDK要求必须显示渠道的退出界面,例如在返回键或游戏退出按钮调用此接口。
回调信息
回调信息 code msg
确认退出游戏 kExitPage null或者错误信息的简单描述
举例说明:
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("exit") then
    user_plugin:callFuncWithParam("exit");
end

回调函数处理:

if code == UserActionResultCode.kExitPage then
    if msg == "onGameExit" or msg == "onNo3rdExiterProvide" then
        --弹出游戏退出界面
    else
        --执行游戏退出逻辑
    end
elseif code == UserActionResultCode.kGameExitPage then
    --弹出游戏退出界面
end

PS:个别SDK有游戏退出和渠道退出两个回调,请在msg为"onGameExit"(豌豆荚)或"onNo3rdExiterProvide"(有米)弹出游戏退出界面,以后将改成新加的回调code。

暂停界面

pause()
游戏暂停时调用该函数(目前好像除了Android百度游戏单机、iOS百度91,没有别的SDK有这个了)。
回调信息
回调信息 code msg
关闭暂停界面 kPausePage null或者错误信息的简单描述
举例说明:
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("pause") then
    user_plugin:callFuncWithParam("pause")
end

特殊渠道接口

实名注册

realNameRegister()
功能说明:
提供实名注册接口,当游戏方调用防沉迷查询接口时,发现用户未填写实名注册信息时,可调用该 接口发起实名注册。例如:360、华为、联想。
回调信息
回调信息 code msg
实名注册回调 kRealNameRegister 实名注册结果
结果返回 msg
{"status":"success",msg:""}
字段 描述
status success成功,cancel取消,fail失败
msg SDK返回的信息

PS:360的回调信息还没统一格式。

--用户系统调用实名注册
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("realNameRegister") then
    user_plugin:callFuncWithParam("realNameRegister")
end

--处理回调函数	
if code == UserActionResultCode.kRealNameRegister then   --实名注册回调
    --实名注册成功,游戏相关操作
end

防沉迷查询

antiAddictionQuery()
功能说明:
防沉迷系统是中国法律对网游管理的要求,因此游戏必须接入防沉迷查询和实名注册接口。 使用方法:游戏方调用防沉迷查询接口,查询该用户是否已经成年。例如:360、百度、华为、联想。
1、若已成年,则允许用户正常游戏,不做任何提醒。
2、若未成年;或未实名注册的用户将受到防沉迷系统的限制.
开发细则:
游戏过程,会提示游戏用户的累计在线时间。
累计游戏时间超过 3 小时,游戏收益(经验,金钱)减半。此后,每 30 分钟警示一次。累计游戏 时间超过 5 小时,游戏收益为 0。此后,每 15 分钟警示一次。
如果未成年人的累计下线时间已满 5 小时,则累计在线时间清零,如再上线则重新累计在线时间。 详细开发标准请参考:http://baike.baidu.com/view/3615996.htm
接口说明:
防沉迷查询接口可查询用户当前的防沉迷状态,0 为无用户信息,此时需要调用实名注册接口,要求用户进行实名注册。若用户不进行实名注册,则同样视为未满 18 岁的用户,要 受到防沉迷系统的限制。
1 为未成年,当游戏时长达到警戒状态时,需要出防沉迷提示; 2 为已成年,不受防沉迷系统的干扰。
回调信息
回调信息 code msg
防沉迷查询结果回调 kAntiAddictionQuery 防沉迷查询结果
结果返回 msg
{"status":"success","result":"0","msg":""}
字段 描述
status success成功,fail失败
result 0无此用户数据,1未成年,2已成年
msg SDK返回的信息
--用户系统调用防沉迷查询
local user_plugin = agent:getUserPlugin();
if nil ~= user_plugin and user_plugin:isFunctionSupported("antiAddictionQuery") then
    user_plugin:callFuncWithParam("antiAddictionQuery");
end

--处理回调函数	
if code == UserActionResultCode.kAntiAddictionQuery  then   --防沉迷查询结果回调
    --防沉迷查询结果回调,游戏相关操作
end

提交游戏数据接口

submitLoginGameRole(data)
功能说明:
把游戏数据传递到SDK服务端,例如UC、上海益玩、pps、oppo、37玩、飞流、vivo、靠谱助手、松果游戏、玉米助手等SDK需要。
接口说明:
参数为StringMap,Map里面的数据必须为字符串。例:{key1="value1"}
StringMap实际上是一个map,记录了一些游戏的相关信息,开发者需要提供如下参数:
参数 是否必传 参数说明
dataType Y 数据类型,1为进入游戏,2为创建角色,3为角色升级,4为退出
roleId Y 角色ID
roleName Y 角色名称
roleLevel Y 角色等级
zoneId Y 服务器ID
zoneName Y 服务器名称
balance Y 用户余额(RMB购买的游戏币)
partyName Y 帮派、公会等,没有填空字符串
vipLevel Y Vip等级,没有vip系统的传0
roleCTime Y 角色创建时间(单位:秒)(历史角色没记录时间的传-1,新创建的角色必须要)
roleLevelMTime Y 角色等级变化时间(单位:秒)(创建角色和进入游戏时传-1)
举例说明:
local user_plugin = agent:getUserPlugin()
if user_plugin:isFunctionSupported("submitLoginGameRole") then
	local userInfo={};
	userInfo["roleId"] = "123456";
	userInfo["roleName"] = "test";
	userInfo["roleLevel"] = "10";
	userInfo["zoneId"] = "123";
	userInfo["zoneName"] = "test";
	userInfo["dataType"] = "1";
	local data = PluginParam:create(userInfo);
	user_plugin:callFuncWithParam("submitLoginGameRole", data);
end