android sdk对接文档
<p>[toc]</p>
<h1>SDK接入文档</h1>
<p>[sdk下载](<a href="https://files.hnfushun.net/sdk/android_1.0.1.zip">https://files.hnfushun.net/sdk/android_1.0.1.zip</a> "sdk下载地址")。</p>
<h2>一、注意事项</h2>
<ol>
<li>targetSdkVersion >= 30, minSdkVersion >= 21,v2签名</li>
<li>必须继承SDKApplication</li>
<li>必须实现所有生命周期方法</li>
<li>必须实现角色信息上报</li>
<li>oaid=1.0.25</li>
</ol>
<h2>二、接入流程</h2>
<h3>1. 获取接入参数</h3>
<p>联系我方运营获取以下参数:</p>
<ul>
<li>必须参数:
- gameId:游戏ID
<ul>
<li>loginkey: 服务端登录校验使用</li>
<li>paykey:服务端支付通知使用</li>
</ul></li>
<li>可选参数(由运营决定是否需要):
- packageName:包名
- jpushAppKey:极光AppKey</li>
</ul>
<h3>2. 引入依赖</h3>
<p>在项目的build.gradle中添加以下依赖:</p>
<pre><code class="language-groovy">android{
defaultConfig {
// 极光参数
manifestPlaceholders = [
&quot;JPUSH_PKGNAME&quot;: applicationId,
&quot;JPUSH_APPKEY&quot; : &quot;e270d5cba070b3fff8dd8782&quot;, //Portal上注册的包名对应的 appKey.
&quot;JPUSH_CHANNEL&quot;: &quot;developer-default&quot;, //暂时填写默认值即可.
]
}
}
dependencies {
implementation fileTree(dir: &#039;libs&#039;, include: [&#039;*.jar&#039;, &#039;*.aar&#039;])
implementation &#039;com.android.support.constraint:constraint-layout:1.1.3&#039;
implementation &#039;com.android.support:cardview-v7:28.0.0&#039;
implementation &#039;com.android.support:support-v4:28.0.0&#039;
implementation &quot;com.android.support:recyclerview-v7:28.0.0&quot;
implementation &#039;com.android.support:appcompat-v7:28.0.0&#039;
implementation &#039;org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61&#039;
}</code></pre>
<h3>3. 清单文件配置</h3>
<p>在AndroidManifest.xml中添加游戏ID和scheme配置:</p>
<pre><code class="language-xml">&lt;application&gt;
&lt;!-- 游戏ID配置 --&gt;
&lt;meta-data
android:name=&quot;HUOQILIN_GAME_ID&quot;
android:value=&quot;6001&quot; /&gt;
&lt;!-- 闪屏Activity配置 --&gt;
&lt;activity
android:name=&quot;.SplashActivity&quot;
android:configChanges=&quot;keyboardHidden|screenSize|orientation&quot;
android:screenOrientation=&quot;landscape&quot;
android:hardwareAccelerated=&quot;false&quot;
android:exported=&quot;true&quot;
android:theme=&quot;@android:style/Theme.NoTitleBar.Fullscreen&quot;
android:launchMode=&quot;singleTop&quot;&gt;
&lt;intent-filter&gt;
&lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
&lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
&lt;/intent-filter&gt;
&lt;!-- 添加hqlgame协议头 --&gt;
&lt;intent-filter&gt;
&lt;data android:scheme=&quot;hqlgame&quot; android:host=&quot;${applicationId}&quot;/&gt;
&lt;action android:name=&quot;android.intent.action.VIEW&quot; /&gt;
&lt;category android:name=&quot;android.intent.category.DEFAULT&quot; /&gt;
&lt;category android:name=&quot;android.intent.category.BROWSABLE&quot; /&gt;
&lt;/intent-filter&gt;
&lt;/activity&gt;
&lt;/application&gt;</code></pre>
<h3>4. Application配置</h3>
<p>必须继承SDKApplication:</p>
<pre><code class="language-java">public class YourApplication extends com.hql.sdk.SDKApplication {
@Override
public void onCreate() {
super.onCreate();
}
}</code></pre>
<h3>5. 闪屏Activity配置【必接】</h3>
<p>接入目的:用于巨量、快手等广告平台的过审需求,会在首屏中弹出协议,用户点击同意后才会进入游戏。</p>
<pre><code class="language-java">public class YourSplashActivity extends com.hql.mobile.activity.SplashActivity {
@Override
protected String getGameActivity() {
return YourMainActivity.class.getName();
}
}</code></pre>
<h3>6. SDK初始化</h3>
<p>在Activity中初始化SDK:</p>
<pre><code class="language-java">GameSDK.getInstance().init(this, new GameSDK.GameSDKListener() {
@Override
public void onInitResult(boolean isSuccess) {
// 初始化结果回调
}
@Override
public void onPayResult(boolean isSuccess) {
// 支付结果回调
}
@Override
public void onLoginResult(boolean isSuccess, String token, String userId) {
// 登录结果回调
}
@Override
public void onExit() {
// 退出游戏回调
}
@Override
public void onLogout() {
// 登出回调
}
});</code></pre>
<h3>7. 登录功能</h3>
<pre><code class="language-java">GameSDK.getInstance().login(activity);</code></pre>
<h3>8. 登出功能</h3>
<pre><code class="language-java">GameSDK.getInstance().logout(activity);</code></pre>
<h3>9. 支付功能</h3>
<pre><code class="language-java">PayParams params = new PayParams();
params.setBuyNum(1); // 购买数量
params.setCoinNum(100); // 虚拟币数量
params.setExtension(String.valueOf(System.currentTimeMillis())); // 扩展信息
params.setPrice(money); // 价格(元)
params.setProductId(&quot;com.hqlgame.demo1&quot;); // 商品ID
params.setProductName(&quot;元宝&quot;); // 商品名称
params.setProductDesc(&quot;购买100元宝&quot;); // 商品描述
params.setRoleId(roleId); // 角色ID
params.setRoleLevel(Integer.parseInt(roleLevel)); // 角色等级
params.setRoleName(&quot;角色名称&quot;); // 角色名称
params.setServerId(serverId); // 服务器ID
params.setServerName(&quot;服务器名称&quot;); // 服务器名称
params.setVip(&quot;vip1&quot;); // VIP等级
GameSDK.getInstance().pay(activity, params);</code></pre>
<h3>10. 角色信息上报</h3>
<pre><code class="language-java">UserExtraData extraData = new UserExtraData();
extraData.setDataType(type); // 上报类型
extraData.setServerID(serverId); // 服务器ID
extraData.setServerName(serverName); // 服务器名称
extraData.setRoleName(roleName); // 角色名称
extraData.setRoleLevel(roleLevel); // 角色等级
extraData.setRoleID(roleId); // 角色ID
extraData.setMoneyNum(&quot;0&quot;); // 元宝数量
extraData.setRoleCreateTime(new Date().getTime() / 1000); // 角色创建时间
extraData.setPower(Long.parseLong(power)); // 战斗力
extraData.setVip(vip); // VIP等级
extraData.setExtension(&quot;{}&quot;); // 扩展信息
GameSDK.getInstance().submitExtendData(activity, extraData);</code></pre>
<h3>11. 生命周期方法</h3>
<p>必须在Activity中实现所有生命周期方法:</p>
<pre><code class="language-java">@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GameSDK.getInstance().onCreate(savedInstanceState);
}
@Override
protected void onStart() {
super.onStart();
GameSDK.getInstance().onStart();
}
@Override
protected void onResume() {
super.onResume();
GameSDK.getInstance().onResume();
}
@Override
protected void onPause() {
super.onPause();
GameSDK.getInstance().onPause();
}
@Override
protected void onStop() {
super.onStop();
GameSDK.getInstance().onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
GameSDK.getInstance().onDestroy();
}
@Override
protected void onRestart() {
super.onRestart();
GameSDK.getInstance().onRestart();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
GameSDK.getInstance().onNewIntent(intent);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
GameSDK.getInstance().onSaveInstanceState(outState);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
GameSDK.getInstance().onActivityResult(requestCode, resultCode, data, this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
GameSDK.getInstance().onConfigurationChanged(newConfig);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
GameSDK.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
}</code></pre>
<h3>12. 退出功能</h3>
<pre><code class="language-java">GameSDK.getInstance().exit(activity);</code></pre>
<h2>三、角色信息上报类型</h2>
<ul>
<li>1: 创建角色 (Constants.DATATYPE_CREATE_ROLE)</li>
<li>2: 进入游戏 (Constants.DATATYPE_ENTER_GAME)</li>
<li>3: 等级提升 (Constants.DATATYPE_LEVEL_UP)</li>
<li>4: 退出游戏 (Constants.DATATYPE_OUT_GAME)</li>
</ul>
<h2>四、接入检查</h2>
<ol>
<li>所有生命周期方法必须调用SDK对应方法</li>
<li>角色信息上报必须包含必要字段</li>
<li>支付前必须确保用户已登录</li>
<li>退出游戏必须调用SDK的exit方法</li>
<li>屏幕旋转时需要重新初始化界面</li>
<li>必须正确配置scheme</li>
<li>必须正确配置闪屏Activity和Application</li>
<li>必须从运营处获取正确的gameId</li>
</ol>