用户系统接口

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

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

接入流程简要描述

1、使用用户系统在AnySDK初始化后必须马上设置监听类,监听回调信息。
2、捕捉到初始化完成的通知后根据需要调用登陆,参见登陆、注销
3、在进入游戏时需要调用悬浮按钮,在暂停时需要调用隐藏悬浮按钮
4、在游戏进入暂停或者游戏从后台恢复的时候,需要调用暂停页接口,参见显示暂停页
5、在退出游戏的时候,需要调用退出页接口,参见显示退出页

6、应用中需要有明显入口进入平台中心,详细 API 参见进入平台中心
7、应用中需要接入切换账号入口,详细 API 参见进入平台中心
8、在游戏销毁时调用destroy接口
9、实现特殊渠道的特殊接口

设置用户系统回调监听

用户系统存在回调信息,需要设置监听,开发者根据不同的回调实现游戏逻辑

AnySDKUser.getInstance().setListener(new AnySDKListener() {
    @Override
    public void onCallBack(int code, String msg) {
        switch(code)
        {
        case UserWrapper.ACTION_RET_INIT_SUCCESS://初始化SDK成功回调
            break;
        case UserWrapper.ACTION_RET_INIT_FAIL://初始化SDK失败回调
            break;
        case UserWrapper.ACTION_RET_LOGIN_SUCCESS://登陆成功回调
            break;
        case UserWrapper.ACTION_RET_LOGIN_TIMEOUT://登陆超时回调
            break;
        case UserWrapper.ACTION_RET_LOGIN_NO_NEED://无需登陆回调
            break;
        case UserWrapper.ACTION_RET_LOGIN_CANCEL://登陆取消回调
            break;
        case UserWrapper.ACTION_RET_LOGIN_FAIL://登陆失败回调
            break;
        case UserWrapper.ACTION_RET_LOGOUT_SUCCESS://登出成功回调
            break;
        case UserWrapper.ACTION_RET_LOGOUT_FAIL://登出失败回调
            break;
        case UserWrapper.ACTION_RET_PLATFORM_ENTER://平台中心进入回调
            break;
        case UserWrapper.ACTION_RET_PLATFORM_BACK://平台中心退出回调
            break;
        case UserWrapper.ACTION_RET_PAUSE_PAGE://暂停界面回调
            break;
        case UserWrapper.ACTION_RET_EXIT_PAGE://退出游戏回调
            break;
        case UserWrapper.ACTION_RET_ANTIADDICTIONQUERY://防沉迷查询回调
            break;
        case UserWrapper.ACTION_RET_REALNAMEREGISTER://实名注册回调
            break;
        case UserWrapper.ACTION_RET_ACCOUNTSWITCH_SUCCESS://切换账号成功回调
            break;
        case UserWrapper.ACTION_RET_ACCOUNTSWITCH_FAIL://切换账号失败回调
            break;
        case UserWrapper.ACTION_RET_OPENSHOP://应用汇特有回调,接受到该回调调出游戏商店界面
            break;
        default:
            break;
        }
    }
});

相关接口

初始化

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

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

登陆

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(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。

Map<String, String> info = new HashMap<String, String>();
info.put("server_id", "2");
info.put("server_url", "http://xxx.xxx.xxx");
info.put("key1", "value1");
info.put("key2", "value2");
AnySDKUser.getInstance().login(info);
在成功初始化插件结束后,您就可以开始调用登录接口了。
登陆回调信息
回调信息 code msg
登陆成功 ACTION_RET_LOGIN_SUCCESS 游戏服务端回传给客户端数据的ext字段
登陆失败 ACTION_RET_LOGIN_FAIL null或者错误信息的简单描述
登陆网络出错 ACTION_RET_LOGIN_TIMEOUT null或者错误信息的简单描述
登陆取消 ACTION_RET_LOGIN_CANCEL null或者错误信息的简单描述
3、当前登陆状态
bool isLogined()
您可以通过调用该函数来判断是否已经登陆。
4、获取用户唯一标示符
std::string getUserID()
用户唯一标示符

登出

void logout();
注销账号分两种,一种是由开发者在任何场景调用,用来注销当前的登录账号;另一种是由玩家在平台界面里面选择注销当前的账号。
登出回调信息
回调信息 code msg
登出成功 ACTION_RET_LOGOUT_SUCCESS null或者错误信息的简单描述
登出失败 ACTION_RET_LOGOUT_FAIL null或者错误信息的简单描述
举例说明:
//调用用户系统登出功能
if (AnySDKUser.getInstance().isFunctionSupported("logout")) {
    AnySDKUser.getInstance().callFunction("logout");
}

进入平台中心

void enterPlatform();
进入平台中心的首页界面。
回调信息:
回调信息 code msg
进入平台中心 ACTION_RET_PLATFORM_ENTER null或者错误信息的简单描述
退出平台中心 ACTION_RET_PLATFORM_BACK null或者错误信息的简单描述
举例说明:
//调用用户系统进入平台中心功能
if (AnySDKUser.getInstance().isFunctionSupported("enterPlatform")) {
    AnySDKUser.getInstance().callFunction("enterPlatform");
}

显示悬浮工具栏

void showToolBar(ToolBarPlace place)
place: 浮动工具栏初始位置,仅第一次进入时有效,之后工具栏会显示在用户最后一 次停留的位置,共有 6 个值可以设置。
对应的状态码 描述
ToolBarPlaceEnum.kToolBarTopLeft value=1;左上角
ToolBarPlaceEnum.kToolBarTopRight value=2;右上角
ToolBarPlaceEnum.kToolBarMidLeft value=3;左边中间
ToolBarPlaceEnum.kToolBarMidRight value=4;右边中间
ToolBarPlaceEnum.kToolBarBottomLeft value=5;左下角
ToolBarPlaceEnum.kToolBarBottomRight value=6;右下角
举例说明:
AnySDKParam param = new AnySDKParam(ToolBarPlaceEnum.kToolBarTopLeft.getPlace());
AnySDKUser.getInstance().callFunction("showToolBar", param);

隐藏悬浮工具栏

void hideToolBar()
举例说明
//在暂停时隐藏悬浮按钮
if (AnySDKUser.getInstance().isFunctionSupported("hideToolBar")) {
    AnySDKUser.getInstance().callFunction("hideToolBar");
}

切换账号

void accountSwitch()
游戏方需要在游戏的菜单中添加“切换账号”的入口,方便用户切换账号。
回调信息
回调信息 code msg
切换账号成功 ACTION_RET_ACCOUNTSWITCH_SUCCESS null或者错误信息的简单描述
切换账号失败 ACTION_RET_ACCOUNTSWITCH_FAIL null或者错误信息的简单描述
举例说明
//用户系统调用切换账号功能
if (AnySDKUser.getInstance().isFunctionSupported("accountSwitch")) {
    AnySDKUser.getInstance().callFunction("accountSwitch");
}

退出界面

void exit()
游戏退出时调用该函数。
注意:部分渠道SDK要求必须显示渠道的退出界面,例如在返回键或游戏退出按钮调用此接口。
回调信息
回调信息 code msg
确认退出游戏 ACTION_RET_EXIT_PAGE null或者错误信息的简单描述
举例说明:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if(keyCode == KeyEvent.KEYCODE_BACK){
         if (AnySDKUser.getInstance().isFunctionSupported("exit")) {
             AnySDKUser.getInstance().callFunction("exit");
             return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

回调函数处理:

switch(arg0)
{
    case UserWrapper.ACTION_RET_EXIT_PAGE://退出游戏回调
        if(arg1 == "onGameExit" || arg1 == "onNo3rdExiterProvide")
        {
            //弹出游戏退出界面
        }
        else
        {
            //执行游戏退出逻辑
        }
        break;
    case UserWrapper.ACTION_RET_GAME_EXIT_PAGE:
        //弹出游戏退出界面
        break;
}

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

暂停界面

void pause()
游戏暂停时调用该函数(目前好像除了Android百度游戏单机、iOS百度91,没有别的SDK有这个了)。
回调信息
回调信息 code msg
关闭暂停界面 ACTION_RET_PAUSE_PAGE null或者错误信息的简单描述
举例说明:
//判断是否由后台切回
public boolean isAppOnForeground() {
    ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
    String packageName = getApplicationContext().getPackageName();
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    if (appProcesses == null)
        return false;
    for (RunningAppProcessInfo appProcess : appProcesses) {
        if (appProcess.processName.equals(packageName)
        && appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
	return true;
        }
    }
return false;
} 
private boolean isAppForeground = true;

@Override
protected void onStop() {
    super.onStop();
    if(!isAppOnForeground()){
        isAppForeground = false;
    }
}	
@Override
protected void onResume() {	
    super.onResume();
    if(!isAppForeground){
        AnySDKUser.getInstance().callFunction("pause");
        isAppForeground = true;			
    }
 }

特殊渠道接口

实名注册

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

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

//用户系统调用实名注册
if(AnySDKUser.getInstance().isFunctionSupported("realNameRegister"))
{
    AnySDKUser.getInstance().callFunction("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
防沉迷查询结果回调 ACTION_RET_ANTIADDICTIONQUERY 防沉迷查询结果
结果返回 msg
{"status":"success","result":"0","msg":""}
字段 描述
status success成功,fail失败
result 0无此用户数据,1未成年,2已成年
msg SDK返回的信息
//用户系统调用防沉迷查询
if(AnySDKUser.getInstance().isFunctionSupported("antiAddictionQuery"))
{
    AnySDKUser.getInstance().callFunction("antiAddictionQuery");
}

提交游戏数据接口

void submitLoginGameRole(Map<String, String> data)
功能说明:
把游戏数据传递到SDK服务端,例如UC、上海益玩、pps、oppo、37玩、飞流、vivo、靠谱助手、松果游戏、玉米助手等SDK需要。
接口说明:
记录了一些游戏的相关信息,开发者需要提供如下参数:
参数 是否必传 参数说明
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)
举例说明:
if(AnySDKUser.getInstance().isFunctionSupported("submitLoginGameRole"))
{
    Map<String, String> map = new HashMap<String, String>();
    map.put("roleId", "123456");
    map.put("roleName","test");
    map.put("roleLevel", "10");
    map.put("zoneId", "123");
    map.put("zoneName", "test");
    map.put("balance","0");
    map.put("partyName","无");
    map.put("vipLevel","0");
    map.put("dataType","1");

    AnySDKParam param = new AnySDKParam(map);
    AnySDKUser.getInstance().callFunction("submitLoginGameRole",param);
}