跳到主要内容

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

危险

必须接入此配置,否则可能会出现启动失败或功能异常的情况。

AndroidManifest.xml
<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>标签中进行如下配置:

AndroidManifest.xml
<application android:name="xxx.xxx.xxx.GameApplication"><application> 

方式二:

若游戏没有自定义Application,则直接在AndroidManifest.xml文件的<application>标签中进行如下配置:

AndroidManifest.xml
<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;
}
}
}

回调参数相应类型如下:

参数类型说明
requestCodeIntDHSDKConst.REQ_INIT初始化
DHSDKConst.REQ_EXIT退出游戏
DHSDKConst.REQ_LOGIN登录游戏
DHSDKConst.REQ_LOGIN_OUT退出登录
DHSDKConst.REQ_PAY支付
DHSDKConst.REQ_LINK游客账号绑定
105折叠屏幕变化
resultCodeIntDHSDKConst.RET_OK成功标志
DHSDKConst.RET_FAIL失败标志
resultDataString根据不同请求类型返回处理数据

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;
}
}
}

插件表:

  1. 登录支付插件
  2. 数据统计插件
  3. 分享插件
  4. 广告插件
  5. 客服插件
  6. 推送通知插件
  7. 语音插件

返回成功数据:

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 ] }