# 接入准备(必读)
# 1、集成指南
# 1.1、导入资源
根据游戏使用的Unity 版本选择对应的.unitypackage
,点击Assets -> Import Package -> Custom Package
导入所有资源。
Editor
: iOS 平台插件管理工具以及相关的文件配置等。script
: Unity SDK 脚本目录。Plugins
: 插件目录,包含 Android、OpenHarmony、Switch、Steam、WeGame、MiniGame、PS4、XboxOne 平台插件管理工具。
DHSDKHelper.cs
: SDK 所有的接口都封装在这个里面。JsonUtils.cs
: SDK 和插件通信数据采用 Json 数据格式。UIMainUnifiedVersion.cs
: SDK 调⽤的 Demo 实例,可以作为参考 API 用法。
WARNING
其中的UIMainUnifiedVersion.cs
是 Unity SDK Demo 的脚本。直接挂载到Main Camera
上,即可快速测试 Unity SDK 功能。(游戏构建正式包时,需删除此脚本!)
# 1.2、配置查询
所有需要向 SDK 查询的配置数据或者缓存数据都可以通过此接口进行查询。
TIP
该接口返回查询内容,数据类型为字符串(string)。在没有值的情况下,将返回空字符。
鸿蒙注意事项
鸿蒙系统该接口为异步回调,无法实时同步返回。游戏需要针对鸿蒙特殊处理,sdk 回调码为 21,示例如下
//data数据返回json的key就是调用query传入的key
{"requestCode":"21","resultCode":"0","data":"{\"dev_os\":\"harmony\"}"}
string key = "dh_channelId";
string value = DHSDKHelper.query(key);
string dev_os = DHSDKHelper.query("dev_os"); // 设备系统类型
string dev_uuid = DHSDKHelper.query("dev_uuid"); // 设备唯一ID
string ad_channel = DHSDKHelper.query("dh_mainchannel"); // 二级渠道号(CPS主渠道)
string ad_subchannel = DHSDKHelper.query("dh_secochannel"); // 三级渠道号(CPS次渠道)
配置信息,主要参数说明如下:
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 |
# 2、安卓配置
# 2.1、配置 Manifest
- Unity 2020 版本及之前:
/Assets/Plugins/Android/DHSDKPlugin/AndroidManifest.xml
- Unity 2021 版本及之后:
/Assets/Plugins/Android/DHSDKPlugin.androidlib/src/main/AndroidManifest.xml
接入方请确保游戏母包的 AndroidManifest.xml
清单文件中包含如下配置,并且替换为发行给的参数:
DANGER
请根据实际情况进行替换参数。其中 dh_unified_field = true
为固定项,否则会导致无法正常接入。
<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"/> <!-- 无需变动 -->
<activity
android:name="com.dhplugin.unity.DHUnityActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:exported="true"
android:screenOrientation="landscape"> <!-- TODO: portrait(竖屏) or landscape(横屏) -->
<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- SDK END -->
</application>
</manifest>
# 2.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>
# 2.3、设置全局回调
接入方根据实际情况接入全局回调。
- Unity 层请参见Unity->基本接口
- Android 原生层请参见Android->接入准备->设置全局回调。
# 2.4、生命周期回调
TIP
接入方若直接使用com.dhplugin.unity.DHUnityActivity
作为游戏的Activity
则跳过此步骤。若接入方需要自定义则需要如下配置。
推荐建立一个BaseActivity
,并让游戏中的所有Activity
继承该BaseActivity
,这样只需重写一次相关方法。
DANGER
其中,onDestroy()
方法只需在主 Activity 中调用一次。该方法用于在程序最终关闭时释放变量引用,若在游戏中途调用,将导致无法调用 SDK。
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import com.dhplugin.unity.DHUnityHelper;
public class BaseActivity {
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
DHUnityHelper.onCreate(this);
}
@Override
protected void onStart() {
super.onStart();
DHUnityHelper.onStart(this);
}
@Override
protected void onResume() {
super.onResume();
DHUnityHelper.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
DHUnityHelper.onPause(this);
}
@Override
protected void onStop() {
super.onStop();
DHUnityHelper.onStop(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
DHUnityHelper.onDestroy(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
DHUnityHelper.onNewIntent(this, intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, requestCode, data);
DHUnityHelper.onActivityResult(this, requestCode, resultCode, data);
}
@Override
public void onBackPressed() {
super.onBackPressed();
DHUnityHelper.onBackPressed(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
DHUnityHelper.onConfigurationChanged(newConfig);
}
}
# 3、苹果配置
DANGER
添加Sign in with Apple
和Universal Link
后,苹果后台的包名和证书也需要更新,否则会编译报错。
# 3.1、苹果登录
WARNING
Sign in with Apple
功能接入需要XCode
版本至少大于11
才行,否则会报错。
Xcode
工程的Target -> Signing & Capabilities
中,点击+ Capability
添加Associated Domains
模块
添加后在里面填写Universal Link
地址参数:applinks:sdk-config.17m3.com
然后继续点击+ Capability
,选择Sign in with Apple
选项
添加后最终效果如下
# 3.2、配置 Manifest
Editor->Mods
下的iOSManifest.projconfig
文件需要配置相关参数,可以文本格式打开。
projmods
: 负责配置是使用苹果In-App Purchase
还是使用越狱渠道支付。AppChannel
: 为1
时会在Unity
导出的UnityAppController.mm
文件插入 SDK 所需代码,默认为1
不用修改。URLTypeSchemes
: 负责设置工程的URLScheme
,用于第三方授权登录时回调,主要格式如下:dh+appID
,tencent+QQKey
,wx+WeiXinKey
,wb+weiboKey
。dianhunxqtweixinalipay
是支付所需参数不需要修改。
示例如下(使用的是越狱渠道支付):
{
"projmods": [
"DHUnitySDKMain",
"DHUnitySDKLogin",
"DHUnitySDKAliPay",
"DHUnitySDKDataCollection",
"DHUnitySDKShare",
"DHUnitySDKPush"
],
"AppChannel": 1,
"URLTypeSchemes": [
"dh1297305671",
"dianhunxqtweixinalipay",
"tencent1103300313",
"wx932f7c792a64900f",
"wb1213431043"
]
}
如果想要使用苹果In-App purchase
支付,projmods
参数改为如下:
{
"projmods": [
"DHUnitySDKMain",
"DHUnitySDKLogin",
"DHUnitySDKAppStorePay",
"DHUnitySDKDataCollection",
"DHUnitySDKShare",
"DHUnitySDKPush"
]
}
# 3.3、配置 MainConfig
在Editor->Mods->iOS->DHSDKMain
目录下需要配置IOSMainConfig.plist
文件里面游戏的相关参数:
参数 | 类型 | 含义 | 是否必须 |
---|---|---|---|
appID | String | 产品 ID,SDK 必要参数,由开放平台分配 | Y |
loginIsShowTourist | Boolean | 登录是否显示游客登录选项 | Y |
loginMainChannel | String | 登录主渠道号 | N |
loginSecoChannel | String | 登录次渠道号 | N |
loginRegCode | String | 注册邀请码,支持注册功能,SDK 服务器将分配给相应的产品注册邀请码 | Y |
KDKey | String | 用于第三方调用的参数,该参数用于”口袋梦三国”授权登录 | N |
QQKey | String | 应用在 QQ 互联注册并审核后的 APP ID | Y |
WeiXinKey | String | 应用在微信开放平台注册并审核后的 APP ID | Y |
WeiXinSecret | String | 应用在微信开放平台注册的 KEY | Y |
weiboKey | String | 应用在新浪微博开放平台注册并审核后的 APP Key | N |
weiboRedirectUrl | String | 应用在新浪微博开放平台注册并审核后的授权回调页 地址,在新浪微博开放平台高级信息中设置,如无特别 需求,推荐填新浪默认地址(https://api.weibo.com/oauth2/default.html) | N |
version | String | 应用版本号 | Y |
isPayTest | Boolean | 是否选择测试支付 | Y |
TalkingDataAppid | String | 数据收集后台 talkingData 应用 ID | N |
TalkingDataChannel | String | 数据收集 TalkingData 渠道名称 | N |
TalkingDataKey | String | 数据收集后台 talkingdata 应用的 key | N |
ADTrackingAppid | String | 数据收集后台 ADTracking 应用 ID | N |
ADTrackingChannel | String | 数据收集 ADTracking 渠道名称 | N |
ADTrackingKey | String | 数据收集后台 ADTracking 应用的 key | N |
UMKey | String | 国内友盟分享需要的 Key,可去友盟后台申请 | N |
XGAPPID | String | 信鸽推送后台申请的 APPID | N |
XGKey | String | 信鸽推送后台申请的 APPKey | N |
TIP
QQkey
, weiboKey
, XGAPPID
等参数需要去相关平台申请,可能会有延时。
# 3.4、其他配置
info.plist(如自动打包配置失败)
配置好了 IOSMainConfig.plist 后还需要对 XCode 工程的 Info.plist 文件进行配置,才能正确处理登录,分享授权等流程
信鸽推送配置
需要在苹果后台开启应用包名的推送功能,并在 XCode 工程中进行如下配置
信鸽后台配置:
可以前往信鸽网站http://xg.qq.com/?ADTAG=EXTERNAL.MEDIA.PUSH_11 (opens new window) 去创建信鸽推送后台应用,并获取推送的参数,填到 IOSMainConfig.plist 中的 XGAPPID 和 XGKey 中
信鸽后台参数示例
# 4、鸿蒙配置
# 4.1、SDK 说明
DANGER
- SDK 提供两种 zip 资源,一种是不包含配置的 SDK,一种是包含配置的 SDK。包含配置的 SDK 为正式参数,游戏直接替换配置文件或替换内部参数;不包含配置的 SDK 仅做接入使用,无法联调。
- Java 环境要求 JDK17
- Unity 必须先升级为团结引擎才能进行适配鸿蒙
# 4.1.1、SDK 目录结构说明
/demo
:demo 工程/resource
: SDK 资源/resource/entry/libs/dhsdkhelper.har
: SDK har 包/resource/entry/src/main/resources/rawfile/dh_config.json
: SDK 配置文件,直接拷贝至/entry/src/main/resources/rawfile
目录/resource/entry/src/main/resources/rawfile/dh_wenxin_config.json
: SDK 配置文件,直接拷贝至/entry/src/main/resources/rawfile
目录/resource/entry/build-profile.json5
: Module 级配置文件/resource/entry/oh-package.json5
: Module 级配置文件/resource/hvigor/hvigor-config.json5
: 编译工具版本配置文件/resource/material
: 签名配置目录/resource/build-profile.json5
: 工程级构建配置文件/resource/metadata.json5
: SDK 自定义的metadata
配置/resource/oh-package.json5
: 工程级配置文件/resource/*-debug.p7b
: 联调版本p7b profile
/resource/*-publish.p7b
: 发布版本p7b profile
/resource/dh-debug.cer
: 联调版本 cer/resource/dh-release.cer
: 发布版本 cer/resource/dh.p12
: 签名文件
# 4.2、配置文件修改
TIP
团结引擎 1.3.0 之前版本导出的工程为 ts 模式,且 api 为 11,需要手动 Export 工程然后使用 DevEco 迁移 api12 后编译出包。团结引擎 1.3.0 及以后版本默认导出 ets 模式,api 为 12,不需要手动迁移。
# 4.2.1、工程级 build-profile.json5
(1) 修改 app/signingConfigs 值
参考/resource/build-profile.json5,拷贝内部app/signingConfigs值替换游戏app/signingConfigs值
说明:name为default的配置是联调签名配置,name为publish的配置是发布签名配置,根据当前包体属性选择修改app/products元素中的signingConfig值
示例如下:
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"storePassword": "***",
"certpath": "dh-debug.cer",
"keyAlias": "***",
"keyPassword": "***",
"profile": "zhzf2-debug.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "dh.p12"
}
},
{
"name": "publish",
"type": "HarmonyOS",
"material": {
"storePassword": "***",
"certpath": "dh-release.cer",
"keyAlias": "***",
"keyPassword": "***",
"profile": "zhzf2-publish.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "dh.p12"
}
}],
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS"
}]
}
(2) 修改 app/products 值
app/products各个元素中增加buildOption属性,值为
{
"strictMode": {
"useNormalizedOHMUrl": true
}
}
示例如下:
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"useNormalizedOHMUrl": true
}
}
}
]
# 4.2.2、工程级 oh-package.json5(团结引擎 1.3.0 及以上版本不需要操作)
直接拷贝平台/resource/oh-package.json
5 到项目根目录,不需要修改
# 4.2.3、entry/build-profile.json5
如果研发有动态import
模块,请buildOption/arkOptions/runtimeOnly/packages
的数组值中追加dhsdkhelper
;
否则拷贝arkOptions
属性到buildOption
节点
示例如下:
{
buildOption: {
arkOptions: {
runtimeOnly: {
// 配置本模块变量动态import其他模块名,要求与dependencies中配置的名字一致。
packages: ["dhsdkhelper"],
},
},
},
}
# 4.2.4、entry/oh-package.json5
如果研发有引用模块,记得保留现有dhsdkhelper
的引用,dependencies
值中追加"dhsdkhelper": "file:libs/dhsdkhelper.har"
,同时执行ohpm install
;
注意:追加内容不允许修改!!!
示例如下:
{
dependencies: {
dhsdkhelper: "file:libs/dhsdkhelper.har",
},
}
# 4.2.5、entry/src/main/module.json5
(1) 修改 module/metadata
请将/resource/metadata.json5的metadata数组内部元素合并追加到游戏工程entry/src/main/module.json5的module/metadata数组中
注意:如果是更新sdk请先移除原电魂SDK中的metadata元素!!!
(2) module/abilities 增加 skills 属性,同时替换子属性 uris/host 为 QQ 的 appid(QQ appid 联系技术获取)
"skills": [
{
"entities": [
"entity.system.home",
"entity.system.browser"
],
"actions": [
"action.system.home",
"ohos.want.action.viewData",
"wxentity.action.open"
],
"uris": [
{
"scheme": "qqopenapi",
"host": "101494849",
"path": "auth",
"linkFeature": "Login",
}
]
}
]
(3) module 增加 querySchemes
"querySchemes": [
"https",
"qqopenapi",
"weixin"
]
# 4.2.6、hvigor/hvigor-config.json5(团结引擎 1.3.0 及以上版本不需要操作)
直接拷贝平台/resource/hvigor/hvigor-config.json5
,不需要修改
# 4.2.7、修改包名
修改根目录AppScope
目录的app.json5
文件,替换bundleName
节点属性为游戏的正式包名
# 4.3、文件资源拷贝
# 4.3.1、签名文件
解压 sdk 资源包,拷贝/resource/material
目录、/resource/*.p7b
文件、/resource/*.cer
文件、/resource/dh.p12
。共一个目录,5 个文件到游戏工程根目录下。
# 4.3.2、har 包
在entry
目录下创建libs
目录,解压 SDK 资源包,将resource/entry/libs
目录下的dhsdkhelper.har
拷贝至libs
目录,文件名不可修改
# 4.3.3、rawfile
拷贝/resource/entry/src/main/resources/rawfile
目录到游戏工程entry/src/main/resources
目录下
# 4.4、代码处理
# 4.4.1、TuanjiePlayerAbility.ets
- 添加引用
import { DHSDKHelper } from "dhsdkhelper";
- 调用生命周期方法
(1) 在 onWindowStageCreate 生命周期调用 DHSDKHelper 的 onWindowStageCreate 生命周期方法,示例如下:
import { DHSDKHelper } from 'dhsdkhelper';
onWindowStageCreate(windowStage: window.WindowStage): void {
//调用SDK的onWindowStageCreate方法
DHSDKHelper.onWindowStageCreate(this.context,windowStage)
(2)在 onCreate 生命周期调用 DHSDKHelper 的 onCreate 方法,示例如下:
import { DHSDKHelper } from 'dhsdkhelper';
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
TuanjieLog.info('%{public}s', 'TuanjiePlayerAbility onCreate, bundleCodeDir:' + this.context.bundleCodeDir);
//调用SDK的onCreate方法
DHSDKHelper.onCreate(want, launchParam)
}
(3)在 onNewWant 生命周期调用 DHSDKHelper 的 onNewWant 方法,如果当前没有 onNewWant 方法,可直接复制下面的方法
import { DHSDKHelper } from 'dhsdkhelper';
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
//调用SDK的onNewWant方法
DHSDKHelper.onNewWant(want, launchParam)
}
# 4.4.2、入口界面类(团结引擎 1.3.1 入口类为 TuanjiePlayerAbilityIndex.ets,团结引擎 1.4.2 入口类为 Index.ets)
重要提示
游戏启动页默认不允许显示,需要在收到 sdk 的同意温馨提示回调后显示
添加引用
import { DHSDKHelper } from "dhsdkhelper"; import { ADInfo, DHCallbackRequestCode, DHCallbackResultCode, DHHarmonyManager, } from "../DHHarmonyManager";
设置页面显示与隐藏
代码示例如下:
//第一步:声明显示标识字段 @State visible: Visibility = Visibility.Hidden ... //第二步:build的根元素设置属性visibility build(){ Column(){...} .visibility(this.visible) }
设置接口调用监听
在入口类的
aboutToAppear
生命周期中添加如下代码(未找到 aboutToAppear 生命周期可直接复制整个 aboutToAppear 方法):aboutToAppear(): void { SetToGlobalThis('launchContext', getContext(this)); TuanjieLog.info('%{public}s', '引擎aboutToAppear'); DHHarmonyManager.getInstance().setListener((funcName, funcParams) => { TuanjieLog.info('%{public}s', '引擎监听到sdk接口调用:' + funcName); //主线程调用SDK接口 if (funcName == DHHarmonyManager.FUNCTION_LOGIN) { DHSDKHelper.login(getContext(this)) } else if (funcName == DHHarmonyManager.FUNCTION_LOGOUT) { DHSDKHelper.logout(getContext(this)) } else if (funcName == DHHarmonyManager.FUNCTION_PAY) { if (funcParams.length > 0) { DHSDKHelper.pay(getContext(this), funcParams[0]) } } else if (funcName == DHHarmonyManager.FUNCTION_SHOW_FAQS) { if (funcParams.length > 0) { DHSDKHelper.showFaqs(getContext(this), funcParams[0]) } } else if (funcName == DHHarmonyManager.FUNCTION_SET_ALIAS) { if (funcParams.length > 0) { DHSDKHelper.setAlias(getContext(this), funcParams[0]) } } else if (funcName == DHHarmonyManager.FUNCTION_DEL_ALIAS) { if (funcParams.length > 0) { DHSDKHelper.delAlias(getContext(this), funcParams[0]) } } else if (funcName == DHHarmonyManager.FUNCTION_OPEN_USER_CENTER) { if (funcParams.length > 0) { DHSDKHelper.openUserCenter(getContext(this), funcParams[0]) } } else if (funcName == DHHarmonyManager.FUNCTION_QUERY) { if (funcParams.length > 0) { DHSDKHelper.query(getContext(this), funcParams[0]) } }else if (funcName == DHHarmonyManager.FUNCTION_EXEC) { if (funcParams.length > 0) { DHSDKHelper.exec(getContext(this), funcParams[0]) } }else if (funcName == DHHarmonyManager.FUNCTION_SHARE_PHOTO) { if (funcParams.length > 0) { DHSDKHelper.sharePhoto(getContext(this), funcParams[0]) } }else if (funcName == DHHarmonyManager.FUNCTION_SHARE_LINKS) { if (funcParams.length > 0) { DHSDKHelper.shareLinks(getContext(this), funcParams[0]) } }else if (funcName == DHHarmonyManager.FUNCTION_COULD_PLAY_AD) { if (funcParams.length > 0) { try{ let adInfo:ADInfo = JSON.parse( funcParams[0]) DHSDKHelper.couldPlayAd(getContext(this), adInfo.uid,adInfo.adType) }catch(e){ TuanjieLog.error('%{public}s', '引擎异常:'+funcParams[0]+','+e); } } }else if (funcName == DHHarmonyManager.FUNCTION_PLAY_AD) { if (funcParams.length > 0) { try{ let adInfo:ADInfo = JSON.parse( funcParams[0]) DHSDKHelper.playAd(getContext(this), adInfo.uid,adInfo.adType) }catch(e){ TuanjieLog.error('%{public}s', '引擎异常:'+funcParams[0]+','+e); } } }else if (funcName == DHHarmonyManager.FUNCTION_SET_GAME_USER_INFO) { if (funcParams.length > 1) { DHSDKHelper.setGameUserInfo(getContext(this), funcParams[0],funcParams[1]) } }else if (funcName == DHHarmonyManager.FUNCTION_TRACK) { if (funcParams.length > 1) { DHSDKHelper.trackEvent(getContext(this), funcParams[0],funcParams[1]) } } }) DHSDKHelper.init(getContext(this), (requestCode: number, resultCode: number, data: string) => { TuanjieLog.info('%{public}s', '引擎监听到回调:' + requestCode + ',' + resultCode + ',' + data); //判断同意温馨提示成功,成功后可以展示游戏引擎界面 if (requestCode == DHRequestCode.REQ_AGREE_WENXIN_TIPS && resultCode == DHResultCode.OK) { //设置展示引擎的界面 this.visible = Visibility.Visible } else if (requestCode == DHRequestCode.REQ_INIT && resultCode == DHResultCode.OK) { TuanjieLog.info('%{public}s', 'sdk初始化完成,乐变查询热更开始'); //乐变查询热更,如果游戏使用乐变,请打开下面注释,同时import 乐变库 //LebianSdk.queryUpdate((ret) => { ////文档说明: https://qlhwsgprmx.feishu.cn/wiki/RSwYwc3yBiwJSBkpZsXcmW47n3X //TuanjieLog.info('%{public}s', 'sdk初始化完成,乐变查询热更结束:' + ret); //}) } TuanjieMainWorker.getInstance() .postMessage({ type: 'callbackToUnity', requestCode: requestCode, resultCode: resultCode, data: data }) }) }
# 4.4.3、TuanjieMainWorker.ets
添加引用
import { DHHarmonyManager } from "../DHHarmonyManager";
在
constructor
构造方法中定义的onmessage
类型别名中,msg.data.type
为"RUN_ON_UI_THREAD_JS"
的逻辑代码中添加funcName
判断,建议在最后添加如下代码private constructor() { ... this.threadWorker.onmessage = (msg) => { ... if (msg.data.type == "RUN_ON_UI_THREAD_JS") { ... //添加如下代码 let funcName: string = msg.data.funcName;//如果内部已声明funcName可屏蔽该行 if (funcName == DHHarmonyManager.CALL_DHSDK) { let subFuncName:string = msg.data.subFuncName TuanjieLog.info('%{public}s', '引擎调用电魂sdk接口:' + subFuncName); let subFuncParams:string[] = msg.data.subFuncParams DHHarmonyManager.callSdkFunction(subFuncName, subFuncParams) } } } }
接口调用(必接) →