更新日期:2024-03-28 Android客户端接入文档
<h3>一、 <strong>接入说明</strong></h3>
<p><strong>1.1:谁来阅读此文档</strong></p>
<p>接入厂商的产品,技术人员,平台技术人员。</p>
<p><strong>1.2:注意事项</strong></p>
<p>接口参数大小写敏感</p>
<p>request和response的编码格式为UTF-8。</p>
<p><strong>1.3:名词定义</strong></p>
<table>
<thead>
<tr>
<th><strong>名词</strong></th>
<th><strong>说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>CP</td>
<td>游戏合作商</td>
</tr>
<tr>
<td>APP</td>
<td>接入平台的游戏</td>
</tr>
<tr>
<td>JF_APPID</td>
<td>接入时由平台分配的游戏ID。</td>
</tr>
<tr>
<td>JF_APPKEY</td>
<td>接入时由平台分配的游戏/应用密钥。</td>
</tr>
</tbody>
</table>
<h3>二、 拷贝部分</h3>
<p><strong>2.1:arr文件的拷贝</strong></p>
<p>将libs文件夹下的arr包拷贝到自己项目的libs文件夹下并添加依赖</p>
<p>api fileTree(include: ['<em>.jar', '</em>.aar'], dir: 'libs')<br />
gradle 加入如下配置<br />
<img src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml1900\wps1.jpg" alt="" /></p>
<p>eclipse 接入 解压arr文件,拷贝相关jar包 及 资源到对应目录引用,<strong>Manifest</strong>配置也需要拷贝到相关文件</p>
<p><strong>2.2:AndroidManifest.xml文件的配制</strong><br />
(可将内容拷贝粘贴到自己的<strong>Manifest里面</strong>,需要更换<strong>JF_APPID</strong>和<strong>JF_APPKEY</strong>为绝锋游戏平台所提供的JF_APPID和JF_APPKEY)</p>
<pre><code class="language-xml"><meta-data android:name="JF\_APPID" android:value=""/>
<meta-data android:name="JF\_APPKEY" android:value=""/>
<activity
android:name="com.juefeng.sdk.juefengsdk.ui.activity.InitdataActivity"
android:screenOrientation="根据游戏设置"/>
</code></pre>
<h3>三、 sdk业务接口代码说明</h3>
<p><strong>3.1:sdk初始化,登录,注册,支付,退出等事件监听接口的实现及参数说明</strong></p>
<p><strong>3.1.1:api说明</strong></p>
<p>SDK的大部分API调用,使用了事件通知的方式回调给游戏,游戏通过创建一个SDKEventListener对象,实现对SDK的每个事件结果的监听以下是代码部分(包含对每个回调接口的解释,及参数说明)。<br />
<strong>3.1.2:代码部分:</strong></p>
<p><img src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml1900\wps2.png" alt="" /></p>
<p><img src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml1900\wps3.png" alt="" /></p>
<p><strong>3.1.3:接口及参数说明</strong></p>
<table>
<thead>
<tr>
<th><strong>方法</strong></th>
<th><strong>说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>onInitSuccess(String desc,boolean isAutoLogin)</td>
<td>初始化成功;参数说明:desc(字符串“初始化成功”)IsAutoLogin(是否可调取自动登录)</td>
</tr>
<tr>
<td>onInitFaild(String desc)</td>
<td>初始化失败;参数说明:desc(字符串“初始化失败原因”)</td>
</tr>
<tr>
<td>onLoginSuccess(LogincallBack logincallBack)</td>
<td>登录成功参数说明:logincallBack(登录成功后返回的用户信息对像)</td>
</tr>
<tr>
<td>onLoginFailed(LoginErrorMsgerrorMsg)</td>
<td>登录失败参数说明:errorMsg (登录失败后返回的错误码,及失败原因)</td>
</tr>
<tr>
<td>onPaySuccessCallback (PaySuccessInfopaySuccessInfo)</td>
<td>支付成功参数说明:paySuccessInfo(支付成功后返回的订单信息,含有订单号,此处还需要去跟游戏服务器确认支付信息,才可确定支付成功)</td>
</tr>
<tr>
<td>onPayFaildCallback(PayFaildInfopayFaildInfo)</td>
<td>支付失败参数说明:payFaildInfo(支付失败返回的信息)</td>
</tr>
<tr>
<td>onExit(String desc)</td>
<td>退出成功参数说明:desc(字符串“成功退出”)</td>
</tr>
<tr>
<td>onCancleExit(String desc)</td>
<td>取消退出,选择继续游戏参数说明:desc(字符串“取消退出”)</td>
</tr>
<tr>
<td>onCreatedOrder(CreateOrderInfocreatOrderInfo)</td>
<td>SDK服务器已经成功创建此订单creatOrderInfo订单信息</td>
</tr>
<tr>
<td>onLogoutLogin()</td>
<td>注销账号登录(需在此回调中退出游戏,返回登录页面)</td>
</tr>
<tr>
<td>onSwitchAccountSuccess</td>
<td>此回调接口是在当SDK内部有切换帐号的功能,且切换成功时会调用,游 戏方需要在这个回调接口中注销原来的角色数据,然后根据新的 (参数 login中可以获取到)来重新加载角色数据;</td>
</tr>
<tr>
<td>onGameSwitchAccount</td>
<td>此接口是在游戏内有账号切换功能点击 调用 JFSDK.getInstance().switchAccount(MainActivity.this);后回调 游戏方账号切换逻辑需要在此回调中执行</td>
</tr>
</tbody>
</table>
<p><strong>3.2:sdk的初始化</strong></p>
<p><strong>3.2.1:代码部分</strong></p>
<p>JFSDK.<em>getInstance</em>().init(<strong>this</strong>, <strong>mSDKEventListener</strong>);</p>
<p><strong>3.2.2:参数说明</strong></p>
<p>1、初始化sdk资源,注册sdk事件监听器。</p>
<p>2:mSDKEventListener 为3.1实现的事件监听器</p>
<p><strong>3.2.3:回调说明</strong></p>
<p>初始化的成功失败会回调 3.1中的onInitSuccess 和 onInitFaild cp可根据回调结果做出相应处理</p>
<p><strong>3.3:登录</strong></p>
<p><strong>3.3.1:登录拉起说明</strong></p>
<p>方法需要在UI线程中调用,</p>
<p>代码调用:JFSDK.<em>getInstance</em>().doLogin(MainActivity.<strong>this</strong>);<br />
<strong>3.3.2:登录回调说明</strong></p>
<p>回调说明:登录和注册的失败会回调到<strong>3.1</strong>中的<strong>onLoginSuccess</strong>和<strong>onLoginFailed</strong> cp可根据回调结果做出相应处理</p>
<p><strong>3.3.3:返回参数说明</strong>:</p>
<p>登录或注册成功回调方法:</p>
<p>onLoginSuccess</p>
<p>回调参数说明:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>参数说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>string</td>
<td>登录成功后,用户的]()userId(唯一)</td>
</tr>
<tr>
<td>token</td>
<td>string</td>
<td>用户此次登录平台分配的唯一token(唯一)</td>
</tr>
<tr>
<td>userName</td>
<td>string</td>
<td>用户名</td>
</tr>
<tr>
<td><strong>i</strong>sAuthenticated</td>
<td>boolean</td>
<td><em>是否已经实名认证,true(是),false(否)</em></td>
</tr>
<tr>
<td>pi</td>
<td>String</td>
<td>(防沉迷预留字段)</td>
</tr>
<tr>
<td>age</td>
<td>int</td>
<td>年龄</td>
</tr>
</tbody>
</table>
<p>登录失败回调方法:</p>
<p>onLoginFaild</p>
<p>该方法在产生业务逻辑错误时调用。</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>参数说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code</td>
<td>string</td>
<td>登录失败错误码</td>
</tr>
<tr>
<td>errorMsg</td>
<td>string</td>
<td>登录失败的消息提示</td>
</tr>
</tbody>
</table>
<p><strong>3.4:支付</strong></p>
<p><strong>3.4.1 支付接口</strong></p>
<p>public void showPay(Activity context, JfOrderInfo orderInfo)</p>
<table>
<thead>
<tr>
<th>JfOrderInfo字段</th>
<th><strong>说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>level</td>
<td>角色等级</td>
</tr>
<tr>
<td>goodsId</td>
<td>商品Id (商品编号) 没有传 “1”</td>
</tr>
<tr>
<td>goodsName</td>
<td>商品名称(String)不可为null不可为空串</td>
</tr>
<tr>
<td>goodsDes</td>
<td>商品描述(String)不可为null不可为空串</td>
</tr>
<tr>
<td>price</td>
<td>钱数 (int数字类型字符串)不可为null不可为空串(单位元)</td>
</tr>
<tr>
<td>serverId</td>
<td>区服ID 不可为null不可为空串</td>
</tr>
<tr>
<td>serverName</td>
<td>区服名称(必传)不可为null不可为空串</td>
</tr>
<tr>
<td>roleId</td>
<td>角色游戏内唯一标示(必传)(不可为null不可为空串)</td>
</tr>
<tr>
<td>roleName</td>
<td>角色名称(必传)</td>
</tr>
<tr>
<td>vip</td>
<td>用户Vip等级 没有传 “1”</td>
</tr>
<tr>
<td>remark</td>
<td>透传字段(无特殊情况 请传入<strong>订单号(<strong>cpOrderId</strong>)</strong>)</td>
</tr>
<tr>
<td>cpOrderId</td>
<td>Cp生成的订单号(必传)</td>
</tr>
</tbody>
</table>
<p><strong>3.4.2:支付的回调</strong></p>
<p>支付涉及三个回调,创建订单成功,支付成功,支付失败。分别会回调到<strong>3.1</strong>中的</p>
<p><strong>onCreatedOrder</strong>,<strong>onPaySuccessCallback</strong>,<strong>onPayFaildCallback</strong></p>
<p><strong>3.4.<strong><strong>3</strong></strong>:回调返回对象字段解释</strong></p>
<p>onPaySuccessCallback,onCreatedOrder,onPayFaildCallback</p>
<pre><code>PaySuccessInfo{
public String orderId; //服务端生成的唯一订单号
public String gameRole;// 游戏端传入的角色Id
public String gameArea; //游戏端传入的区服信息
public String productName; //游戏端传入的商品名称
public String productDesc; ///游戏端传入的商品描述
public String remark; //游戏端传入的自定义参数
public String cpOrderId; //cp传入的订单号
}
CreateOrderInfo{
public String orderId; //sdk服务端生成的唯一订单号
public String gameRole;//游戏端传入的角色Id
public String gameArea; //游戏端传入的区服信息
public String productName; //游戏端传入的商品名称
public String productDesc; //游戏端传入的商品描述
public String cpOrderId; //cp传入的订单号
public String remark; //游戏端传入的自定义参数}
PayFaildInfo{
private String code; //错误码
private String msg; //失败说明 }
</code></pre>
<p><strong>3.5:平台浮点,用户中心(必须调用)</strong></p>
<p><strong>3.5.1:功能说明</strong></p>
<p>登录完成后,可以通过悬浮按钮进入个人中心,</p>
<p>l 查看平台帐号信息</p>
<p>l 设置帐号密码保护</p>
<p>l 帐号绑定手机</p>
<p>l 修改帐号密码</p>
<p>l 管理支付密码,查看充值和消费记录</p>
<p><strong>3.5.2:API调用</strong></p>
<p>1、浮点的显示</p>
<p>代码:JFSDK.<em>getInstance</em>().showFloatView(MainActivity.<strong>this</strong>);</p>
<p>2、浮点的隐藏</p>
<p>public void removeFloatView(){}//隐藏悬浮窗口<br />
<strong>3.5.3:API调用位置</strong></p>
<p><strong>1:浮点的显示</strong></p>
<p>登陆成功回调内调用<br />
<strong>3.6: 游戏数据同步(必须调用)</strong></p>
<p><strong>3.6.1:说明</strong></p>
<p>首次登入游戏或角色信息发生变化时sdk需要同步角色信息,角色信息分为四种类型</p>
<table>
<thead>
<tr>
<th>类型</th>
<th>Type值</th>
<th>调用方法</th>
</tr>
</thead>
<tbody>
<tr>
<td>角色创建</td>
<td>1</td>
<td>JFSDK.getInstance().syncInfo(roleInfo);</td>
</tr>
<tr>
<td>角色登陆</td>
<td>2</td>
<td>JFSDK.getInstance().syncInfo(roleInfo);</td>
</tr>
<tr>
<td>角色升级</td>
<td>3</td>
<td>JFSDK.getInstance().syncInfo(roleInfo);</td>
</tr>
<tr>
<td>角色退出</td>
<td>4</td>
<td>JFSDK.getInstance().syncInfo(roleInfo);</td>
</tr>
</tbody>
</table>
<p>代码如下<strong>3.7.2</strong>所示,不同类型传入不同type值</p>
<p><strong>3.6.2:调用示例(角色创建)</strong></p>
<table>
<thead>
<tr>
<th>JfRoleInfo</th>
<th>字段名称</th>
</tr>
</thead>
<tbody>
<tr>
<td>serverName</td>
<td>服务器名称(必传)</td>
</tr>
<tr>
<td>serverId</td>
<td>服务器ID(必传)</td>
</tr>
<tr>
<td>roleName</td>
<td>角色名称(必传)</td>
</tr>
<tr>
<td>roleId</td>
<td>角色ID(必传)</td>
</tr>
<tr>
<td>partyId</td>
<td>公会id(尽量传)</td>
</tr>
<tr>
<td>partyName</td>
<td>公会名称(尽量传)</td>
</tr>
<tr>
<td>gameRoleLevel</td>
<td>角色等级(必传)</td>
</tr>
<tr>
<td>attach</td>
<td>额外字段</td>
</tr>
<tr>
<td>type</td>
<td>1:创建,2:登录,3:升级 4:退出(必传)</td>
</tr>
<tr>
<td>experience</td>
<td>当前经验值(尽量传)</td>
</tr>
<tr>
<td>roleCreateTime</td>
<td>角色创建时间 long(type为1传入)</td>
</tr>
<tr>
<td>vipLevel</td>
<td>Vip等级 int(尽量传)</td>
</tr>
<tr>
<td>gameRolePower</td>
<td>战力值 int(尽量传)</td>
</tr>
</tbody>
</table>
<pre><code>JfRoleInfo roleInfo = new JfRoleInfo();
roleInfo.setGameRoleLevel("3");
roleInfo.setRoleId("角色id");
roleInfo.setGameRolePower(55555);
roleInfo.setServerId("服务器ID");
roleInfo.setServerName("服务器名称");
roleInfo.setRoleName("柳鸿振");
roleInfo.setExperience("135355446");
roleInfo.setPartyId("公会ID");
roleInfo.setPartyName("公会名称");
roleInfo.setRoleCreateTime(System.currentTimeMillis());
roleInfo.setVipLevel(5);
roleInfo.setType("1");
JFSDK.getInstance().syncInfo(roleInfo);
</code></pre>
<p><strong>3.8:游戏退出</strong></p>
<p><strong>3.8.1:API的使用</strong></p>
<p>调用JFSDK.<em>getInstance</em>().exitLogin(MainActivity.<strong>this</strong>);<br />
<strong>3.8.2:调用位置</strong></p>
<p>需要重写 dispatchKeyEvent 方法 代码如下(可直接拷贝)</p>
<p><img src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml1900\wps4.png" alt="" /></p>
<p><strong>3.8.3:回调说明</strong></p>
<p>点击返回键调用 JFSDK.<em>getInstance</em>().exitLogin();</p>
<p>选择退出是 会回调 (3.1)SdkEventListener 内的 onExit()方法 在此方法里面执行游戏界面的关闭</p>
<p><img src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml1900\wps5.png" alt="" /><img src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml1900\wps6.png" alt="" /></p>
<h3><strong>3.8.4:游戏内退出</strong></h3>
<p>游戏内出现顶号或者主动注销账号的时候调用</p>
<p>JFSDK.<em>getInstance</em>().logoutLogin(<strong>this</strong>);</p>
<p><strong>3.9:注销登录(必须实现)</strong></p>
<p>点击个人中心的退出当前账户按钮,会回调**(3.1)<strong>中的</strong>onLogoutLogin**接口 此接口内需实现返回游戏登录界面的代码 <strong>游戏方执行</strong></p>
<p><strong>3.10:SDK生命周期接口(必须实现)</strong></p>
<pre><code>public void onCreate(Activity act);(必须先于 SDK 的 init 前调用)
public void onResume(Activity act);
public void onPause(Activity act);
public void onStart(Activity act);
public void onRestart(Activity act);
public void onStop(Activity act);
public void onDestroy(Activity act);
public void onNewIntent(Activity act, Intent intent);
public void onActivityResult(Activity act,int requestCode, int resultCode, Intent intent);
public void onWindowFocusChanged(boolean hasFocus)
public void onBackPressed()
public void onRequestPermissionsResult(Activity activity, int requestCode, String[] permissions, int[] grantResults)
</code></pre>
<p>接口说明 :在游戏的主Activity中添加相对应的生命周期接口。</p>
<h2><strong>3.11:Application的添加(必接)</strong></h2>
<p>若 App本身无自定义Application, 请在AndroidManifest.xml 中接入</p>
<p><application android:name=" com.juefeng.sdk.juefengsdk. JfApplication" </application></p>
<p>若 App本身有自定义Application,请继承自com.juefeng.sdk.juefengsdk. JfApplication</p>
<p><strong>3.12:游戏内账号切换</strong></p>
<p>游戏内有账号切换按钮时点击按钮需要调用一下接口</p>
<p>JFSDK.getInstance().switchAccount(MainActivity.this);</p>
<p>接口会回调SDKEventListener 中的onGameSwitchAccount接口参考<strong>3.1.3</strong>在接口内做相关处理</p>
<h3>四、注意</h3>
<p><strong>4.1:运行环境</strong></p>
<ul>
<li>目前该sdk只支持Android 4.0或以上版本的手机系统</li>
<li>手机必须处于网络环境中,2.5G/3G/4G/WIFI等等</li>
<li>targetSdkVersion 28</li>
</ul>
<p><strong>4.2:混淆</strong></p>
<p>JFSDK包是以jar提供给用户的,已经半混淆状态,您在混淆自己APK包的时候请不要将jar包一起混淆,因为里面有自定义UI控件,若被混淆后会因为无法找到相关类而抛异常</p>