# 接入准备(必读)

# 1、拷贝资源

将SDK_Lib文件夹中的资源(assets, libs, res)全部拷贝到工程对应的目录下。

TIP

  • Demo:DHUnionSDK接入的参考示例。
  • SDK_Lib:DHUnionSDK所需的依赖文件,必须拷贝(assets, libs, res)中的全部文件。

WARNING

Demo:在AndroidManifest清单中加入了登录和支付相关的参数插件配置。接入者需将清单中的dh_appId、dh_regCode修改为游戏在开放平台申请的相应参数。清单中除了dh_appId、dh_appKey、dh_regCode之外的配置在平台出包时可能会被替换。

# 2、清单配置(统一必接)

# 2.1、功能配置

# 2.1.1、配置Manifest

WARNING

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

<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="true" /> <!-- 无需变动 -->
        <uses-library android:name="org.apache.http.legacy" android:required="false" /> <!-- 无需变动 -->
        <!-- SDK END -->
    </application>
</manifest>

# 2.1.2、配置Application

WARNING

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

方式一:

若游戏已有自定义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>

# 2.2、查询配置

调用代码示例如下:

import com.dh.DHSDKHelper;

/**
 * @param key 需要查询的配置名称
 * @return 返回字符串,不会出现null情况
 */
String value = DHSDKHelper.query(key);

接口说明:

  1. 可以查询SDK私有SharedPreferences中所有插入的数据。
  2. 可以查询AndroidManifest中meta-data配置的所有数据,其中key为配置项的android:name属性值。

配置信息,主要参数说明如下:

key 别名 示例 备注
dh_appId 开放平台AppID
dh_channelId 渠道编号 1058(官方安卓)、1013(官方iOS) 安卓/苹果Key相同(一级渠道)
dh_channelName 渠道名称
dh_mainchannel CPS主渠道 100001 玩家广告来源渠道(二级渠道)
dh_secochannel CPS次渠道 100002 玩家广告来源渠道(三级渠道)
dev_os 设备系统
dev_uuid 设备唯一ID
dev_brand 设备品牌
dev_model 设备型号
firebase_messaging_token firebase推送token
dh_mode 国内海外标识 国内为1,海外为0

# 3、接入注意事项

代码混淆

SDK部分代码会用到反射,若开启了混淆,请在proguard-rules.pro中配置如下规则。若同时混淆了资源,需要将SDK资源加入白名单,建议尽量避免混淆母包

-keep class com.dh.** {*;}
-dontwarn com.dh.**

-keep class okhttp3.** {*;}
-dontwarn okhttp3.**

-keep class com.dhsdk.** {*;}
-dontwarn com.dhsdk.**

-keepresourcefiles res/**
-keepresourcefiles assets/**

清单配置

SDK部分代码会用Apache的HTTP库进行网络通信,若Android的targetSdkVersion值大于28,则可能会报错。解决方法是请在AndroidManifest.xml中配置以下内容:

<application
    ... >
    <uses-library android:name="org.apache.http.legacy" android:required="false"/>
</application>

这种配置将允许应用继续使用Apache HTTP库,从而避免由于API级别变化导致的错误。

# 4、设置全局回调

IDHSDKCallback:接入方用于统一接收SDK回调结果,通过onDHSDKResult()接收回调数据。此回调应尽量只创建一个统一处理所有功能的回调,避免在每个接口中传入不同的回调

TIP

每个接口传入的回调对象,需要在onDHSDKResult(requestCode, resultCode, resultData)方法中处理相应的回调码。

import com.dh.DHSDKConst;
import com.dh.callback.IDHSDKCallback;

public class GameUnifiedCallback 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 根据不同请求接口返回相应的处理数据

# 5、生命周期回调(统一必接)

推荐建立一个BaseActivity,并让游戏中的所有Activity继承该BaseActivity,这样只需重写一次相关方法。

DANGER

其中,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);
    }
}

# 6、调用初始化接口(统一必接)

SDK初始化是游戏或应用接入的第一个接口。SDK支持的所有登录、支付、分享等插件都将在初始化时统一初始化。请接入方在初始化成功后进行其他插件接口的调用

调用代码示例如下:

import com.dh.DHSDKHelper;

/**
 * @param activity    上下文
 * @param sdkCallback 回调对象
 */
DHSDKHelper.getInstance().init(activity, gameUnifiedCallback);

DANGER

初始化接口一般在onCreate()方法中调用,或游戏界面加载显示后再调用(避免黑屏)!

回调对象示例如下:

import com.dh.DHSDKConst;
import com.dh.callback.IDHSDKCallback;

public class GameUnifiedCallback 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;
        }
    }
}
Last Updated: 2024/11/26 15:08:52