用户系统接口

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

设置监听

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

class PluginChannel:public UserActionListener
{
public:
    virtual void onActionResult(ProtocolUser* pPlugin, UserActionResultCode code, const char* msg);
}
开发者需要重写onActionResult方法
ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
if(!_pUser) return;
_pUser->setActionListener(this);

相关接口

初始化

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

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

调用实例

switch(code)
{
case kInitSuccess://初始化SDK成功回调
    //SDK初始化成功,游戏相关处理
    break;
case kInitFail://初始化SDK失败回调
    //SDK初始化失败,游戏相关处理
    break;
}

登陆

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;
info["server_id"] = "2";
info["server_url"] = "http://xxx.xxx.xxx";
info["key1"] = "value1";
info["key2"] = "value2";
_pUser->login(info);
在成功初始化插件结束后,您就可以开始调用登录接口了。
登陆回调信息
回调信息 code msg
登陆成功 kLoginSuccess 游戏服务端回传给客户端数据的ext字段
登陆失败 kLoginFail null或者错误信息的简单描述
登陆网络出错 kLoginNetworkError null或者错误信息的简单描述
登陆取消 kLoginCancel null或者错误信息的简单描述
举例说明
//调用用户系统登陆功能
void PluginChannel::login()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser) return;
    _pUser->login();
}
//处理回调函数	
switch(code)
{
case kLoginSuccess://登陆成功回调
    //登陆成功后,游戏相关处理
    break;
case kLoginTimeOut://登陆超时回调
case kLoginCancel://登陆取消回调
case kLoginFail://登陆失败回调
    //登陆失败后,游戏相关处理
    break;
}
3、当前登陆状态
bool isLogined()
您可以通过调用该函数来判断是否已经登陆。
4、获取用户唯一标示符
std::string getUserID()
用户唯一标示符

登出

void logout();
注销账号分两种,一种是由开发者在任何场景调用,用来注销当前的登录账号;另一种是由玩家在平台界面里面选择注销当前的账号。
登出回调信息
回调信息 code msg
登出成功 kLogoutSuccess null或者错误信息的简单描述
登出失败 kLogoutFail null或者错误信息的简单描述
举例说明:
//调用用户系统登出功能
void PluginChannel::logout()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("logout")) return;
    _pUser->callFuncWithParam("logout",NULL);
}
//处理回调函数	
switch(code)
{
case kLogoutSuccess://用户登出成功回调
    //登出成功,游戏相关操作
    break;
case kLogoutFail://用户登出失败回调
    //登出失败,游戏相关操作
    break;
}

进入平台中心

void enterPlatform();
进入平台中心的首页界面。
回调信息:
回调信息 code msg
进入平台中心 kPlatformEnter null或者错误信息的简单描述
退出平台中心 kPlatformBack null或者错误信息的简单描述
举例说明:
//调用用户系统进入平台中心功能
void PluginChannel::enterPlatform()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("enterPlatform")) return;
    _pUser->callFuncWithParam("enterPlatform",NULL);
}
//处理回调函数	
switch(code)
{
case kPlatformEnter://平台中心进入回调
    break;
case kPlatformBack://平台中心退出回调
    break;
}

显示悬浮工具栏

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;右下角
举例说明:
void PluginChannel::showToolBar()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("showToolBar")) return;
    PluginParam paramInfo(place);
    _pUser->callFuncWithParam("showToolBar",&paramInfo,NULL);
}

隐藏悬浮工具栏

void hideToolBar()
举例说明
void PluginChannel::hideToolBar()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("hideToolBar")) return;
    _pUser->callFuncWithParam("hideToolBar",NULL);
}

切换账号

void accountSwitch()
游戏方需要在游戏的菜单中添加“切换账号”的入口,方便用户切换账号。
回调信息
回调信息 code msg
切换账号成功 kAccountSwitchSuccess null或者错误信息的简单描述
切换账号失败 kAccountSwitchFail null或者错误信息的简单描述
举例说明
//用户系统调用切换账号功能
void PluginChannel::accountSwitch()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("accountSwitch")) return;
    _pUser->callFuncWithParam("accountSwitch",NULL);
}
//处理回调函数	
switch(code)
{
case kAccountSwitchSuccess://切换账号成功回调
//切换账号成功,游戏相关操作
	break;
case kAccountSwitchFail://切换账号失败回调
//切换账号失败,游戏相关操作
	break;

}

退出界面

void exit()
游戏退出时调用该函数。
注意:部分渠道SDK要求必须显示渠道的退出界面,例如在返回键或游戏退出按钮调用此接口。
回调信息
回调信息 code msg
确认退出游戏 kExitPage null或者错误信息的简单描述
举例说明:
//判断是否点击返回键(如果游戏所用引擎可以监听返回按键就不用在onKeyDown通过jni调用了)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK){
        if (wrapper.isFunctionSupported("exit")) {
            wrapper.nativeExit();
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
//jni调用exit功能
void Java_com_ansdk_sample_wrapper_nativeExit(JNIEnv*  env, jobject thiz)
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("exit")) return;
    _pUser->callFuncWithParam("exit",NULL);
}

回调函数处理:

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

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

暂停界面

void pause()
游戏暂停时调用该函数(目前好像除了Android百度游戏单机、iOS百度91,没有别的SDK有这个了)。
回调信息
回调信息 code msg
退出暂停界面 kPausePage 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){
        wrapper.nativePause();//通过jni调用pause接口
        isAppForeground = true;			
    }
}
//jni调用pause功能
void Java_com_anysdk_sample_wrapper_nativePause(JNIEnv*  env, jobject thiz)
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("pause")) return;
    _pUser->callFuncWithParam("pause",NULL);
}

特殊渠道接口

实名注册

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

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

//用户系统调用实名注册
void PluginChannel::realNameRegister()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("realNameRegister")) return;
    _pUser->callFuncWithParam("realNameRegister",NULL);
}
//处理回调函数	
switch(code)
{
case kRealNameRegister://实名注册回调
//实名注册成功,游戏相关操作
    break;
}

防沉迷查询

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返回的信息
//用户系统调用防沉迷查询
void PluginChannel::antiAddictionQuery()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("antiAddictionQuery")) return;
    _pUser->callFuncWithParam("antiAddictionQuery",NULL);
}
//处理回调函数	
switch(code)
{
case kAntiAddictionQuery://防沉迷查询结果回调
//防沉迷查询结果回调,游戏相关操作
    break;
}

提交游戏数据接口

void submitLoginGameRole(StringMap *data)
功能说明:
把游戏数据传递到SDK服务端,例如UC、上海益玩、pps、oppo、37玩、飞流、vivo、靠谱助手、松果游戏、玉米助手等SDK需要。
接口说明:
参数为StringMap,Map里面的数据必须为字符串。
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)
举例说明:
void PluginChannel::submitLoginGameRole()
{
    ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
    if(!_pUser || !isFunctionSupported("submitLoginGameRole")) return;
    StringMap userInfo;
    userInfo["roleId"] = "123456";
    userInfo["roleName"] = "test";
    userInfo["roleLevel"] = "10";
    userInfo["zoneId"] = "123";
    userInfo["zoneName"] = "test";
    userInfo["balance"] = "0";
    userInfo["partyName"] = "无";
    userInfo["vipLevel"] = "0";
    userInfo["dataType"] = "1";
    PluginParam data(userInfo);
    _pUser->callFuncWithParam("submitLoginGameRole",&paramInfo,NULL);
}