菲鱼原生安卓SDK接入文档
<p>[TOC]</p>
<h3>1、按配置说明配置好相关参数和引入SDK,详见配置说明</h3>
<ul>
<li>将 WXEntryActivity 文件复制到工程包名路径 + wxapi 下</li>
</ul>
<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>
<p><strong>依赖配置</strong></p>
</li>
<li>app\build.gradle</li>
</ul>
<pre><code class="language-java">dependencies {
implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'org.jetbrains:annotations:15.0'
// 巨量广告
implementation 'com.bytedance.applog:RangersAppLog-Lite-cn:6.16.3'
implementation 'com.bytedance.ads:AppConvert:1.3.1.0'
implementation 'com.pangle.cn:mediation-sdk:6.1.0.4' //穿山甲融合SDK
// bugly崩溃日志
implementation 'com.tencent.bugly:crashreport:latest.release'
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'
api 'com.tencent.vasdolly:helper:3.0.4'
}</code></pre>
<ul>
<li>settings.gradle</li>
</ul>
<pre><code class="language-java">repositories {
google()
mavenCentral()
maven {
url 'https://artifact.bytedance.com/repository/Volcengine/'
}
maven { url 'https://jitpack.io' }
maven {
url &quot;https://artifact.bytedance.com/repository/pangle&quot; //穿山甲融合SDK依赖
}
}</code></pre>
<ul>
<li>gradle.properties(按需)</li>
</ul>
<pre><code>如果游戏使用AndroidX库,需添加以下2句,用于将头条SDK部分迁移到AndroidX
android.useAndroidX=true
android.enableJetifier=true</code></pre>
<hr />
<ul>
<li><strong>manifest.xml 配置示例</strong></li>
</ul>
<pre><code class="language-xml">
&lt;queries&gt;
&lt;package android:name=&quot;com.tencent.mm&quot; /&gt;
&lt;/queries&gt;
&lt;uses-sdk tools:overrideLibrary=&quot;android.support.v7.appcompat, android.support.v7.recyclerview,com.dingmouren.layoutmanagergroup,com.zyyoona7.lib, com.squareup.leakcanary, com.squareup.leakcanary.analyzer, com.squareup.leakcanary.android.noop,com.mopub.mobileads.base,com.mopub.mobileads.rewarded_video, com.mopub.mobileads.banner,com.mopub.mobileads.interstitial,com.moat.analytics.mobile.mpub,com.google.android.ads.mediationtestsuite,com.bytedance.crash,com.bytedance.metasec&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.REQUEST_INSTALL_PACKAGES&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.VIBRATE&quot; /&gt;
&lt;meta-data
android:name=&quot;lw_channel&quot;
android:value=&quot;toutiao&quot; /&gt;
&lt;!-- 分包标识 头条填 toutiao ,广点通填 mp --&gt;
&lt;meta-data
android:name=&quot;gdt_appid&quot;
android:value=&quot;&quot; /&gt;
&lt;!-- gdt_appid | 乐玩提供的 广点通 appid --&gt;
&lt;meta-data
android:name=&quot;gdt_appkey&quot;
android:value=&quot;&quot; /&gt;
&lt;!-- gdt_appkey | 乐玩提供的广点通key --&gt;
&lt;meta-data
android:name=&quot;lw_game&quot;
android:value=&quot;nangualieshou-weixin&quot; /&gt;
&lt;!-- lw_game | 乐玩提供的game标识 --&gt;
&lt;meta-data
android:name=&quot;lw_apiSecret&quot;
android:value=&quot;KMb8hlx65KBfp55GbL&quot; /&gt;
&lt;!-- lw_apiSecret | 乐玩提供的api_secret --&gt;
&lt;meta-data
android:name=&quot;lw_game_env&quot;
android:value=&quot;pro&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;meta-data
android:name=&quot;csj_app_id&quot;
android:value=&quot;5569898&quot; /&gt;
&lt;!-- csj_app_id | 对应平台应用appid --&gt;
&lt;meta-data
android:name=&quot;tt_ad_appid&quot;
android:value=&quot;613008&quot; /&gt;
&lt;meta-data
android:name=&quot;sourceId&quot;
android:value=&quot;[LW_SOURCE_ID]&quot; /&gt;
&lt;meta-data
android:name=&quot;BUGLY_APPID&quot;
android:value=&quot;2625868706&quot; /&gt;
&lt;!-- 配置APP版本号 --&gt;
&lt;meta-data
android:name=&quot;BUGLY_APP_VERSION&quot;
android:value=&quot;1.3.16&quot; /&gt;
&lt;!-- 配置APP渠道号 --&gt;
&lt;meta-data
android:name=&quot;BUGLY_APP_CHANNEL&quot;
android:value=&quot;toutiao&quot; /&gt;
&lt;!-- 配置Bugly调试模式(true或者false)--&gt;
&lt;meta-data
android:name=&quot;BUGLY_ENABLE_DEBUG&quot;
android:value=&quot;false&quot; /&gt;
&lt;activity
android:name=&quot;com.llewansdk.sdk.lianyun.user.SdkPageView&quot;
android:configChanges=&quot;keyboard|keyboardHidden|screenLayout|screenSize|orientation&quot;
android:theme=&quot;@android:style/Theme.Translucent.NoTitleBar.Fullscreen&quot;
android:windowSoftInputMode=&quot;adjustResize&quot; /&gt;
&lt;activity
android:name=&quot;.wxapi.WXEntryActivity&quot; //需把该微信登录activity放在包名路径后,如包名 com.abc ,则该路径是 com.abc.wxapi.WXEntryActivity
android:theme=&quot;@android:style/Theme.Translucent.NoTitleBar&quot;
android:exported=&quot;true&quot;
android:taskAffinity=&quot;${applicationId}&quot;
android:launchMode=&quot;singleTask&quot;&gt;
&lt;/activity&gt;
&lt;activity
android:name=&quot;com.llewansdk.sdk.lianyun.pay.SdkPayActivity&quot;
android:allowTaskReparenting=&quot;true&quot;
android:configChanges=&quot;keyboardHidden|orientation|screenSize&quot;
android:exported=&quot;true&quot;
android:hardwareAccelerated=&quot;true&quot;
android:screenOrientation=&quot;portrait&quot;
tools:ignore=&quot;DuplicateActivity,LockedOrientationActivity&quot; /&gt;
&lt;provider
android:name=&quot;com.bytedance.sdk.openadsdk.TTFileProvider&quot;
android:authorities=&quot;${applicationId}.TTFileProvider&quot;
android:exported=&quot;false&quot;
android:grantUriPermissions=&quot;true&quot;&gt;
&lt;meta-data
android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;
android:resource=&quot;@xml/pangle_file_paths&quot; /&gt;
&lt;/provider&gt;
&lt;provider
android:name=&quot;com.bytedance.sdk.openadsdk.multipro.TTMultiProvider&quot;
android:authorities=&quot;${applicationId}.TTMultiProvider&quot;
android:exported=&quot;false&quot; /&gt;
</code></pre>
<h3>2、SDK初始化 (必须)</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().init(this, new ApiCallback() {
@Override
public void onSuccess(String resultMsg) {
LogUtil.d(&quot;游戏收到初始化成功:&quot;+resultMsg);
//收到初始化成功之后再调用SDK的其他接口
}
@Override
public void onFailure(String resultMsg, int resultCode) {
LogUtil.d(&quot;游戏收到初始化失败:&quot;);
}
});</code></pre>
<p>CP需要在主进程位置尽早对 SDK 进行初始化。收到初始化成功之后再调用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().setRoleInfoUpdate(params);
} 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 class="language-java">PayInfo payInfo = new PayInfo();
payInfo.setCpOrderSn(&quot;cp_order_no_123123&quot;);
payInfo.setAmount(1);
payInfo.setPropName(&quot;商品名测试&quot;);
payInfo.setNotifyUrl(&quot;https://abc.com&quot;);
payInfo.setAttach(&quot;attach_string&quot;);
payInfo.setPropId(&quot;product333&quot;);
payInfo.setPropDesc(&quot;商品详细介绍&quot;);
GameBaseSDK.getInstance().doPay(H5GameActivity.this, payInfo, new ApiCallback() {
public void onSuccess(String resultMsg) {
//LogUtil.d(&quot;支付响应:&quot; + resultMsg);
}
public void onFailure(String resultMsg, int resultCode) {
}
});</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;">cpOrderSn</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>
<tr>
<td style="text-align: left;">propId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>商品ID</td>
</tr>
<tr>
<td style="text-align: left;">propDesc</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>商品说明</td>
</tr>
</tbody>
</table>
<h3>9、退出游戏,显示退出dialog</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().onExit(context, new ApiCallback() {
@Override
public void onSuccess(String s) {
Log.d(&quot;Tag&quot;, &quot;退出游戏done&quot;);
//游戏回收资源退出游戏
}
@Override
public void onFailure(String s, int i) {
}
});</code></pre>
<h3>10、 退出登录</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().doLogout(context);</code></pre>
<h3>11、监听账号退出登录(账号在浮标个人中心等地方退出的回调)</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().setLogoutListener(new ApiCallback() {
@Override
public void onSuccess(String s) {
//账号退出登录,游戏退出当前角色回到登录界面再调用SDK的登录接口
}
@Override
public void onFailure(String s, int i) {
}
});</code></pre>
<h3>12、生命周期(必接)</h3>
<pre><code class="language-java">
@Override
protected void onResume() {
super.onResume();
GameBaseSDK.getInstance().onResume(this);
}
@Override
protected void onPause() {
super.onPause();
GameBaseSDK.getInstance().onPause(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
GameBaseSDK.getInstance().onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
</code></pre>
<h3>13、调用敏感词校验</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().wordFilter(&quot;敏感词测试:●●●&quot;, new ApiCallback() {
public void onSuccess(String resultMsg) {
}
public void onFailure(String resultMsg, int resultCode) {
}
});</code></pre>
<pre><code> 回调说明</code></pre>
<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;">code</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>响应状态,1成功,-1异常</td>
</tr>
<tr>
<td style="text-align: left;">msg </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>响应结果说明</td>
</tr>
<tr>
<td style="text-align: left;">d </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">object</td>
<td>校验结果主体</td>
</tr>
<tr>
<td style="text-align: left;">d.suggest </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>有risky、pass、review三种值。pass表示不包含敏感词,risky包含敏感词</td>
</tr>
<tr>
<td style="text-align: left;">d.label </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>命中标签枚举值,100 正常;10001 广告;20001 时政;20002 色情;20003 辱骂;20006 违法犯罪;20008 欺诈;20012 低俗;20013 版权;21000 其他</td>
</tr>
<tr>
<td style="text-align: left;">d.risky_word </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>命中敏感词</td>
</tr>
</tbody>
</table>
<h3>14、实名认证状态查询(必接) 在登录账号完成之后调用一次</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().doCheckIdAuth(H5GameActivity.this, new ApiCallback() {
public void onSuccess(String resultMsg) {
}
public void onFailure(String resultMsg, int resultCode) {
}
});</code></pre>
<pre><code> 回调结果 {&quot;authStat&quot;:1} 0表示未实名,1表示已实名且已成年,2表示已实名未成年</code></pre>
<h3>15、广告初始化(必接)需要收到登录账号成功回调后才可以调用</h3>
<pre><code class="language-java">GameBaseSDK.getInstance().adInit();//此接口用于激励视频配置初始化,有网络请求,游戏应在登录完成后看时机尽早调用
GameBaseSDK.getInstance().adStart(this);//在adInit后调用</code></pre>
<h3>16、加载广告(必接)游戏应该在首次出现广告播放按钮的界面调用</h3>
<pre><code> 视频广告预加载,需要在初始化完成后调用。游戏应该在首次出现广告播放按钮的界面调用一次此接口,后续可以在播放完成后调用进行预加载。
注意:首次调用会拉起用户授权,为了合规需要,游戏应该在有广告按钮展示的界面再调用此接口。如果出现广告拉起失败的情况,游戏可以调用一次此接口,但切勿一直重试,一直加载而不展示会影响广告后续填充率。</code></pre>
<pre><code class="language-java">GameBaseSDK.getInstance().adLoad(H5GameActivity.this, new ApiCallback() {
public void onSuccess(String resultMsg) {
}
public void onFailure(String resultMsg, int resultCode) {
}
});</code></pre>
<pre><code> 响应结果为json字符串,解析后字段如下:</code></pre>
<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;">code</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>加载结果,1:加载成功,2:加载失败</td>
</tr>
<tr>
<td style="text-align: left;">msg </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>加载结果说明</td>
</tr>
<tr>
<td style="text-align: left;">scene</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>场景标识</td>
</tr>
</tbody>
</table>
<h3>17、显示广告(必接)</h3>
<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;">buttonKey</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>乐玩广告位ID,由运营同学提供</td>
</tr>
</tbody>
</table>
<pre><code class="language-java">GameBaseSDK.getInstance().adShow(H5GameActivity.this, buttonKey, new ApiCallback() {
public void onSuccess(String resultMsg) {
// 判断canReward是否为1,为1则发放奖励
try {
JSONObject result = new JSONObject(resultMsg);
int canReward = result.optInt(&quot;canReward&quot;, 0);
if(canReward == 1) {
// 发放奖励
LogUtil.i(&quot;发放奖励&quot;);
} else {
// 未满足奖励发放条件
LogUtil.i(&quot;未达成奖励发放条件&quot;);
}
// 调用adLoad重新进行广告加载填充 (新版SDK播放广告会自动重新加载广告,游戏方可以不调用)
// doAdLoad();
} catch (JSONException e) {
LogUtil.e(&quot;广告展示回调结果解析异常:&quot; + resultMsg);
}
}
public void onFailure(String resultMsg, int resultCode) {
}
});</code></pre>
<pre><code> 响应结果为json字符串,解析后字段如下:</code></pre>
<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;">code</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>广告播放状态码。1:播放成功,2:播放失败(此时应重试一次广告加载并播放,但切勿一直重试)</td>
</tr>
<tr>
<td style="text-align: left;">canReward </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>是否满足奖励发放条件,1:满足;0:不满足(广告未播放完成或者广告播放异常)</td>
</tr>
</tbody>
</table>
<h3>18、混淆配置 proguard-rules.pro</h3>
<pre><code class="language-java">#self
-keep class com.llewansdk.** { *; }
-keep class com.lewan.** { *; }
#new
-keep class com.bytedance.** {*;}
-keep class com.qq.** {*;}
-keep class com.google.gson.** {*;}
-keep class org.json.** {*;}
-keep class androidx.** {*;}
-keep class com.android.** {*;}
-keep class com.tencent.** {*;}
#bugly
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
#gdt
-dontwarn com.qq.gdt.action.**
-keep class com.qq.gdt.action.** {*;}
-keep public class com.tencent.turingfd.sdk.**
-keepclasseswithmembers class * {
native &lt;methods&gt;;
}
#weixin
-keep class com.tencent.mm.opensdk.** {
*;
}
-keep class com.tencent.wxop.** {
*;
}
-keep class com.tencent.mm.sdk.** {
*;
}
#csj 融合
-keep class bykvm*.**
-keep class com.bytedance.msdk.adapter.**{ public *; }
-keep class com.bytedance.msdk.api.** {
public *;
}
#juliang
-keep class com.bytedance.ads.convert.broadcast.common.EncryptionTools {*;}
#oaid sdk
-keep class com.bun.miitmdid.** { *; }
-keep interface com.bun.supplier.** { *; }
-keep class androidx.core.**{*;}
# asus
-keep class com.asus.msa.SupplementaryDID.** { *; }
-keep class com.asus.msa.sdid.** { *; }
# freeme
-keep class com.android.creator.** { *; }
-keep class com.android.msasdk.** { *; }
# huawei -keep class com.huawei.hms.** {*;}
-keep interface com.huawei.hms.** {*;}
# lenovo
-keep class com.zui.deviceidservice.** { *; }
-keep class com.zui.opendeviceidlibrary.** { *; }
# meizu
-keep class com.meizu.flyme.openidsdk.** { *; }
# nubia
-keep class com.bun.miitmdid.provider.nubia.NubiaIdentityImpl
# oppo
-keep class com.heytap.openid.** { *; }
# samsung
-keep class com.samsung.android.deviceidservice.** { *; }
# vivo
-keep class com.vivo.identifier.** { *; }
# xiaomi -keep class com.bun.miitmdid.provider.xiaomi.IdentifierManager
# zte
-keep class com.bun.lib.** { *; }
# coolpad
-keep class com.coolpad.deviceidsupport.** { *; }
# EEBBK
#None
# honor
-keep class com.hihonor.** {*; }
# Gson
-keepattributes Signature
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
# Gson specific interfaces
-keep interface com.google.gson.** { *; }
# Gson specific fields
-keepclassmembers class * {
@com.google.gson.annotations.SerializedName &lt;fields&gt;;
}
# Enum types with Gson
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#hume
-keep class com.bytedance.hume.readapk.** {
*;
}
-keep class com.bytedance.** {
*;
}
-keep class com.tencent.** {*;}</code></pre>