乐玩


乐玩SDK接入文档(聚合)

<p>[TOC]</p> <h1>乐玩聚合SDK接入文档</h1> <h2>1、开发环境搭建</h2> <h3>1.1、将 SDK aar 文件复制到游戏工程的 libs 目录中并引用</h3> <p>lwsdk_dd_juhe.aar lwsdk_ly_juhe.aar</p> <p>[乐玩安卓聚合SDK资源.zip](<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1635b96e35b2c3fec1ecd3b7a23aa0ca">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1635b96e35b2c3fec1ecd3b7a23aa0ca</a> &quot;[乐玩安卓聚合SDK资源.zip&quot;)</p> <h3>1.2、复制 assets 目录下的 lwsdk.xml 文件到游戏工程的 assets 目录</h3> <ul> <li>将assets中的 <code>lwsdk.xml</code> 配置文件中的参数进行修改 game //乐玩游戏标识 api_secret //lewan SDK和普通API秘钥</li> </ul> <p>isTest=&quot;1&quot;// 1为测试环境地址,省略为正式环境</p> <h3>1.3、第三方依赖</h3> <ul> <li>app\build.gradle</li> </ul> <pre><code class="language-java">dependencies { implementation fileTree(include: [&amp;#039;*.jar&amp;#039;,&amp;#039;*.aar&amp;#039;], dir: &amp;#039;libs&amp;#039;) //以下引入仅在母包对接测试时引入 implementation &amp;#039;com.google.code.gson:gson:2.10.1&amp;#039; implementation &amp;#039;com.squareup.okhttp3:okhttp:3.11.0&amp;#039; implementation &amp;#039;org.jetbrains:annotations:23.0.0&amp;#039; implementation &amp;#039;androidx.core:core:1.0.0&amp;#039; }</code></pre> <h2>2、功能接口 (注意:以下所有接口都必须在游戏收到 SDK 初始化完成之后才能调用,所有接口请在主线程调用,SDK的回调不一定是主线程)</h2> <h3>2.0、继承 LWSdkApplication (必接)</h3> <p>游戏工程如果没有Application,请在 AndroidManifest.xml 中添加SDK的Application,如下所示:</p> <pre><code class="language-xml">&amp;lt;application android:name=&amp;quot;com.lewan.application.LWSdkApplication&amp;quot;&amp;gt;</code></pre> <p>游戏工程如果有自定义 Application,请继承 SDK 中 LWSdkApplication:</p> <pre><code class="language-java">public class XXXXApplication extends LWSdkApplication { @Override public void onCreate() { super.onCreate(); } }</code></pre> <h3>2.1、设置游戏版本,尽早调用,热更后需设置新的版本,可在初始化调用前调用(必接)</h3> <pre><code class="language-java">public void setGameVersion(String gameVersion) LWSdk.getInstance().setGameVersion(&amp;quot;1.0.0&amp;quot;);</code></pre> <h3>2.2、初始化接口(必接)</h3> <pre><code> 注意: 初始化接口必须在调用申请权限回调以后再调用 接口说明: 首先在程序开始的地方调用 SDK 的初始化 init 方法,并设置 Activity 对像和初始化完成回调监听 (在初始化失败情况下不再调用其它 SDK 接口方法) 注意:要确保在 SDK 初始化成功后才可调用其它接口</code></pre> <h4>2.2.1、方法定义</h4> <pre><code class="language-java">public void init(Activity context, LWSdkCallback lwsdkCallback)</code></pre> <h4>2.2.2、参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>context</td> <td>上下文</td> </tr> <tr> <td>lwsdkCallback</td> <td>回调通知,初始化,登录,充值等回调通知都统一在此</td> </tr> <tr> <td>code</td> <td>所有 <code>成功</code> 回调的code都为 LWSdkCode.SUCCESS_CODE ,所有 <code>失败</code> 回调的code都为 LWSdkCode.FAIL_CODE</td> </tr> </tbody> </table> <h4>2.2.3、代码示例:</h4> <pre><code class="language-java">LWSdk.getInstance().init(this, new LWSdkCallback() { @Override public void init(int code, Object object) { //初始化回调 if (code == LWSdkCode.SUCCESS_CODE){ //初始化成功 } else if (code == LWSdkCode.FAIL_CODE) { //初始化失败 } } @Override public void login(int code, Object object) { //登录回调 if (code == LWSdkCode.SUCCESS_CODE){ //登录成功 LWSdkLoginResult loginResult = (LWSdkLoginResult) object; String uid = loginResult.getUid(); String token = loginResult.getSdk_token(); } else if (code == LWSdkCode.FAIL_CODE) { //登录失败 } } @Override public void pay(int code, String msg) { // 回调 if (code == LWSdkCode.SUCCESS_CODE){ //支付成功或者完成的回调,只为了回调给游戏关闭支付页面等功能,发货以服务端通知回调为准 } else if (code == LWSdkCode.FAIL_CODE) { //支付取消或者失败的回调,只为了回调给游戏关闭支付页面或重新发起支付等功能 } } @Override public void submitRoleInfo(int code, String msg) { //上报角色信息回调 } @Override public void logout(int code, String msg) { //退出账号回调 if (code == LWSdkCode.SUCCESS_CODE){ //游戏收到账号退出成功回调,退出当前角色到开始界面再重新调用登录接口 } else if (code == LWSdkCode.FAIL_CODE) { //账号退出取消或者失败的回调 } } @Override public void exitGame(int code, String msg) { //退出游戏回调 if (code == LWSdkCode.SUCCESS_CODE){ //游戏收到退出游戏的回调,可以进行一些数据保存或者资源的回收销毁再退出 this.finish(); } else if (code == LWSdkCode.FAIL_CODE) { //退出游戏的取消或者失败,一般可以不做处理 } } @Override public void expansionInterface(int code, String param) { //扩展接口回调 } @Override public void checkChat(int code, String msg) { //敏感词检测回调 //{&amp;quot;code&amp;quot;:1,&amp;quot;msg&amp;quot;:&amp;quot;success&amp;quot;,&amp;quot;d&amp;quot;:{&amp;quot;suggest&amp;quot;:&amp;quot;risky&amp;quot;,&amp;quot;risky_word&amp;quot;:&amp;quot;:习大&amp;quot;,&amp;quot;label&amp;quot;:90001}} } @Override public void loadAd(int code, Object object) { //加载广告回调 } @Override public void showAd(int code, Object object) { //显示广告回调 } @Override public void checkIdAuth(int code, Object object) { //检查实名认证回调 //{&amp;quot;authStat&amp;quot;:1} 0表示未实名,1表示已实名且已成年,2表示已实名未成年 } }); </code></pre> <h3>2.3、登录接口(必接)</h3> <p>接口说明:游戏登录时调用</p> <h4>2.3.1、方法定义</h4> <pre><code class="language-java">public void login(Activity context, String custom)</code></pre> <h4>2.3.2、参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>context</td> <td>上下文</td> </tr> <tr> <td>custom</td> <td>游戏自定义参数,可通过回调方法 login 中的参数 LWSdkLoginResult 对象的 getCustom()获取</td> </tr> </tbody> </table> <h4>2.3.3、代码示例</h4> <pre><code class="language-java">LWSdk.getInstance().login(this,&amp;quot;&amp;quot;)</code></pre> <h4>2.3.4、登录回调对象 LWSdkLoginResult 参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>game</td> <td>游戏标识</td> </tr> <tr> <td>uid</td> <td>用户UID</td> </tr> <tr> <td>sdk_token</td> <td>用户登录态,用于服务端登录校验注意token有效期为5分钟,服务端需要在5分钟内完成校验</td> </tr> <tr> <td>channel</td> <td>渠道标识</td> </tr> <tr> <td>source_id</td> <td>乐玩广告标识</td> </tr> <tr> <td>real_name_stat</td> <td>用户实名状态,0未实名,1实名且成年,2实名未成年</td> </tr> </tbody> </table> <h3>2.4、提交角色数据接口(必接)</h3> <p>接口说明:游戏提交角色数据接口,该接口需要在以下4中情况下调用:</p> <ul> <li>角色登录成功</li> <li>角色升级</li> <li>创建角色</li> </ul> <h4>2.4.1、方法定义</h4> <pre><code class="language-java">public void submitRoleInfo(Activity context, LWSdkRoleInfo roleInfo)</code></pre> <h4>2.4.2、参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>context</td> <td>上下文</td> </tr> <tr> <td>LWSdkRoleInfo</td> <td>角色实体类对象</td> </tr> </tbody> </table> <pre><code>LWSdkRoleInfo 实体类字段说明(以下参数都为必传参数,如游戏没有的传 &amp;quot;&amp;quot; 或者 &amp;quot;0&amp;quot;)</code></pre> <table> <thead> <tr> <th>字段名</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>submitType</td> <td><code>创建角色</code> 调用类型 Type_CreateRole ,<code>角色进入游戏</code> 调用类型 Type_EnterGame ,<code>角色升级</code> 调用类型 Type_RoleUpgrade</td> </tr> <tr> <td>serverId</td> <td>服务器ID,长度不超过20字符,建议使用字符串型数值,例如:1</td> </tr> <tr> <td>serverName</td> <td>服务器名称,长度不超过20字符</td> </tr> <tr> <td>zoneId</td> <td>大区ID, 如有必填,没有传&quot;&quot;,长度不超过100字符</td> </tr> <tr> <td>zoneName</td> <td>大区名称, 如有必填,没有传&quot;&quot;,长度不超过100字符</td> </tr> <tr> <td>isNew</td> <td>是否当前新创建角色,否为0,是为1</td> </tr> <tr> <td>roleId</td> <td>角色ID,长度不超过20字符,建议使用字符串型数值,例如:1</td> </tr> <tr> <td>roleName</td> <td>角色名称,长度不超过100字符,不设定角色名称可传 &quot;&quot;</td> </tr> <tr> <td>roleLevel</td> <td>角色等级,不设定可传 0</td> </tr> <tr> <td>vipLevel</td> <td>角色vip等级,不是VIP传0,是VIP传正常值</td> </tr> <tr> <td>gender</td> <td>角色性别,没有传&quot;0&quot;, 有传&quot;1&quot; 或 &quot;2&quot;(&quot;1&quot;代表男,&quot;2&quot;代表女)</td> </tr> <tr> <td>power</td> <td>角色战力值,若没传&quot;&quot;</td> </tr> <tr> <td>serverOpenTime</td> <td>开服时间,有则传时间,具体到秒,格式如:&quot;2022-02-02 10:00:00&quot;,若无则传&quot;&quot;</td> </tr> </tbody> </table> <h4>2.4.3、代码示例</h4> <pre><code class="language-java">LWSdkRoleInfo roleInfo = new LWSdkRoleInfo(); roleInfo.setServerId(&amp;quot;123&amp;quot;); roleInfo.setServerName(&amp;quot;服务器名字&amp;quot;); roleInfo.setZoneId(&amp;quot;3&amp;quot;); roleInfo.setZoneName(&amp;quot;我是区名&amp;quot;); roleInfo.setRoleId(&amp;quot;66&amp;quot;); roleInfo.setRoleName(&amp;quot;角色名&amp;quot;); roleInfo.setRoleLevel(&amp;quot;99&amp;quot;); roleInfo.setVipLevel(&amp;quot;3&amp;quot;); roleInfo.setGender(&amp;quot;1&amp;quot;); roleInfo.setPower(&amp;quot;&amp;quot;); roleInfo.setServerOpenTime(&amp;quot;2022-02-02 10:00:00&amp;quot;); roleInfo.setSubmitType(LWSdkRoleInfo.Type_CreateRole); roleInfo.setIsNew(&amp;quot;1&amp;quot;); LWSdk.getInstance().submitRoleInfo(this,roleInfo);</code></pre> <h3>2.5、支付接口(必接)</h3> <h4>2.5.1、方法定义</h4> <pre><code class="language-java">public void pay(Activity context, LWSdkPayInfo lwSdkPayInfo)</code></pre> <h4>2.5.2、参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>context</td> <td>上下文</td> </tr> <tr> <td>LWSdkPayInfo</td> <td>支付实体类对象</td> </tr> </tbody> </table> <pre><code> 支付信息实体类(LWSdkPayInfo)字段说明</code></pre> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>amount</td> <td>订单金额,单位:分;例如:600</td> </tr> <tr> <td>propName</td> <td>道具商品名称,长度不超过50字符。如无传&quot;&quot;</td> </tr> <tr> <td>propId</td> <td>道具商品ID,长度不超过50字符。 如无传&quot;&quot;</td> </tr> <tr> <td>serverId</td> <td>服务器ID,长度不超过20字符,建议使用字符串型数值。</td> </tr> <tr> <td>serverName</td> <td>服务器名称,长度不超过20字符,建议使用字符串型数值。</td> </tr> <tr> <td>roleId</td> <td>角色ID,长度不超过64字符,建议使用字符串型数值。</td> </tr> <tr> <td>roleName</td> <td>角色名称,长度不超过100字符,不设定角色名称可传&quot;&quot;</td> </tr> <tr> <td>roleLevel</td> <td>角色等级,不设定可传 0</td> </tr> <tr> <td>zoneId</td> <td>大区ID, 如有必填,没有则传&quot;1&quot;,长度不超过60字符</td> </tr> <tr> <td>zoneName</td> <td>大区名称, 如有必填,没有传&quot;&quot;,长度不超过60字符</td> </tr> <tr> <td>attach</td> <td>附带参数,支付成功的回调中会带上该参数。</td> </tr> <tr> <td>cpOrderSn</td> <td>CP方订单唯一标识,长度不超过64字符,例如:sgbw2020123456789。</td> </tr> </tbody> </table> <h4>2.5.3、代码示例</h4> <pre><code class="language-java">LWSdkPayInfo lwSdkPayInfo = new LWSdkPayInfo(); lwSdkPayInfo.setCpOrderSn(&amp;quot;test_&amp;quot;+System.currentTimeMillis()); lwSdkPayInfo.setAmount(600); lwSdkPayInfo.setPropName(&amp;quot;我是商品名&amp;quot;); lwSdkPayInfo.setPropId(&amp;quot;product_id_123&amp;quot;); lwSdkPayInfo.setServerId(&amp;quot;123&amp;quot;); lwSdkPayInfo.setServerName(&amp;quot;服务器名字&amp;quot;); lwSdkPayInfo.setRoleId(&amp;quot;66&amp;quot;); lwSdkPayInfo.setRoleName(&amp;quot;角色名&amp;quot;); lwSdkPayInfo.setRoleLevel(&amp;quot;99&amp;quot;); lwSdkPayInfo.setZoneId(&amp;quot;3&amp;quot;); lwSdkPayInfo.setZoneName(&amp;quot;我是区名&amp;quot;); lwSdkPayInfo.setAttach(&amp;quot;我是透传参数&amp;quot;); LWSdk.getInstance().pay(this, lwSdkPayInfo);</code></pre> <h4>2.5.4、客户端支付回调 msg 说明</h4> <pre><code> {&amp;quot;code&amp;quot;:0,&amp;quot;msg&amp;quot;:&amp;quot;close&amp;quot;,&amp;quot;order&amp;quot;:{&amp;quot;cpOrderSn&amp;quot;:&amp;quot;xxxxx&amp;quot;,&amp;quot;checkPay&amp;quot;:false}}</code></pre> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>code</td> <td>0默认响应,-1异常</td> </tr> <tr> <td>msg</td> <td>提示消息</td> </tr> <tr> <td>order</td> <td>回调订单信息对象</td> </tr> <tr> <td>order.cpOrderSn</td> <td>当前回调对应的CP订单号</td> </tr> <tr> <td>order.checkPay</td> <td>是否应该主动査询订单支付状态(客户端轮询发货方式适用),为 <code>false</code> 时表示用户未正常拉起支付,此时可不进行轮询,为 <code>true</code> 时应轮询订单支付状态</td> </tr> </tbody> </table> <h3>2.6、账号注销退出登录(必接)</h3> <h4>2.6.1、判断是否有账号注销退出功能 方法定义</h4> <pre><code class="language-java">public boolean hasLogout()</code></pre> <h4>2.6.2、调用账号注销退出登录 方法定义</h4> <pre><code class="language-java">public void logout(Activity context)</code></pre> <h4>2.6.3、代码示例</h4> <pre><code class="language-java"> if (LWSdk.getInstance().hasLogout()) { LWSdk.getInstance().logout(this); //回调在 LWSdkCallback logout }else { //渠道无注销账号退出登录功能,游戏直接退出当前账号角色返回到初始界面调用SDK的登录接口 }</code></pre> <h3>2.7、敏感词校验(必接)</h3> <h4>2.7.1、判断是否有敏感词校验功能 方法定义</h4> <pre><code class="language-java">public boolean hasCheckChat()</code></pre> <h4>2.7.2、调用敏感词校验 方法定义</h4> <pre><code class="language-java">public void checkChat(Activity context, String msg)</code></pre> <h4>2.7.3、代码示例</h4> <pre><code class="language-java">if (LWSdk.getInstance().hasCheckChat()) { LWSdk.getInstance().checkChat(this,&amp;quot;敏感词测试:●●●&amp;quot;); //回调在 LWSdkCallback checkChat }else { //渠道无敏感词校验方法,游戏需自行实现 }</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>2.8、实名认证状态查询(必接) 在登录账号完成之后调用一次</h3> <h4>2.8.1、判断是否有实名认证接口(因部分渠道无单独获取实名信息接口,即渠道直接登录过程就阻止玩家登录) 方法定义</h4> <pre><code class="language-java">public boolean hasCheckIdAuth()</code></pre> <h4>2.8.2、获取用户实名信息</h4> <pre><code> 回调结果 {&amp;quot;authStat&amp;quot;:1} 0表示未实名,1表示已实名且已成年,2表示已实名未成年</code></pre> <pre><code class="language-java">public void checkIdAuth(Activity context)</code></pre> <h4>2.8.3、代码示例</h4> <pre><code class="language-java">if (LWSdk.getInstance().hasCheckIdAuth()) { LWSdk.getInstance().checkIdAuth(this); //回调在 LWSdkCallback checkIdAuth }else { //渠道无实名信息获取接口,一般为登录过程就阻止玩家登录 //部分特殊的需要运营与游戏协定,是游戏自行实现还是使用乐玩SDK内置实名功能 }</code></pre> <h3>2.9、广告接口(必接)游戏应在登录回调后调用</h3> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>context</td> <td>上下文</td> </tr> <tr> <td>adKey</td> <td>广告位key</td> </tr> </tbody> </table> <h4>2.9.1、广告初始化(必接)</h4> <pre><code class="language-java">LWSdk.getInstance().initAd(this);//此接口用于激励视频配置初始化,有网络请求,游戏应在登录完成后看时机尽早调用</code></pre> <h4>2.9.2、加载广告(必接)</h4> <pre><code> 视频广告预加载,需要在初始化完成后调用。游戏应该在首次出现广告播放按钮的界面调用一次此接口,后续可以在播放完成后调用进行预加载。 注意:首次调用会拉起用户授权,为了合规需要,游戏应该在有广告按钮展示的界面再调用此接口。如果出现广告拉起失败的情况,游戏可以调用一次此接口,但切勿一直重试,一直加载而不展示会影响广告后续填充率。</code></pre> <pre><code class="language-java">LWSdk.getInstance().loadAd(this);</code></pre> <p>响应参数说明9.3</p> <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>2.9.3、显示广告(必接)</h4> <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,由运营同学提供,游戏根据游戏标识对应广告位 ID 传入 ,参考文档 2.11</td> </tr> </tbody> </table> <pre><code class="language-java">LWSdk.getInstance().showAd(this,&amp;quot;99999&amp;quot;);</code></pre> <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>2.10、退出游戏(必接)</h3> <p>先判断有无退出游戏dialog,再调用显示退出dialog</p> <pre><code class="language-java">if (LWSdk.getInstance().hasExitDialog()){ LWSdk.getInstance().showExitDialog(this); //回调在 exitGame } 例子 // 重写监听返回键 退出游戏时 显示退出界面 @Override public boolean dispatchKeyEvent(KeyEvent pKeyEvent) { if (pKeyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK &amp;amp;&amp;amp; pKeyEvent.getAction() == KeyEvent.ACTION_DOWN) { //判断当前SDK是否自带退出界面 if (LWSdk.getInstance().hasExitDialog()) { //显示SDK的退出界面 LWSdk.getInstance().showExitDialog(this); } else { //SDK无退出界面,调用游戏自己的退出界面 //或者直接退出游戏 //showGameExitTips(); //this.finish(); } return false; } return super.dispatchKeyEvent(pKeyEvent); } //该退出界面只为一个例子,游戏可自己实现 private void showGameExitTips() { AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle(&amp;quot;提示&amp;quot;); dialog.setMessage(&amp;quot;是否退出游戏?&amp;quot;); dialog.setPositiveButton(&amp;quot;确定&amp;quot;, (dialog1, which) -&amp;gt; finish()); dialog.setNegativeButton(&amp;quot;取消&amp;quot;, (dialog12, which) -&amp;gt; dialog12.dismiss()); dialog.show(); }</code></pre> <h3>2.11获取游戏标识,用于游戏区分分包,传入对应的分包广告位 ID</h3> <pre><code class="language-java">//如果在初始化之前调用需要加这句 LWSdkConfig.readPoolSdkConfigData(this); //获取游戏标识 LYSdkConfig.getConfigByKey(&amp;quot;lw_game&amp;quot;);</code></pre> <h2>3、生命周期(必接)</h2> <pre><code class="language-java"> @Override protected void onStop() { LWSdk.getInstance().onStop(this); super.onStop(); } @Override protected void onResume() { LWSdk.getInstance().onResume(this); super.onResume(); } @Override protected void onPause() { LWSdk.getInstance().onPause(this); super.onPause(); } @Override protected void onStart() { LWSdk.getInstance().onStart(this); super.onStart(); } @Override protected void onRestart() { LWSdk.getInstance().onRestart(this); super.onRestart(); } @Override protected void onDestroy() { LWSdk.getInstance().onDestroy(this); super.onDestroy(); } @Override protected void onNewIntent(Intent intent) { LWSdk.getInstance().onNewIntent(this,intent); super.onNewIntent(intent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { LWSdk.getInstance().onActivityResult(requestCode,resultCode,data); super.onActivityResult(requestCode, resultCode, data); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { LWSdk.getInstance().onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { LWSdk.getInstance().onSaveInstanceState(outState); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { LWSdk.getInstance().onRestoreInstanceState(savedInstanceState); super.onRestoreInstanceState(savedInstanceState); } @Override public void onWindowFocusChanged(boolean hasFocus) { LWSdk.getInstance().onWindowFocusChanged(hasFocus); super.onWindowFocusChanged(hasFocus); } @Override public void onWindowAttributesChanged(WindowManager.LayoutParams params) { LWSdk.getInstance().onWindowAttributesChanged(params); super.onWindowAttributesChanged(params); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { LWSdk.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults); }</code></pre> <h2>4.混淆配置 proguard-rules.pro</h2> <pre><code class="language-java">#self -keep class com.lewan.** { *; }</code></pre> <h2>5、生成母包,请按照以上配置生成的 APK测试 完成后再执行以下操作</h2> <pre><code>游戏按照以上接入出包把各个接口流程测试成功之后,可以按照以下步骤去除无用资源之后生成母包 母包尽量不接入 V7与appcompat 库,出包如果为多 dex 的话,不超方法数情况可以使用 母包编译版本 请 &amp;lt;=33 ,以适配广点通等渠道 SDK 添加 abortOnError 用于忽略删除无用资源后的编译错误</code></pre> <pre><code>android { defaultConfig { targetSdk 31 multiDexEnabled false } lintOptions { abortOnError false } }</code></pre> <h3>5.1、删除 libs 文件夹中 lwsdk_ly_juhe.aar,保留 lwsdk_dd_juhe.aar</h3> <h3>5.2、删除 依赖 dependencies</h3> <pre><code>dependencies { implementation fileTree(include: [&amp;#039;*.jar&amp;#039;,&amp;#039;*.aar&amp;#039;], dir: &amp;#039;libs&amp;#039;) // implementation &amp;#039;com.google.code.gson:gson:2.10.1&amp;#039; // implementation &amp;#039;com.squareup.okhttp3:okhttp:3.11.0&amp;#039; // implementation &amp;#039;org.jetbrains:annotations:23.0.0&amp;#039; // implementation &amp;#039;androidx.core:core:1.0.0&amp;#039; }</code></pre> <h3>5.3、其他配置</h3> <pre><code>如果母包需要每次出包Manifest中的配置改成相应的包名字段(例如推送和Provider) 则将包名写成 originPackageTag 打包工具会自动替换成目标包名</code></pre> <p>例子</p> <pre><code class="language-xml">android:authorities=&amp;quot;com.xxx.provider&amp;quot; &amp;lt;!-- 写为下面这样即可 --&amp;gt; android:authorities=&amp;quot;originPackageTag.provider&amp;quot;</code></pre> <h3>5.4、按照以上配置重新build出apk即为母包,母包无法直接运行,会缺少资源,需要二次打包才可以运行</h3>

页面列表

ITEM_HTML