Android 渠道API
<p>[TOC]</p>
<h2>版本记录</h2>
<table>
<thead>
<tr>
<th style="text-align: left;">版本号</th>
<th style="text-align: left;">时间</th>
<th style="text-align: left;">修改内容</th>
<th style="text-align: left;">责任人</th>
<th style="text-align: left;">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">V1.0.0</td>
<td style="text-align: left;">2019/07/31</td>
<td style="text-align: left;">首次编写</td>
<td style="text-align: left;">wesley</td>
<td style="text-align: left;">无</td>
</tr>
<tr>
<td style="text-align: left;">V1.4.5</td>
<td style="text-align: left;">2019/11/26</td>
<td style="text-align: left;">增加判断“渠道接口”是否支持接口</td>
<td style="text-align: left;">max.wang</td>
<td style="text-align: left;">无</td>
</tr>
<tr>
<td style="text-align: left;">V1.5.1</td>
<td style="text-align: left;">2019/12/26</td>
<td style="text-align: left;">增加实名认证接口</td>
<td style="text-align: left;">max.wang</td>
<td style="text-align: left;">增加实名认证接口</td>
</tr>
</tbody>
</table>
<h2>文档简介</h2>
<blockquote>
<p>该文档是 MSSDK 对外的渠道相关API,方便开发者接入渠道,有问题可以 <a href="https://www.showdoc.cc/mssdk?page_id=2615409307929897">联系我们</a>。</p>
</blockquote>
<h2>重要信息</h2>
<p>本文档中涉及到的 <code>错误码</code> 可以参考下面链接的内容。</p>
<ul>
<li>Android SDK 错误码可以参考 <a href="https://www.showdoc.cc/mssdk?page_id=2634523439445568">Android SDK 错误码</a> 文档</li>
</ul>
<h2>事件回调处理</h2>
<blockquote>
<p>主要用于 SDK 通知接入方一些重要的事件信息,如用户切换账号成功,登出和支付成功等事件。</p>
</blockquote>
<p><strong>简要描述:</strong>
对于游戏在整个运行生命周期始终需要关注的结果,如切换账号、登出、支付成功等结果,乐逗SDK将以通知回调的方式进行提供。目前已包含的通知有3个:登出、切换账号、支付成功。只能注册一个通知类回调,使用不同的case来处理不同的通知</p>
<p><strong>函数原型:</strong> </p>
<pre><code class="language-java">public void registNotifyListener(MSLDNotifyListener listener);</code></pre>
<p><strong>函数参数说明:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>事件ID,标识具体事件,详见 [NotifyCode]</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>提示消息</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">Object</td>
<td>事件数据,可能为空</td>
</tr>
</tbody>
</table>
<p><strong>NotifyCode</strong> 定义:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">事件ID</th>
<th style="text-align: left;">说明</th>
<th style="text-align: left;">事件返回数据类型</th>
<th style="text-align: left;">返回数据说明</th>
<th style="text-align: left;">触发场景说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">SWITCH_ACCOUNT</td>
<td style="text-align: left;">用户切换账号</td>
<td style="text-align: left;">[MSLDAccount]</td>
<td style="text-align: left;">切换后的账户对象</td>
<td style="text-align: left;">用户在个人中心选择切换账号后,选择某个账号登录、或用户在绑定手机二选一流程中,选择取回原有时,会触发该事件</td>
</tr>
<tr>
<td style="text-align: left;">LOGOUT</td>
<td style="text-align: left;">退出登录</td>
<td style="text-align: left;">[MSLDAccount]</td>
<td style="text-align: left;">退出登录的账户对象</td>
<td style="text-align: left;">用户在个人中心选择切换账号时,会先退出当前账号,由此触发该事件。用户在使用SDK各项功能过程中,token过期时亦会触发该事件</td>
</tr>
<tr>
<td style="text-align: left;">PAY_SUCCESS</td>
<td style="text-align: left;">支付成功</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">订单信息,数据为RSA加密数据</td>
<td style="text-align: left;">用户支付成功回调,需调用[订单消费结果上报]接口上报订单信息</td>
</tr>
</tbody>
</table>
<p><strong>MSLDAccount</strong>定义:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">字段名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">playerId</td>
<td style="text-align: left;">String</td>
<td>玩家pid</td>
</tr>
<tr>
<td style="text-align: left;">nickName</td>
<td style="text-align: left;">String</td>
<td>昵称</td>
</tr>
<tr>
<td style="text-align: left;">avatarUrl</td>
<td style="text-align: left;">String</td>
<td>头像 url 地址</td>
</tr>
<tr>
<td style="text-align: left;">phoneNumber</td>
<td style="text-align: left;">String</td>
<td>手机号(第四位到第七位为*)</td>
</tr>
<tr>
<td style="text-align: left;">phoneBound</td>
<td style="text-align: left;">boolean</td>
<td>是否已绑定手机</td>
</tr>
<tr>
<td style="text-align: left;">realnameVerified</td>
<td style="text-align: left;">boolean</td>
<td>是否已登记实名信息</td>
</tr>
<tr>
<td style="text-align: left;">newPlayer</td>
<td style="text-align: left;">boolean</td>
<td>是否为新用户</td>
</tr>
<tr>
<td style="text-align: left;">openId</td>
<td style="text-align: left;">String</td>
<td>乐逗open_id</td>
</tr>
<tr>
<td style="text-align: left;">sessionId</td>
<td style="text-align: left;">String</td>
<td>登录sessionID</td>
</tr>
<tr>
<td style="text-align: left;">gameId</td>
<td style="text-align: left;">String</td>
<td>乐逗game_id</td>
</tr>
<tr>
<td style="text-align: left;">passwordSetted</td>
<td style="text-align: left;">boolean</td>
<td>是否设置密码</td>
</tr>
<tr>
<td style="text-align: left;">realName</td>
<td style="text-align: left;">String</td>
<td>姓名</td>
</tr>
<tr>
<td style="text-align: left;">lastLoginTime</td>
<td style="text-align: left;">String</td>
<td>最后登录时间</td>
</tr>
</tbody>
</table>
<p>订单信息定义:</p>
<blockquote>
<p>数据为RSA加密数据,需游戏使用公钥进行解密,为防止数据被篡改,不建议在JAVA层进行解密
公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa123Ng6hJxk4KwzAisNQiceR7
uw+r2+lHnKPMiEc6cNo1CjwjcIZ9uA+Q4tRlPh2OG4a6JOpYttoaBx0OCrhiz3gP
uE8m7uYaA6PBvvk1zRXdwXqO0hvMMeOX6Bm07jfpmZNiMs7c8s31ekwxeaQNR4Ue
EcDM71nr/axUd8mw2wIDAQAB
解密后是 JSON数据,详情见 订单数据示例。
仅有success和status均为0的情况标识支付成功且可下发道具,详情见DEMO</p>
</blockquote>
<table>
<thead>
<tr>
<th style="text-align: left;">字段名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">orderId</td>
<td style="text-align: left;">String</td>
<td>订单号</td>
</tr>
<tr>
<td style="text-align: left;">extraInfo</td>
<td style="text-align: left;">String</td>
<td>支付透彻信息</td>
</tr>
<tr>
<td style="text-align: left;">success</td>
<td style="text-align: left;">String</td>
<td>支付状态:0是成功 / 非0是失败</td>
</tr>
<tr>
<td style="text-align: left;">status</td>
<td style="text-align: left;">String</td>
<td>订单消费状态: 0是已消费 / 非0是未消费</td>
</tr>
</tbody>
</table>
<p>订单数据示例:</p>
<pre><code class="language-java">{
"code": 200,
"msg": "success",
"result": [{
"orderId": "DD9440002176",
"openid": "0dbe69773dafcba60078c8213925efaf",
"amount": "0.01",
"actualAmount": "0.01",
"success": "0",
"gameparam": "paycallback",
"extraInfo": "9e44cdb1-0044-485b-bcac-dec5744b4d36",
"created": "1546506569",
"currency": "",
"act_currency": "CNY",
"sign": "b4042bff13b666cd499f80d1471a793b",
"status": "0"
}]
}</code></pre>
<p><strong>接口示例:</strong> </p>
<pre><code class="language-java">MSLDSDK.registerNotifyListener(new MSLDNotifyListener() {
@Override
public void notify(int code, String msg, Object data) {
switch (code) {
case NotifyCode.SWITCH_ACCOUNT:
// 切换账号成功
MSLDAccount account = (MSLDAccount )data;
break;
case NotifyCode.LOGOUT:
// 登出
break;
case NotifyCode.PAY_SUCCESS:
// 支付成功通知
break;
default:
// 其他
break;
}
}
});</code></pre>
<h2>异步回调接口</h2>
<blockquote>
<p>SDK 异步回调的函数原型。以下 API 接口中有使用该回调函数。
接口:MSLDCallback</p>
</blockquote>
<p><strong>成功函数原型:</strong></p>
<pre><code class="language-java">void onSuccess(String msg, T data);</code></pre>
<p><strong>成功函数参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">T</td>
<td>成功结果对象,可能为null</td>
</tr>
</tbody>
</table>
<p><strong>失败函数原型:</strong></p>
<pre><code class="language-java">void onFail(int code, String msg, Object errorData);</code></pre>
<p><strong>失败函数参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误状态码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>错误结果对象,可能为null</td>
</tr>
</tbody>
</table>
<h2>API详情</h2>
<h3>摘要</h3>
<blockquote>
<p>包路径:com.ms.sdk.api
类: MSLDSDK
描述:SDK唯一提供给游戏接入的API入口类,SDK所有对外开放的接口都将通过该类统一输出</p>
</blockquote>
<h4>1. 初始化</h4>
<p><strong>简要描述:</strong>
初始化 SDK,建议在游戏主Activity的onCreate()中调用。</p>
<p><strong>函数原型:</strong> </p>
<pre><code class="language-java">void initSDK(Activity activity, MSLDCallback callback);</code></pre>
<p><strong>函数参数说明:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">this</td>
<td style="text-align: left;">Activity</td>
<td>游戏主Activity</td>
</tr>
<tr>
<td style="text-align: left;">callback</td>
<td style="text-align: left;">MSLDCallback</td>
<td>初始化回调</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong>
可以参考 异步回调接口 的说明。</p>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.getInstance().initSDK(this, new MSLDCallback() {
@Override
void onSuccess(String msg, Object data) {
show("初始化成功");
}
@Override
void onFail(int code, String msg, Object errorData) {
show("初始化失败");
}
});</code></pre>
<h4>2. 渠道接口</h4>
<blockquote>
<p>提供联运渠道(查询接口是否支持、登录、登出、支付、打开浮窗、关闭浮窗、获取实名信息、打开实名认证 、数据上报、退出)功能。</p>
</blockquote>
<h5>2.1 出现渠道接口是否支持</h5>
<p><strong>简要描述</strong></p>
<p>乐逗统一封装各类渠道SDK ,有些渠道并不能完整提供以下接口:登录、登出、支付、打开浮窗、关闭浮窗、获取实名信息、打开实名认证 、数据上报、退出,
所以在接入乐逗封装的以上接口之前要判断渠道是否支持以上接口。</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">查询接口是否支持</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_PROXY_IS_SUPPORT</td>
</tr>
</tbody>
</table>
<p><strong>参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">查询接口名称</td>
</tr>
</tbody>
</table>
<p><strong>查询接口名称说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">接口名称</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_LOGIN</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">登陆</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_PAY</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">支付</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_LOGOUT</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">登出</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_REPORT</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">数据上报</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_FOAT_VIEW</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">打开、关闭浮窗</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_EXIT</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">退出</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_GETCERTIFICATION</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">获取实名信息</td>
</tr>
<tr>
<td style="text-align: left;">ChannelParam.KEY_CHANNEL_SUPPORT_KEY_CALLCERTIFICATION</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">打开实名信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">HashMap<String, Object> map = new HashMap<String, Object>();
map.put(ChannelParam.KEY_CHANNEL_SUPPORT_KEY, ChannelParam.KEY_CHANNEL_SUPPORT_KEY_LOGIN);
boolean isSupportLogin =MSLDSDK.syncAction(activity, ChannelPath.ROUTE_CHANNEL_PROXY_IS_SUPPORT, map);</code></pre>
<h5>2.2 登录</h5>
<p><strong>简要描述</strong></p>
<p>拉起渠道登录界面</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">登录</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_LOGIN</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">account</td>
<td style="text-align: left;">MSLDAccount</td>
<td>登录成功的用户信息,同公版</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_LOGIN, new HashMap<>(), new
MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
loginSuccess((MSLDAccount) data);
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg(msg);
}
});</code></pre>
<h5>2.3 支付</h5>
<p><strong>简要描述</strong></p>
<p>拉起渠道支付界面</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">支付</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_PAY</td>
</tr>
</tbody>
</table>
<p><strong>参数说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">PaymentParam.PAY_PLAYER_ID</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">玩家编号</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_MCH_ORDER_NO</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">商户订单号,即游戏CP订单号, 选填</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_PRODUCT_DES</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">商品描述</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_PRODUCT_NAME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">商品名称</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_SUBJECT</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">订单标题</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_PRICE</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">价格 ,值为float类型字符串</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_ATTACH</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">透传字段,创建成功和查询接口会原样返回</td>
</tr>
<tr>
<td style="text-align: left;">PaymentParam.PAY_PRODUCT_ID</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">道具ID</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java"> HashMap<String, Object> map = new HashMap<String, Object>();
HashMap<String, Object> map = new HashMap<String, Object>();
// 商品支付 直接传入价格
map.put(PaymentParam.PAY_PRODUCT_NAME, "商品支付道具名称");
map.put(PaymentParam.PAY_MCH_ORDER_NO, "123456");
map.put(PaymentParam.PAY_PRODUCT_DES, "平台支付描述");
map.put(PaymentParam.PAY_SUBJECT, "平台支付订单标题");
map.put(PaymentParam.PAY_PRICE, "6");
map.put(PaymentParam.PAY_ATTACH, "透传信息");
// 平台支付 传入道具ID
map.put(PaymentParam.PAY_MCH_ORDER_NO, "123456");
map.put(PaymentParam.PAY_SUBJECT, "平台支付订单标题");
map.put(PaymentParam.PAY_ATTACH, "透传信息");
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(PaymentParam.PAY_PRODUCT_ID, "test_product_ID");
jsonObject.addProperty(PaymentParam.PAY_QUANTITY, 1);
JsonArray jsonArray = new JsonArray();
jsonArray.add(jsonObject);
map.put(PaymentParam.PAY_PRODUCT_LIST, jsonArray.toString());
MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_PAY, map, new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg("渠道支付成功 " + msg);
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg("渠道支付失败 " + msg);
}
});</code></pre>
<h5>2.4 登出</h5>
<p><strong>简要描述</strong></p>
<p>调用渠道登出接口</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">登出</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_LOGOUT</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_LOGOUT, new HashMap<>(), new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg("登出成功 " + msg);
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg("登出失败 " + msg);
}
});</code></pre>
<h5>2.5 切换账号</h5>
<p><strong>简要描述</strong>
调用渠道切换账号接口</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">切换账号</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_CHANGE_ACCOUNT</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_CHANGE_ACCOUNT, new HashMap<>(), new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg("切换成功 " + msg);
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg("切换失败 " + msg);
}
});</code></pre>
<h5>2.6 退出</h5>
<p><strong>简要描述</strong></p>
<p>调用渠道退出接口</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">退出</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_EXIT</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_EXIT, new HashMap<>(), new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg(msg);
MSLog.i("channel-test", "method.callback ==> EXIT ==> success");
System.exit(0);
}
@Override
public void onFail(int code, String msg, Object errorData) {
MSLog.i("channel-test", "method.callback ==> EXIT ==> Cancel");
showMsg(msg);
}
});</code></pre>
<h5>2.7 显示悬浮窗</h5>
<p><strong>简要描述</strong></p>
<p>调用渠道悬浮窗接口
需要在游戏Activity的onResume生命周期函数和游戏内登录成功后调用。</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">显示悬浮窗</td>
<td style="text-align: left;">同步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_SHOW_FLOAT_VIEW</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java"> MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_SHOW_FLOAT_VIEW, new HashMap<>(), new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg("显示成功 " + msg);
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg("显示失败 " + msg);
}
});</code></pre>
<h5>2.8 关闭悬浮窗</h5>
<p><strong>简要描述</strong></p>
<p>拉起渠道关闭悬浮窗接口
需要在游戏Activity的onPause生命周期函数中调用。</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">关闭悬浮窗</td>
<td style="text-align: left;">同步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_DISMISS_FLOAT_VIEW</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_DISMISS_FLOAT_VIEW, new HashMap<>(), new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg("关闭成功 " + msg);
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg("关闭失败 " + msg);
}
});</code></pre>
<h5>2.9 数据上报</h5>
<p><strong>简要描述</strong>
数据统计接口,根据不同场景的统计点进行数据上报</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">数据上报</td>
<td style="text-align: left;">同步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_REPORT</td>
</tr>
</tbody>
</table>
<p><strong>参数说明:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">this</td>
<td style="text-align: left;">Activity</td>
<td>游戏主Activity</td>
</tr>
<tr>
<td style="text-align: left;">reprort</td>
<td style="text-align: left;">HasMap</td>
<td>上报数据,参考ReprortBean</td>
</tr>
<tr>
<td style="text-align: left;">callback</td>
<td style="text-align: left;">MSLDCallback</td>
<td>初始化回调</td>
</tr>
</tbody>
</table>
<p><strong>Reprort</strong>定义:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">常量名称</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">常量值(示例)</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_DATA_TYPE</td>
<td style="text-align: left;">int</td>
<td style="text-align: left;">DATA_KEY_DATA_TYPE_CREATE_ROLE 创建角色 <br> DATA_KEY_DATA_TYPE_ROLE_UPGRAD 角色升级 <br> DATA_KEY_DATA_TYPE_SERVICE_INFO <br>DATA_KEY_DATA_TYPE_LOGIN 登录 <br> DATA_KEY_DATA_TYPE_ENTER_GAME 进入游戏 <br> DATA_KEY_DATA_TYPE_CHARGE 支付 <br>DATA_KEY_DATA_TYPE_SELECT_SERVER 选择服务器 <br>DATA_KEY_DATA_TYPE_EXIT 退出</td>
<td>以上所有统计场景必须全部接入</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_ROLE_ID</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"111"</td>
<td>当前登录的玩家角色ID</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_ROLE_NAME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"战士"</td>
<td>当前登录的玩家角色名</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_SERVER_ID</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"11"</td>
<td>当前登录的游戏服ID</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_SERVER_NAME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">预发布服</td>
<td>当前登录的游戏服名称</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_BALANCE</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"102"</td>
<td>当前用户游戏币余额</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_VIP_LEVEL</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"2"</td>
<td>当前用户VIP等级</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_PARTY_NAME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"水果派"</td>
<td>当前用户所属帮派</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_ZONE_IDL</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"1"</td>
<td>当前用户的区ID</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_ZONE_NAME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">"阿狸一区"</td>
<td>当前用户的区名称</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_ROLE_CREATE_TIME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">System.currentTimeMillis() / 1000</td>
<td>角色创建时间(单位:秒),该时间请务必传入服务端真实角色创建时间</td>
</tr>
<tr>
<td style="text-align: left;">DlogParam.DATA_KEY_ROLE_LEVEL_TIME</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">System.currentTimeMillis() / 1000</td>
<td>角色等级变化时间(单位:秒),该时间请务必传入服务端真实角色升级时间</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java"> HashMap<String, Object> map = new HashMap<String, Object>();
map.put(DlogParam.DATA_STAT_TYPE, DlogParam.DATA_STAT_TYPE_LOGIN);
map.put(DlogParam.DATA_KEY_ROLE_ID, "12234556");
map.put(DlogParam.DATA_ROLE_LEVEL, "23");
map.put(DlogParam.DATA_KEY_ROLE_NAME, "role_name_test");
map.put(DlogParam.DATA_KEY_SERVER_ID, "123123");
map.put(DlogParam.DATA_KEY_SERVER_NAME, "server_name");
map.put(DlogParam.DATA_KEY_ROLE_COMBAT_VALUE, "100");
map.put(DlogParam.DATA_KEY_ROLE_POINT_VALUE, "50");
map.put(DlogParam.DATA_KEY_ROLE_BALANCE, "501");
map.put(DlogParam.DATA_KEY_ROLE_VIP, "9");
map.put(DlogParam.DATA_KEY_ZONE_ID, "56");
map.put(DlogParam.DATA_KEY_ZONE_NAME, "zone");
map.put(DlogParam.DATA_KEY_ROLE_CREATE_TIME, System.currentTimeMillis());
MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_REPORT, map, new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
showMsg("渠道上报完成 " + msg);
MSLog.i("channel-test", "method.callback ==> roleInfoReport ==> success");
}
@Override
public void onFail(int code, String msg, Object errorData) {
showMsg(msg);
}
});</code></pre>
<h5>2.10 获取实名信息</h5>
<p><strong>简要描述</strong></p>
<p>获取实名信息</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">关闭悬浮窗</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_PROXY_GET_CERTIFICATION</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_PROXY_GET_CERTIFICATION, null, new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
int ret = Integer.parseInt(msg);
switch(ret){
//无法确认实名信息
case ChannelParam.KEY_CHANNEL_CERTIFICATION_UNKNOWN:
break;
//未实名
case ChannelParam.KEY_CHANNEL_CERTIFICATION_UNNAMED:
break;
//未成年
case ChannelParam.KEY_CHANNEL_CERTIFICATION_CHILDREN:
break;
//成年
case ChannelParam.KEY_CHANNEL_CERTIFICATION_ADULT:
break;
//已经实名,不知年龄
case ChannelParam.KEY_CHANNEL_CERTIFICATION_NAMED:
break;
}
}
@Override
public void onFail(int code, String msg, Object errorData) {
}
});</code></pre>
<h5>2.11 打开实名认证</h5>
<p><strong>简要描述</strong></p>
<p>打开实名认证,并返回实名信息</p>
<p><strong>功能说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">功能名称</th>
<th style="text-align: left;">调用类型</th>
<th style="text-align: left;">功能标识</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">关闭悬浮窗</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ChannelPath.ROUTE_CHANNEL_PROXY_CALLCERTIFICATION</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>错误码</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">String</td>
<td>错误详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">Object</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-java">MSLDSDK.action(activity, ChannelPath.ROUTE_CHANNEL_PROXY_CALLCERTIFICATION, null, new MSLDCallback() {
@Override
public void onSuccess(String msg, Object data) {
int ret = Integer.parseInt(msg);
switch(ret){
//无法确认实名信息
case ChannelParam.KEY_CHANNEL_CERTIFICATION_UNKNOWN:
break;
//未实名
case ChannelParam.KEY_CHANNEL_CERTIFICATION_UNNAMED:
break;
//未成年
case ChannelParam.KEY_CHANNEL_CERTIFICATION_CHILDREN:
break;
//成年
case ChannelParam.KEY_CHANNEL_CERTIFICATION_ADULT:
break;
//已经实名,不知年龄
case ChannelParam.KEY_CHANNEL_CERTIFICATION_NAMED:
break;
}
}
@Override
public void onFail(int code, String msg, Object errorData) {
}
});</code></pre>