《用户系统》

获取用户插件对象

local agent = AgentManager:getInstance()
local user_plugin = agent:getUserPlugin()

设置监听

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

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

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

user_plugin:removeListener()

相关接口

初始化

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

回调信息:

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

调用实例:

local function onUserResult( plugin, code, msg )
    if code == UserActionResultCode.kInitSuccess then  --初始化 SDK 成功回调
        -- SDK 初始化成功,login方法需要在初始化成功之后调用
    end
    if code == UserActionResultCode.kInitFail  then   --初始化 SDK 失败回调
        -- SDK 初始化失败,游戏相关处理
    end
end

登录

一、登录流程描述
登录流程

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

二、登录函数
一定要接到初始化SDK成功回调,才可以调登录接口的函数
方法一:login();
方法二:login(info); //param:info(map)
登陆参数可以传入一个 map,可传入服务器 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   --登录成功回调
    --登录成功后,游戏相关处理,使用getUserID()获取用户ID
end
if code == UserActionResultCode.kLoginNetworkError  then   --登录网络出错回调
    --登录失败后,游戏相关处理
end
if code == UserActionResultCode.kLoginCancel  then   --登录取消回调
    --登录失败后,游戏相关处理
end
if code == UserActionResultCode.kLoginFail  then   --登录失败回调
    --登录失败后,游戏相关处理
end

三、当前登录状态 isLogined(), return: bool
您可以通过调用该函数来判断是否已经登录。

四、获取用户唯一标识符
getUserID(), return: string
用户唯一标识符

登出

logout();
注销账号分两种,一种是由开发者在任何场景调用,用来注销当前的登录账号,渠道不一定提供该方法,需要先判断是否支持该方法;另一种是由玩家在平台界面里面选择注销/切换当前的账号,根据SDK的表现来给出LOGOUT/ACCOUNTSWITH回调。 登出回调信息:

回调信息 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 个值可以设置。

回调信息 code
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()
切换账号分两种情况,一种是由开发者在一些场景调用,用来注销当前的登录账号,渠道不一定提供该方法,需要先判断是否支持该方法;另一种是由玩家在平台界面里面,选择退出/切换当前的账号,根据SDK的表现来给出LOGOUT/ACCOUNTSWITH回调。

LOGOUT与ACCOUNTSWITCH回调的区别:如果退出账号后,SDK再拉取登录,登录完成后再给的回调,则AnySDK这边返回ACCOUNTSWITCH的回调。此时可以获取到新的用户ID,若用户ID和之前不同可以初始化游戏重新进入。若SDK只是退出账号,则给LOGOUT回调,用户需要重新调用Login方法用于登录。

回调信息:

回调信息 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   --切换账号成功回调
    --切换账号成功,一般可以做重新获取用户ID,和初始化游戏操作
end
if code == UserActionResultCode.kAccountSwitchFail  then   --切换账号失败回调
    --切换账号失败,游戏相关操作
end

退出界面

exit()
游戏退出时调用该函数。
注意:部分渠道 SDK 要求必须显示渠道的退出界面,例如在返回键或游戏退出按钮调用此接口。
回调信息:

回调信息 code msg
渠道退出界面回调 kExitPage null 或者错误信息的简单描述
游戏退出界面回调 kGameExitPage 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 null 或者错误信息的简单描述

结果返回 msg
{"status":"success",msg:""}

字段 描述
status success 成功,cancel 取消,fail 失败
msg SDK 返回的信息
--用户系统调用实名注册
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 需要。
接口说明:
参数为 table,里面的数据必须为字符串。例:{key1="value1"}
开发者需要提供如下参数:

参数 是否必传 参数说明
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 等级
roleCTime Y 角色创建时间(单位:秒)(历史角色没记录时间的传 -1,新创建的角色必须要)
roleLevelMTime Y 角色等级变化时间(单位:秒)(创建角色和进入游戏时传 -1)

举例说明:

local user_plugin = agent:getUserPlugin()
if user_plugin:isFunctionSupported("submitLoginGameRole") then
    local userInfo = {
        dataType="1",
        roleId="123456",
        roleName="test",
        roleLevel="1",
        zoneId="1",
        zoneName="test",
        balance="1",
        partyName="test",
        vipLevel="1",
        roleCTime="1480318110",
        roleLevelMTime="-1"
    }
    local data = PluginParam:create(userInfo);
    user_plugin:callFuncWithParam("submitLoginGameRole", data)
end

【评论区】