《用户系统》

用户系统接口包含登陆、注销、切换账号、平台中心、显示悬浮按钮、隐藏悬浮按钮、显示退出页、显示暂停页等渠道相关功能。

设置监听

用户系统存在回调信息,需要设置监听,开发者根据不同的回调实现游戏逻辑 社交系统存在回调信息,需要设置监听类以及监听方法。

AnySDKUser.getInstance () .setListener (this,"UserExternalCall");

开发者需要设置监听方法

void UserExternalCall(string msg)
{
    Debug.Log("UserExternalCall("+ msg+")");
    Dictionary<string,string> dic = AnySDKUtil.stringToDictionary (msg);
    int code = Convert.ToInt32(dic["code"]);
    string result = dic["msg"];
    switch(code)
    {
    case (int)UserActionResultCode.kInitSuccess://初始化SDK成功回调
        //login方法需要在初始化成功之后调用
        break;
    case (int)UserActionResultCode.kInitFail://初始化SDK失败回调
        //尝试重新初始化,或者退出游戏
        break;
    case (int)UserActionResultCode.kLoginSuccess://登陆成功回调
        //可使用getUserID()获取用户ID
        break;
    case (int)UserActionResultCode.kLoginNetworkError://登陆网络出错回调
    case (int)UserActionResultCode.kLoginCancel://登陆取消回调
    case (int)UserActionResultCode.kLoginFail://登陆失败回调
        break;
    case (int)UserActionResultCode.kLogoutSuccess://登出成功回调
        //一般可以做初始化游戏,并且重新调用登录接口操作
        break;
    case (int)UserActionResultCode.kLogoutFail://登出失败回调
        break;
    case (int)UserActionResultCode.kPlatformEnter://平台中心进入回调
        break;
    case (int)UserActionResultCode.kPlatformBack://平台中心退出回调
        break;
    case (int)UserActionResultCode.kPausePage://暂停界面回调
        break;
    case (int)UserActionResultCode.kExitPage://退出游戏回调
        //参考下方退出界面文档
        break;
    case (int)UserActionResultCode.kAntiAddictionQuery://防沉迷查询回调
        break;
    case (int)UserActionResultCode.kRealNameRegister://实名注册回调
        break;
    case (int)UserActionResultCode.kAccountSwitchSuccess://切换账号成功回调
        //一般可以做重新获取用户ID,和初始化游戏操作
        break;
    case (int)UserActionResultCode.kAccountSwitchFail://切换账号失败回调
        break;
    default:
        break;
    }
}
});

注:回调过来的参数为一个字符串,其中包括(code回调状态)、msg(回调信息)需要调用 AnySDKUtil.stringToDictionary (msg); 获取 Key 和 Value

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

相关接口

初始化

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

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

登陆

1、登陆流程描述
登陆流程

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

2、 登陆函数
一定要接到初始化SDK成功回调,才可以调登录接口的函数
方法一:login();
方法二:login(info); //param:info(map<string, string>)
登陆参数可以传入一个 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

Dictionary<string, string> info = new Dictionary<string, string>();
info["server_id"] = "2";
info["server_url"] = "http://xxx.xxx.xxx";
info["key1"] = "value1";
info["key2"] = "value2";
AnySDKUser.getInstance().login(info);

在成功初始化插件结束后,您就可以开始调用登录接口了。
回调信息:

回调信息 code msg
登陆成功 kLoginSuccess 游戏服务端回传给客户端数据的 ext 字段
登陆失败 kLoginFail null 或者错误信息的简单描述
登陆网络出错 kLoginNetworkError null 或者错误信息的简单描述
登陆取消 kLoginCancel null 或者错误信息的简单描述

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

4、获取用户唯一标识符
std::string getUserID()
用户唯一标示符

登出

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

回调信息 code msg
登出成功 kLogoutSuccess null 或者错误信息的简单描述
登出失败 kLogoutFail null 或者错误信息的简单描述

举例说明:

//调用用户系统登出功能
if( AnySDKUser.getInstance ().isFunctionSupported( "logout" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "logout" );
}

进入平台中心

void enterPlatform();
进入平台中心的首页界面。

回调信息:

回调信息 code msg
进入平台中心 kPlatformEnter null 或者错误信息的简单描述
退出平台中心 kPlatformBack null 或者错误信息的简单描述

举例说明:

//调用用户系统进入平台中心功能
if( AnySDKUser.getInstance ().isFunctionSupported( "enterPlatform" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "enterPlatform" );
}

显示悬浮工具栏

void showToolBar(ToolBarPlace place)
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;右下角

举例说明:

AnySDKParam param = new AnySDKParam((int)ToolBarPlace.kToolBarBottomLeft);
if( AnySDKUser.getInstance ().isFunctionSupported( "showToolBar" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "showToolBar", param );
}

隐藏悬浮工具栏

void hideToolBar()
举例说明:

//在暂停时隐藏悬浮按钮
if( AnySDKUser.getInstance ().isFunctionSupported( "hideToolBar" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "hideToolBar" );
}

切换账号

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

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

回调信息:

回调信息 code msg
切换账号成功 kAccountSwitchSuccess null 或者错误信息的简单描述
切换账号失败 kAccountSwitchFail null 或者错误信息的简单描述

举例说明:

//用户系统调用切换账号功能
if( AnySDKUser.getInstance ().isFunctionSupported( "accountSwitch" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "accountSwitch" );
}

退出界面

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

回调信息:

回调信息 code msg
渠道退出界面回调 kExitPage null 或者错误信息的简单描述
游戏退出界面回调 kGameExitPage null 或者错误信息的简单描述

举例说明:

if( AnySDKUser.getInstance ().isFunctionSupported( "exit" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "exit" );
}

回调函数处理:

//处理回调函数    
switch(code)
{
case (int)UserActionResultCode.kExitPage://退出游戏回调
    if(msg == "onGameExit" || msg == "onNo3rdExiterProvide")
    {
        //弹出游戏退出界面
    }
    else
    {
        //执行游戏退出逻辑
    }
    break;
case (int)UserActionResultCode.kGameExitPage:
    //弹出游戏退出界面
    break;
}

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

暂停界面

void pause()
游戏暂停时调用该函数(目前好像除了 Android 百度游戏单机、iOS 百度 91,没有别的 SDK 有这个了)。

回调信息:

回调信息 code msg
退出暂停界面 kPausePage null 或者错误信息的简单描述

举例说明:

if( AnySDKUser.getInstance ().isFunctionSupported( "pause" ) ) {
    AnySDKUser.getInstance ().callFuncWithParam( "pause" );
}

特殊渠道接口

实名注册

void realNameRegister()
功能说明:
提供实名注册接口,当游戏方调用防沉迷查询接口时,发现用户未填写实名注册信息时,可调用该 接口发起实名注册。例如:360、华为、联想。

回调信息:

回调信息 code msg
实名注册回调 kRealNameRegister 实名注册结果

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

字段 描述
status success 成功,cancel 取消,fail 失败
msg SDK 返回的信息
//用户系统调用实名注册
if(AnySDKUser.getInstance().isFunctionSupported("realNameRegister"))
{
    AnySDKUser.getInstance().callFuncWithParam("realNameRegister");
}

防沉迷查询

void 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 返回的信息
//用户系统调用防沉迷查询
if(AnySDKUser.getInstance().isFunctionSupported("antiAddictionQuery"))
{
    AnySDKUser.getInstance().callFuncWithParam("antiAddictionQuery");
}

提交游戏数据接口

void submitLoginGameRole(Dictionary<string, string> data)
功能说明:
把游戏数据传递到 SDK 服务端,例如 UC、上海益玩、pps、oppo、37 玩、飞流、vivo、靠谱助手、松果游戏、玉米助手等 SDK 需要。
接口说明:
Dictionary 记录了一些游戏的相关信息,开发者需要提供如下参数:

参数 是否必传 参数说明
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)

举例说明:

if(AnySDKUser.getInstance().isFunctionSupported("submitLoginGameRole"))
{
    Dictionary<string, string> map = new Dictionary<string, string>();
    map["dataType"] = "1";
    map["roleId"] = "123456";
    map["roleName"] = "test";
    map["roleLevel"] = "1";
    map["zoneId"] = "1";
    map["zoneName"] = "test";
    map["balance"] = "60";
    map["partyName"] = "test";
    map["vipLevel"] = "1";
    map["roleCTime"] = "1480318110";
    map["roleLevelMTime"] = "-1";
    AnySDKParam param = new AnySDKParam(map);
    AnySDKUser.getInstance().callFuncWithParam("submitLoginGameRole",param);
}

【评论区】