菲鱼安卓SDK对接文档
<p>[TOC]</p>
<h3>1、按配置说明配置好相关参数和引入SDK,详见配置说明</h3>
<h3>2、SDK初始化 (必须)</h3>
<pre><code>//初始化
GameBaseSDK.init(context);
//初始化完成后可通过getInstance()方法获取SDK实例,注意getInstance()需要在init完成后调用;
GameBaseSDK lwsdk = GameBaseSDK.getInstance();
</code></pre>
<p>CP需要在工程 Application 或者主进程其他位置尽早对 SDK 进行初始化。</p>
<h3>3、登录(必须)</h3>
<pre><code>// ApiCallback 为SDK的回调,登录完成会调用onSuccess(String result)
GameBaseSDK.getInstance().doLogin(this, new ApiCallback() {
public void onSuccess(String resultMsg) {
Log.d(&quot;Tag&quot;, &quot;登录成功响应:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {
Log.e(&quot;Tag&quot;, &quot;登录失败响应:&quot; + resultMsg);
}
});
</code></pre>
<p>该接口参数为当前 Context 及结果回调,成功回调结果resultMsg为一个json字符串,详细参数见下</p>
<h5>回调参数说明3</h5>
<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;">game</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>游戏标识</td>
</tr>
<tr>
<td style="text-align: left;">uid </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>用户UID</td>
</tr>
<tr>
<td style="text-align: left;">token </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>用户登录态,用于服务端登录校验,<strong><em>注意token有效期为5分钟,服务端需要在5分钟内完成校验</em></strong></td>
</tr>
<tr>
<td style="text-align: left;">user_account</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>账号(用户账号可更改,请以uid做为用户唯一标识)</td>
</tr>
<tr>
<td style="text-align: left;">channel</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>h5/weixin</td>
</tr>
<tr>
<td style="text-align: left;">source_id</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>用户广告ID</td>
</tr>
<tr>
<td style="text-align: left;">real_name_stat</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>用户实名状态,0未实名,1实名且成年,2实名未成年</td>
</tr>
</tbody>
</table>
<h3>4、 创角上报 (必须)</h3>
<pre><code>try {
JSONObject params = new JSONObject();
params.put(&quot;roleId&quot;, &quot;10012154&quot;); //String roleId 角色ID
params.put(&quot;userName&quot;, &quot;角色名称&quot;); //String userName 角色名称
params.put(&quot;serverId&quot;, &quot;服务器ID&quot;); //String serverId 服务器ID
params.put(&quot;serverName&quot;, &quot;服务器名称&quot;); //String serverName 服务器名称
params.put(&quot;roleLevel&quot;, 100);//int roleLevel 角色等级
GameBaseSDK.getInstance().setCreateRoleEvent(params, new ApiCallback() {
public void onSuccess(String resultMsg) {
Log.d(&quot;lwSDK&quot;, &quot;:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {}
});
} catch (JSONException e) {
e.printStackTrace();
}
</code></pre>
<p>其中params为一个JSON对象,params参数说明见下</p>
<h5>params参数说明4</h5>
<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;">roleId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色ID</td>
</tr>
<tr>
<td style="text-align: left;">userName </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色名称</td>
</tr>
<tr>
<td style="text-align: left;">serverId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>服务器ID</td>
</tr>
<tr>
<td style="text-align: left;">serverName</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>服务器名称</td>
</tr>
<tr>
<td style="text-align: left;">roleLevel</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>角色等级</td>
</tr>
</tbody>
</table>
<h3>5、 角色登录上报 (必须)</h3>
<pre><code>
try {
JSONObject params = new JSONObject();
params.put(&quot;roleId&quot;, &quot;10012154&quot;); //String roleId 角色ID
params.put(&quot;userName&quot;, &quot;角色名称&quot;); //String userName 角色名称
params.put(&quot;serverId&quot;, &quot;服务器ID&quot;); //String serverId 服务器ID
params.put(&quot;serverName&quot;, &quot;服务器名称&quot;); //String serverName 服务器名称
params.put(&quot;roleLevel&quot;, 100);//int roleLevel 角色等级
GameBaseSDK.getInstance().setRoleLoginEvent(params, new ApiCallback() {
public void onSuccess(String resultMsg) {
Log.d(&quot;lwSDK&quot;, &quot;:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {}
});
} catch (JSONException e) {
e.printStackTrace();
}
</code></pre>
<p>其中params为一个JSON对象,params参数同创角上报,所有参数都必传</p>
<h5>params参数说明5</h5>
<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;">roleId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色ID</td>
</tr>
<tr>
<td style="text-align: left;">userName </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色名称</td>
</tr>
<tr>
<td style="text-align: left;">serverId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>服务器ID</td>
</tr>
<tr>
<td style="text-align: left;">serverName</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>服务器名称</td>
</tr>
<tr>
<td style="text-align: left;">roleLevel</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>角色等级</td>
</tr>
</tbody>
</table>
<h3>6、 角色信息更新</h3>
<pre><code>try {
JSONObject params = new JSONObject();
params.put(&quot;roleId&quot;, &quot;10012154&quot;); //String roleId 角色ID
params.put(&quot;userName&quot;, &quot;角色名称&quot;); //String userName 角色名称
params.put(&quot;serverId&quot;, &quot;服务器ID&quot;); //String serverId 服务器ID
params.put(&quot;serverName&quot;, &quot;服务器名称&quot;); //String serverName 服务器名称
params.put(&quot;roleLevel&quot;, 100);//int roleLevel 角色等级
GameBaseSDK.getInstance().setUpdateRole(params, new ApiCallback() {
public void onSuccess(String resultMsg) {
Log.d(&quot;lwSDK&quot;, &quot;:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {}
});
} catch (JSONException e) {
e.printStackTrace();
}
</code></pre>
<p>其中params为一个JSON对象,params参数同创角上报,所有参数都必传</p>
<h5>params参数说明6</h5>
<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;">roleId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色ID</td>
</tr>
<tr>
<td style="text-align: left;">userName </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色名称</td>
</tr>
<tr>
<td style="text-align: left;">serverId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>服务器ID</td>
</tr>
<tr>
<td style="text-align: left;">serverName</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>服务器名称</td>
</tr>
<tr>
<td style="text-align: left;">roleLevel</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>角色等级</td>
</tr>
</tbody>
</table>
<h3>7、 实名状态校验 (必须)</h3>
<pre><code>try {
// GameBaseSDK.getInstance().doCheckIdAuth(Context context, ApiCallback callback)
GameBaseSDK.getInstance().doCheckIdAuth(this, new ApiCallback() {
public void onSuccess(String resultMsg) {
Log.d(&quot;lwSDK&quot;, &quot;:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {}
});
} catch (JSONException e) {
e.printStackTrace();
}
</code></pre>
<p>该接口参数为当前 Context 及结果回调,成功回调结果为一个json字符串,详细见下
CP方可以看时机调用该接口,用户每次进入游戏时都需要调用,authStat为1即为已认证成年用户</p>
<h5>回调参数说明7</h5>
<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;">authStat</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>用户实名状态,0表示未实名,1表示已实名且已成年,2表示已实名未成年</td>
</tr>
</tbody>
</table>
<h3>8、 支付(必须)</h3>
<pre><code>
try {
Random randomObj = new Random();
int ranNo = randomObj.nextInt(100000);
int amount = randomObj.nextInt(600);
JSONObject orderInfo = new JSONObject(); //构建json对象
orderInfo.put(&quot;orderNo&quot;, &quot;cp_order_no_&quot; + ranNo); //String orderNo 订单号
orderInfo.put(&quot;amount&quot;, amount); //int amount 订单金额,单位:分
orderInfo.put(&quot;propName&quot;, &quot;propName&quot;); //String propName 道具名称
orderInfo.put(&quot;notifyUrl&quot;, &quot;https://abc.com&quot;); //String notifyUrl 支付回调地址
orderInfo.put(&quot;attach&quot;, &quot;attach_string&quot;); //String attach 透传参数
PayInfo payInfo = PayInfo.build(orderInfo); //PayInfo payInfo 订单信息基类
//GameBaseSDK.getInstance().doPay(Context context, PayInfo payInfo, ApiCallback callback)
GameBaseSDK.getInstance().doPay(this, payInfo, new ApiCallback() {
public void onSuccess(String resultMsg) {
Log.d(&quot;lwSDK&quot;, &quot;登录响应222333:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {}
});
} catch (JSONException e) {
e.printStackTrace();
}
</code></pre>
<p>PayInfo是支付基类,通过PayInfo.build(params)构建,params是一个JSON对象,详细参数见下</p>
<h5>params参数说明8</h5>
<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;">orderNo</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td><strong>cp订单号,长度不超过64字符</strong></td>
</tr>
<tr>
<td style="text-align: left;">amount </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>订单金额,单位:分</td>
</tr>
<tr>
<td style="text-align: left;">propName</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>道具名称</td>
</tr>
<tr>
<td style="text-align: left;">notifyUrl</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>支付回调地址</td>
</tr>
<tr>
<td style="text-align: left;">attach</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>透传参数,长度不超过255</td>
</tr>
</tbody>
</table>
<h3>9、 退出登录</h3>
<pre><code>// doLogout()
GameBaseSDK.getInstance().doLogout();
</code></pre>
<h3>10、退出游戏</h3>
<pre><code>// onExit(Activity context, GameExitCallback callback, boolean needDialog)
GameBaseSDK.getInstance().onExit(this, new GameExitCallback() {
@Override
public void exitGame() {
Log.d(&quot;Tag&quot;, &quot;退出游戏done&quot;);
}
}, false);
</code></pre>
<p>该接口: Context表示当前Activity 、退出回调、是否弹窗提示(默认样式)
注意该接口调用后会直接退出进程</p>
<h3>* 配置说明</h3>
<ul>
<li><strong>SDK文件</strong></li>
</ul>
<pre><code>feiyu-sdk.aar
</code></pre>
<ul>
<li><strong>SDK文件引入</strong></li>
</ul>
<pre><code>将SDK文件放在工程目录lib文件夹下,build.gradle文件下配置引入即可</code></pre>
<ul>
<li><strong>依赖的库</strong></li>
</ul>
<pre><code>com.squareup.okhttp3:okhttp:4.10.0</code></pre>
<ul>
<li><strong>build.gradle 依赖配置示例</strong></li>
</ul>
<pre><code>dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}
</code></pre>
<hr />
<ul>
<li><strong>manifest.xml 配置示例</strong></li>
</ul>
<pre><code> &lt;meta-data
android:name=&quot;lw_game&quot;
android:value=&quot;xxxxxx-weixin&quot; /&gt;
&lt;!-- lw_game | 菲鱼提供的game标识 --&gt;
&lt;meta-data
android:name=&quot;lw_apiSecret&quot;
android:value=&quot;Srv7N88OFrRoNoR&quot; /&gt;
&lt;!-- lw_apiSecret | 菲鱼提供的api_secret --&gt;
&lt;meta-data
android:name=&quot;lw_game_env&quot;
android:value=&quot;test&quot; /&gt;
&lt;!-- lw_game_env | 测试环境请填:test,正式环境:pro --&gt;
&lt;meta-data
android:name=&quot;lw_debug&quot;
android:value=&quot;1&quot; /&gt;
&lt;!-- lw_debug | 日志等级,建议:1调试,3线上环境 --&gt;
&lt;!-- 菲鱼SDK Activity 根据游戏设置固定横版或者竖版 --&gt;
&lt;activity
android:name=&quot;com.llewansdk.sdk.webview.SDKView&quot;
android:configChanges=&quot;orientation|navigation|screenSize&quot;
android:screenOrientation=&quot;fullSensor&quot;
tools:ignore=&quot;Instantiatable&quot;&gt;
&lt;/activity&gt;
</code></pre>