乐玩


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(&amp;quot;Tag&amp;quot;, &amp;quot;登录成功响应:&amp;quot; + resultMsg); } public void onFailure(String resultMsg, int resultCode) { Log.e(&amp;quot;Tag&amp;quot;, &amp;quot;登录失败响应:&amp;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(&amp;quot;roleId&amp;quot;, &amp;quot;10012154&amp;quot;); //String roleId 角色ID params.put(&amp;quot;userName&amp;quot;, &amp;quot;角色名称&amp;quot;); //String userName 角色名称 params.put(&amp;quot;serverId&amp;quot;, &amp;quot;服务器ID&amp;quot;); //String serverId 服务器ID params.put(&amp;quot;serverName&amp;quot;, &amp;quot;服务器名称&amp;quot;); //String serverName 服务器名称 params.put(&amp;quot;roleLevel&amp;quot;, 100);//int roleLevel 角色等级 GameBaseSDK.getInstance().setCreateRoleEvent(params, new ApiCallback() { public void onSuccess(String resultMsg) { Log.d(&amp;quot;lwSDK&amp;quot;, &amp;quot;:&amp;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(&amp;quot;roleId&amp;quot;, &amp;quot;10012154&amp;quot;); //String roleId 角色ID params.put(&amp;quot;userName&amp;quot;, &amp;quot;角色名称&amp;quot;); //String userName 角色名称 params.put(&amp;quot;serverId&amp;quot;, &amp;quot;服务器ID&amp;quot;); //String serverId 服务器ID params.put(&amp;quot;serverName&amp;quot;, &amp;quot;服务器名称&amp;quot;); //String serverName 服务器名称 params.put(&amp;quot;roleLevel&amp;quot;, 100);//int roleLevel 角色等级 GameBaseSDK.getInstance().setRoleLoginEvent(params, new ApiCallback() { public void onSuccess(String resultMsg) { Log.d(&amp;quot;lwSDK&amp;quot;, &amp;quot;:&amp;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(&amp;quot;roleId&amp;quot;, &amp;quot;10012154&amp;quot;); //String roleId 角色ID params.put(&amp;quot;userName&amp;quot;, &amp;quot;角色名称&amp;quot;); //String userName 角色名称 params.put(&amp;quot;serverId&amp;quot;, &amp;quot;服务器ID&amp;quot;); //String serverId 服务器ID params.put(&amp;quot;serverName&amp;quot;, &amp;quot;服务器名称&amp;quot;); //String serverName 服务器名称 params.put(&amp;quot;roleLevel&amp;quot;, 100);//int roleLevel 角色等级 GameBaseSDK.getInstance().setUpdateRole(params, new ApiCallback() { public void onSuccess(String resultMsg) { Log.d(&amp;quot;lwSDK&amp;quot;, &amp;quot;:&amp;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> <tr> <td style="text-align: left;">power</td> <td style="text-align: left;">否</td> <td style="text-align: left;">string</td> <td>角色等级</td> </tr> <tr> <td style="text-align: left;">remainQuantity</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(&amp;quot;lwSDK&amp;quot;, &amp;quot;:&amp;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(&amp;quot;orderNo&amp;quot;, &amp;quot;cp_order_no_&amp;quot; + ranNo); //String orderNo 订单号 orderInfo.put(&amp;quot;amount&amp;quot;, amount); //int amount 订单金额,单位:分 orderInfo.put(&amp;quot;propName&amp;quot;, &amp;quot;propName&amp;quot;); //String propName 道具名称 orderInfo.put(&amp;quot;notifyUrl&amp;quot;, &amp;quot;https://abc.com&amp;quot;); //String notifyUrl 支付回调地址 orderInfo.put(&amp;quot;attach&amp;quot;, &amp;quot;attach_string&amp;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(&amp;quot;lwSDK&amp;quot;, &amp;quot;登录响应222333:&amp;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> <h5>响应参数说明8</h5> <p>响应结果为json字符串,解析后字段如下:</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;">code</td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>状态码,0正常,非0值异常</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;">order</td> <td style="text-align: left;">是</td> <td style="text-align: left;">object</td> <td>订单信息</td> </tr> <tr> <td style="text-align: left;">order.cpOrderSn</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>CP方订单号(用户未拉起支付时可能为null)</td> </tr> <tr> <td style="text-align: left;">order.checkPay</td> <td style="text-align: left;">是</td> <td style="text-align: left;">boolean</td> <td>是否应该主动查询订单支付状态(客户端轮询发货方式适用),为false时表示用户未正常拉起支付,此时可以不进行轮询,为true时应轮询</td> </tr> </tbody> </table> <h3>9、 激励视频广告</h3> <h4>9.1、初始化</h4> <p>此接口用于激励视频配置初始化,有网络请求,游戏应在登录完成后看时机尽早调用</p> <pre><code>// adInit() GameBaseSDK.getInstance().adInit(); </code></pre> <h4>9.2、 开始</h4> <p>在adInit后调用,详细可见示例demo</p> <pre><code>// adStart(Context ctx) GameBaseSDK.getInstance().adStart(context); </code></pre> <p>该接口参数为当前上下文 Context</p> <h4>9.3、 激励视频加载</h4> <p><strong>视频广告预加载,需要在初始化完成后调用。游戏应该在首次出现广告播放按钮的界面调用一次此接口,后续可以在播放完成后调用进行预加载</strong>。 注意:首次调用会拉起用户授权,为了合规需要,游戏应该在有广告按钮展示的界面再调用此接口。如果出现广告拉起失败的情况,游戏可以调用一次此接口,但切勿一直重试,一直加载而不展示会影响广告后续填充率。</p> <pre><code>// adLoad(Activity activity, ApiCallback callback) GameBaseSDK.getInstance().adLoad(activity, callback); </code></pre> <p>该接口参数为当前Activity以及结果回调</p> <h5>响应参数说明9.3</h5> <p>响应结果为json字符串,解析后字段如下:</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;">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> <h4>9.4、 激励视频展示</h4> <p>调用此接口发起视频展示。</p> <pre><code>// adShow(Context ctx, String buttonKey, ApiCallback callback) GameBaseSDK.getInstance().adLoad(activity, callback); </code></pre> <p>该接口参数为当前Context,广告位Id-&gt;buttonKey以及结果回调</p> <h5>params参数说明9.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;">buttonKey</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>乐玩广告位ID,由运营同学提供</td> </tr> </tbody> </table> <h5>响应参数说明9.4</h5> <p>响应结果为json字符串,解析后字段如下:</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;">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>10、 敏感词校验</h3> <p>调用此接口对文本进行敏感词校验。</p> <pre><code>// wordFilter(String content, ApiCallback callback) String content = &amp;quot;待校验文本内容&amp;quot;; GameBaseSDK.getInstance().wordFilter(content, callback); </code></pre> <h5>响应参数说明10</h5> <p>响应结果为json字符串,解析后字段如下:</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;">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>11、 退出登录</h3> <pre><code>// doLogout() GameBaseSDK.getInstance().doLogout(); </code></pre> <h3>12、退出游戏</h3> <pre><code>// onExit(Activity context, GameExitCallback callback, boolean needDialog) GameBaseSDK.getInstance().onExit(this, new GameExitCallback() { @Override public void exitGame() { Log.d(&amp;quot;Tag&amp;quot;, &amp;quot;退出游戏done&amp;quot;); } }, false); </code></pre> <p>该接口: Context表示当前Activity 、退出回调、是否弹窗提示(默认样式) 注意该接口调用后会直接退出进程</p> <h3>* 配置说明</h3> <ul> <li><strong>SDK文件</strong></li> </ul> <pre><code>// 乐玩SDK lwsdk_ly_v2.0.0.aar // 通讯院OAID SDK oaid_sdk_2.5.0.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:3.11.0</code></pre> <ul> <li><strong>build.gradle 依赖配置示例</strong></li> </ul> <pre><code>dependencies { implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) //穿山甲变现广告 implementation &amp;quot;com.android.support:appcompat-v7:28.0.0&amp;quot; implementation 'com.pangle.cn:mediation-sdk:6.1.0.4' } </code></pre> <hr /> <ul> <li><strong>manifest.xml 配置示例</strong></li> </ul> <pre><code> &amp;lt;meta-data android:name=&amp;quot;lw_game&amp;quot; android:value=&amp;quot;xxxxxx-weixin&amp;quot; /&amp;gt; &amp;lt;!-- lw_game | 乐玩提供的game标识 --&amp;gt; &amp;lt;meta-data android:name=&amp;quot;lw_apiSecret&amp;quot; android:value=&amp;quot;Srv7N88OFrRoNoR&amp;quot; /&amp;gt; &amp;lt;!-- lw_apiSecret | 乐玩提供的api_secret --&amp;gt; &amp;lt;meta-data android:name=&amp;quot;lw_pt_channel&amp;quot; android:value=&amp;quot;taptap&amp;quot; /&amp;gt; &amp;lt;!-- lw_pt_channel | 渠道标识,转端包:lewan; TapTap:taptap --&amp;gt; &amp;lt;meta-data android:name=&amp;quot;lw_game_env&amp;quot; android:value=&amp;quot;test&amp;quot; /&amp;gt; &amp;lt;!-- lw_game_env | 测试环境请填:test,正式环境:pro --&amp;gt; &amp;lt;meta-data android:name=&amp;quot;lw_debug&amp;quot; android:value=&amp;quot;1&amp;quot; /&amp;gt; &amp;lt;!-- lw_debug | 日志等级,建议:1调试,3线上环境 --&amp;gt; &amp;lt;!-- 转端包必须 可根据游戏设置固定横版或者竖版 --&amp;gt; &amp;lt;activity android:name=&amp;quot;com.llewansdk.sdk.webview.SDKView&amp;quot; android:configChanges=&amp;quot;orientation|navigation|screenSize&amp;quot; android:screenOrientation=&amp;quot;fullSensor&amp;quot; tools:ignore=&amp;quot;Instantiatable&amp;quot;&amp;gt; &amp;lt;/activity&amp;gt; &amp;lt;!-- TapTap渠道必须 --&amp;gt; &amp;lt;activity android:name=&amp;quot;com.llewansdk.sdk.channel.taptap.TapTapActivity&amp;quot; android:configChanges=&amp;quot;orientation|navigation|screenSize&amp;quot; android:screenOrientation=&amp;quot;fullSensor&amp;quot; tools:ignore=&amp;quot;Instantiatable&amp;quot;&amp;gt; &amp;lt;/activity&amp;gt; </code></pre>

页面列表

ITEM_HTML