SDK初始化
1、拷贝资源
将SDK_Lib文件夹中的资源(assets, libs, res)
全部拷贝到工程对应的目录下。
- Demo:DHUnionSDK接入的参考示例。
- SDK_Lib:DHUnionSDK所需的依赖文件,必须拷贝
(assets, libs, res)
中的全部文件。
Demo:在AndroidManifest清单中加入了登录和支付相关的参数插件配置。接入者需将清单中的dh_appId、dh_regCode修改为游戏在开放平台申请的相应参数。清单中除了dh_appId、dh_appKey、dh_regCode之外的配置在平台出包时可能会被替换。
2、清单配置(统一必接)
2.1、功能配置
2.1.1、配置Manifest
必须接入此配置,否则可能会出现启动失败或功能异常的情况。
<manifest>
<!-- SDK -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- SDK END -->
<application
android:name="com.dh.framework.app.DHApplication"
android:usesCleartextTraffic="true"> <!-- 按需变动 -->
<!-- SDK -->
<meta-data android:name="dh_appId" android:value="1696674719" /> <!-- 替换参数 -->
<meta-data android:name="dh_regCode" android:value="******" /> <!-- 替换参数 -->
<meta-data android:name="dh_channelId" android:value="1000" /> <!-- 无需变动 -->
<meta-data android:name="dh_channelName" android:value="test" /> <!-- 无需变动 -->
<meta-data android:name="dh_mainchannel" android:value="0" /> <!-- 无需变动 -->
<meta-data android:name="dh_secochannel" android:value="0" /> <!-- 无需变动 -->
<meta-data android:name="dh_mode" android:value="1" /> <!-- 无需变动 -->
<meta-data android:name="dh_payType" android:value="1" /> <!-- 无需变动 -->
<meta-data android:name="dh_signinType" android:value="1" /> <!-- 无需变动 -->
<meta-data android:name="dh_unified_field" android:value="false" /> <!-- 无需变动 -->
<uses-library android:name="org.apache.http.legacy" android:required="false" /> <!-- 无需变动 -->
<!-- SDK END -->
</application>
</manifest>
2.1.2、配置Application
必须接入此配置,否则可能会出现启动失败或功能异常的情况。
方式一:
若游戏已有自定义Application
,需改为继承com.dh.framework.app.DHApplication
import com.dh.framework.app.DHApplication;
public class GameApplication extends DHApplication {
@Override
public void onCreate() {
super.onCreate();
}
}
同时需要在AndroidManifest.xml
文件的<application>
标签中进行如下配置:
<application android:name="xxx.xxx.xxx.GameApplication"><application>
方式二:
若游戏没有自定义Application
,则直接在AndroidManifest.xml
文件的<application>
标签中进行如下配置:
<application android:name="com.dh.framework.app.DHApplication"><application>
3、设置全局回调
IDHSDKCallback:接入方用于统一接收Union SDK回调结果,通过onDHSDKResult()
接收回调数据。
此回调尽量只创建一个统一处理所有功能的回调,尽量不要在每个接口传入不同回调。
每个接口传入的回调对象,需要实现onDHSDKResult(requestCode, resultCode, resultData)
处理回调。
import com.dh.DHSDKConst;
import com.dh.callback.IDHSDKCallback;
public class DHSDKCallback implements IDHSDKCallback {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_INIT:
// 初始化结果
if (resultCode == DHSDKConst.RET_OK) {
// 初始化成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 初始化失败
}
break;
case DHSDKConst.REQ_EXIT:
// 退出游戏结果
if (resultCode == DHSDKConst.RET_OK) {
// 退出游戏成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 退出游戏失败
}
break;
case DHSDKConst.REQ_PAY:
// 支付结果
if (resultCode == DHSDKConst.RET_OK) {
// 支付成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 支付失败
}
break;
case DHSDKConst.REQ_LOGIN:
// 登录结果
if (resultCode == DHSDKConst.RET_OK) {
// 登录成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 登录失败
}
break;
case DHSDKConst.REQ_LOGIN_OUT:
// 退出登录结果
if (resultCode == DHSDKConst.RET_OK) {
// 退出登录成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 退出登录失败
}
break;
case 105:
// 屏幕变化通知
if (resultCode == DHSDKConst.RET_OK) {
// 屏幕变化成功
// resultData示例:{"width":1920,"height":1080}
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 屏幕变化失败
}
break;
default:
// 其他结果
break;
}
}
}
回调参数相应类型如下:
参数 | 类型 | 值 | 说明 |
---|---|---|---|
requestCode | Int | DHSDKConst.REQ_INIT | 初始化 |
DHSDKConst.REQ_EXIT | 退出游戏 | ||
DHSDKConst.REQ_LOGIN | 登录游戏 | ||
DHSDKConst.REQ_LOGIN_OUT | 退出登录 | ||
DHSDKConst.REQ_PAY | 支付 | ||
DHSDKConst.REQ_LINK | 游客账号绑定 | ||
105 | 折叠屏幕变化 | ||
resultCode | Int | DHSDKConst.RET_OK | 成功标志 |
DHSDKConst.RET_FAIL | 失败标志 | ||
resultData | String | 根据不同请求类型返回处理数据 |
4、生命周期回调(必接)
推荐可建立BaseActivity
,将游戏所有Activity
继承该BaseActivity
,以此只需重写一次。
其中onDestroy()
方法只需在主Activity
调用一次,该方法用于在程序最终关闭时释放变量引用,若游戏中途调用会导致无法调用SDK。
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import com.dh.DHSDKHelper;
public class BaseActivity {
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
DHSDKHelper.getInstance().onCreate(this);
}
@Override
protected void onStart() {
super.onStart();
DHSDKHelper.getInstance().onStart(this);
}
@Override
protected void onResume() {
super.onResume();
DHSDKHelper.getInstance().onResume(this);
}
@Override
protected void onPause() {
super.onPause();
DHSDKHelper.getInstance().onPause(this);
}
@Override
protected void onStop() {
super.onStop();
DHSDKHelper.getInstance().onStop(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
DHSDKHelper.getInstance().onDestroy(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
DHSDKHelper.getInstance().onNewIntent(this, intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, requestCode, data);
DHSDKHelper.getInstance().onActivityResult(this, requestCode, resultCode, data);
}
@Override
public void onBackPressed() {
super.onBackPressed();
DHSDKHelper.getInstance().onBackPressed(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
DHSDKHelper.getInstance().onConfigurationChanged(newConfig);
}
}
5、调用初始化接口(必接)
SDK初始化是游戏或应用接入的第一个接口,SDK支持的所有登录支付、分享等插件都会在初始化时统一初始化,请接入者在初始化成功后进行其他插件接口调用。
初始化示例:
import com.dh.DHSDKHelper;
/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().init(activity, sdkCallback);
初始化接口一般在onCreate()
方法中调用,或游戏界面加载显示后再调用(避免黑屏)!
回调对象示例如下:
public class DHSDKCallback implements IDHSDKCallback {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_INIT:
// 初始化结果
if (resultCode == DHSDKConst.RET_OK) {
// 初始化成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 初始化失败
}
break;
default:
// 其他结果
break;
}
}
}
插件表:
- 登录支付插件
- 数据统计插件
- 分享插件
- 广告插件
- 客服插件
- 推送通知插件
- 语音插件
返回成功数据:
init ok: { [1 : init ok] [2 : operation ok] [3 : No.3 plugin empty ] [4 : No.4 plugin empty ] [5 : No.5 plugin empty ] [6 : No.6 plugin empty ] [7 : No.7 plugin empty ] [8 : No.8 plugin empty ] }
返回失败数据:
init fail: { [1 : No.1 plugin empty] [2 :No.2 plugin empty] [3 : No.3 plugin empty ] [4 : No.4 plugin empty ] [5 : No.5 plugin empty ] [6 : No.6 plugin empty ] [7 : No.7 plugin empty ] [8 : No.8 plugin empty ] }