2.3 Demo
具体 Demo 请参考我们托管到 GitHub 的开源项目,该项目里 SolarEngineDemo.cs 脚本中, 提供了插件所支持的api的调用示例
SDK名称:热力引擎 Unity SDK v1.3.0.9
开发者名称:汇量云(北京)科技有限公司
SDK版本号:1.3.0.9
主要功能:热力引擎是一站式增长分析与发行决策平台,致力于帮助开发者搭建便捷、高效的数据管理中台,洞察业务运营全链路数据,制定更优增长决策。热力引擎支持全球全渠道数据管理,帮助开发者实现归因分析、用户粒度 ROI 分析,能有效衡量渠道价值,为投放和变现策略调优提供全方位数据支持。同时,提供应用内埋点及参数管理,配合多种分析模型与 AB 测试功能,全面还原用户全生命周期旅程,挖掘用户需求及业务增长点,快速验证并推行产品迭代优化,为开发者提升业务运营效率,实现规模化增长赋能。
适用范围:适用于Android5.0(APILevel21)及以上的操作系统。
隐私政策链接: https://www.solar-engine.com/privacyPolicy.html
合规指南:详见本页面底部合规指南内容。
Appkey 查询路径:资产管理-应用管理-16位 Appkey(即应用 ID)。
下载链接 solarengine-unity-sdk-1.3.0.9.zip
1)前往最新SDK下载地址下载SDK压缩包,解压至本地目录。
2)将solarengine-unity-sdk.unitypackage,导入Unity中。
注:使用低版本(v1.3.00之前)插件的客户, 要升级到1.3.0.0(或以上版本),可参 UnitySDK 升级方案
具体 Demo 请参考我们托管到 GitHub 的开源项目,该项目里 SolarEngineDemo.cs 脚本中, 提供了插件所支持的api的调用示例
成功安装后,会在菜单栏出现"SolarEngineSDK"选项, 点击[SolarEngineSDK-->SDK Edit Settings]弹出SolarEngineSettings面板
SDK Edit Settings面板介绍:
参数名称 参数含义 参数类型 是否必填 备注 Quick integration
China Mainland
SolarEngine后台创建的产品的数据存储区域为中国大陆区
bool 是 此选项二选一 Non-China-Mainland
SolarEngine后台创建的产品的数据存储区域为非中国大陆区 bool 是 OPTIONAL FEATURES可选功能 bool 否 勾选才有以下选项
OPTIONAL FEATURES
OAID是否使用OAID功能 bool 否 当数据存储区域为中国大陆时,不可取消
当数据存储区域为非中国大陆时,我们会默认取消
ODMInfo是否需要使用Google Ads集成式转化衡量(ICM)功能 bool 否 1、仅当您选择的数据存储区域为海外时才会有此选项(iOSSDK 需为1.3.0.2及以上版本)
2、Target minimum iOS Version需要设置为12及以上版本
DeepLink 是否使用DeepLink功能 bool 否
- iOS URL Identifie
唯一标识用户自定义的URL Scheme string 否 例:solarengine
- iOS URL Schemes
自定义的Scheme的名称,不需要加入「://」 string 例:test1
- iOS Universal Links Domains
通用链接,请务必从链接开头移除协议 (例如https://或applinks: ) string 否 例:test1.link.solar-engine.com
- Android URL Schemes
定义的Scheme的名称,不需要加入「://」 string 否 例:test1 SDK Version
- iOS Version
iOSSDK版本 string 否 不填默认最新版 iOS更新日志
- Android Version
Android SDK版本 string 否 不填默认最新版 Android 更新日志
- Open Harmony Version
Open HarmonySDK版本 string 否 不填默认最新版鸿蒙更新日志(团结引擎才有此选项) Apply应用面板操作 是 每次面板内容更改后,都需要点击应用 示例
点击Apply后出现以下弹框说明设置成功
1、支持Xcode版本:14.0或更高
2、适用范围:适用于 iOS 11.0 及以上的操作系统。
3、插件需要 CocoaPods。按照CocoaPods 入门指南中的说明安装 CocoaPods 。(CocoaPods集成需要打开.xcworkspace后缀名的文件)
4、如想手动集成,请参考常见问题 Unity手动集成iOSSDK
1、请确保SDK版本更改后,有如下拉取页面「首先确保当前Unity在安卓平台」
拉取成功后Plugins-->Android目录下的SDK版本是您面板上所输入的版本的SDK
拉取失败请参考常见问题 :Unity 拉取安卓SDK失败
2、在项目 AndroidManifest.xml 文件中,加入如下权限:(Assets/Plugins/Android/AndroidManifest.xml)
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
注:android.permission.READ_PHONE_STATE 为非必要权限。如果开发者使用了数据存储区域是中国大陆的 SDK,热力引擎 SDK 并不会要求开发者强制获取此权限。如果开发者获取了此权限且 Android 系统在 6.0 以上,需要动态申请此权限。
位置如下:
微信小游戏:需要先接入微信团队开源的 Unity 转微信小游戏的插件
抖音小游戏:需要先接入头条提供的 StarkSDK 插件抖音云游戏:需要先接入头条提供的 云加速SDK
快手小游戏:需要先接入快手提供的Unity WebGL sdk
正式接入之前,您需要针对不同的平台添加不同的全局宏参数。
•微信小游戏:
SOLARENGINE_WECHAT
•抖音小游戏:
SOLARENGINE_BYTEDANCE
•抖音云游戏:
SOLARENGINE_BYTEDANCE_CLOUD
•快手小游戏:
SOLARENGINE_KUAISHOU
添加步骤如下:
•打开 Project Settings 界面;
•找到 Scripting Define Symbols
,新增一行输入对应平台的全局宏参数,然后点击 Apply 按钮完成设置
团结引擎(仅团结引擎需要)发布webgl前请点击「SolarEngineSDK-->MiniGame-->Tuanjie-->
ByteDanceConvertCore
」
参考:抖音小游戏支持抖音云
请参考 小游戏后台配置模块
仅需配置「China Mainland 」或者「Non-China-Mainland」,然后点击「Apply」即可
因为SDK的部分数据,保存在了
AppData\LocalLow\Company Name(需替换为自己项目名称)\Product Name(需替换为自己项目名称)\com.solarengine
所以需要设置软件卸载时删除此文件。
这里提供一个.bat脚本
1、将Company Name和Product Name替换为自己项目名称,然后将此文件保存为.bat后缀
2、设置卸载时运行此脚本
@echo off
rem Define the path of the cache directory to be cleaned
set "cacheDir=%LOCALAPPDATA%\..\LocalLow\Company Name(需替换)\Product Name(需替换)\com.solarengine"
echo The value of cacheDir is: %cacheDir%
rem Clean the cache directory
if exist "%cacheDir%" (
echo Cleaning the game cache directory...
rd /s /q "%cacheDir%"
echo The game cache directory has been cleaned.
) else (
echo The game cache directory does not exist, no need to clean.
)
echo All cleaning operations are completed.
pause
Player Settings---> Other Settings--->Predefined Permissions
添加下列权限,如图所示
ohos.permission.INTERNET//必须权限,允许应用发送网络请求。
ohos.permission.GET_NETWORK_INFO//必须权限,允许应用检测网络状态。
ohos.permission.APP_TRACKING_CONSENT//必须权限,允许应用获取oaid。注:须在获得此权限后再初始化sdk,如果缺少此权限,会影响设备归因
ohos.permission.STORE_PERSISTENT_DATA//必须权限,允许应用卸载时保留distinctid,用于设备归因。
如果打包时需要开启混淆配置,请将下方代码增加到混淆配置文件中
-keep
./oh_modules/@solarengine/core
目前仅支持Export Project方式打包
在应用安装后首次冷启动时,需要先预初始化 SDK,预初始化时 SDK 不采集任何个人信息也不会向热力引擎上报数据
方法示例
public static void preInitSeSdk(string appKey)
调用示例
SolarEngine.Analytics.preInitSeSdk("开发者申请的appkey");
方法示例
public static void initSeSdk(string appKey, SEConfig seConfig)
参数说明
参数名 | 参数含义 | 参数类型 | 是否必传 |
appkey | 第一步获取的 appkey | String | 是 |
seConfig | SDK 配置项 | SEConfig | 是 |
SEConfig 参数说明
参数名称 | 参数含义 | 适用平台 | 参数类型 | 是否必传 |
---|---|---|---|---|
logEnabled | 是否开启日志打印,默认为关闭状态 | iOS/Android/小游戏/Windows/MacOS | bool | 否 |
isGDPRArea | 是否为GDPR区域,默认为false | iOS/Android | bool | 否 |
adPersonalizationEnabled | 用户是否允许Google将其数据用于个性化广告,开发者自定义,不设置则默认不上报该字段,只有Android调用有效,iOS没有此字段,无需设置此字段 | Android | bool | 否 |
adUserDataEnabled | 用户是否同意将其数据发送到Google,开发者自定义,不设置则默认不上报该字段,只有Android调用有效,iOS没有此字段,无需设置此字段 | Android | bool | 否 |
isEnable2GReporting | 是否允许2G上报数据。默认为false | iOS/Android | bool | 否 |
isDebugModel | 是否开启Debug调试模式,默认为关闭状态 | iOS/Android/小游戏/Windows/MacOS | bool | 否 |
isCoppaEnabled | 是否支持coppa合规。默认为false | iOS/Android | bool | 否 |
isKidsAppEnabled | 是否支持Kids App。默认为false | iOS/Android | bool | 否 |
attAuthorizationWaitingInterval | iOS首次上报事件支持设置ATT授权等待,最多支持等待120秒. 设置等待后SDK会等用户ATT授权或等待超时才上报Install等事件。 单位:秒 |
iOS | int | 否 |
fbAppID | 如果海外开发者需要用到meta归因,此处设置meta appid,只有Android调用有效,iOS没有此字段,无需设置此字段 | Android | string | 否 |
deferredDeeplinkenable
|
是否开启延迟Deeplink, 默认false关闭 | iOS/Android | bool | 否 |
miniGameInitParams
|
小游戏相关配置 | 小游戏 | MiniGameInitParams | 否 |
MiniGameInitParams 参数说明
参数名称 |
参数含义 |
参数类型 |
是否必传 |
openid |
小游戏openid, 如不传则由SDK获取当前的openid(必须在SE后台应用管理中填写AppID和AppSecret;并前往抖音/微信后台进行配置,详见后台配置) |
string |
否 |
anonymous_openid |
小游戏anonymous_openid, 如不传则由SDK获取当前的anonymous_openid(必须在SE后台应用管理中填写AppID和AppSecret,同openid)「只抖音有此参数」 |
string |
否 |
unionid |
小游戏unionid |
string |
否 |
isInitTencentAdvertisingGameSDK |
参考:微信小游戏支持腾讯回传事件 | ||
reportingToTencentSdk |
|||
tencentAdvertisingGameSDKInitParams |
调用示例
SEConfig seConfig = new SEConfig();
seConfig.logEnabled = true;
SolarEngine.Analytics.initSeSdk("开发者申请的appkey",seConfig);
//小游戏初始化示例
SEConfig seConfig = new SEConfig();
MiniGameInitParams initParams = new MiniGameInitParams();
initParams.anonymous_openid = "your anonymous_openid";
initParams.unionid = "your unionid";
initParams.openid = "your openid";
seConfig.miniGameInitParams = initParams;
seConfig.logEnabled = true;
SolarEngine.Analytics.initSeSdk("开发者申请的appkey",seConfig);
//鸿蒙初始化示例
//申请oaid权限
private void RequestPermissionsFromUserHandler()
{
#if UNITY_OPENHARMONY&&!UNITY_EDITOR
SolarEngine.Analytics.requestPermissionsFromUser(callback);
#endif
}
private void callback(int code)
{
//code : 0:成功 1:失败 999:错误
Debug.Log( " requestPermissionsFromUser : " + code);
SEConfig seConfig = new SEConfig();
seConfig.logEnabled = true;
SolarEngine.Analytics.initSeSdk("开发者申请的appkey",seConfig);
}
在原有初始化方法的基础上新增监听初始化回调的方法
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appKey | 应用的appKey,需要联系商务人员从热力引擎后台获取 | string | 是 |
seConfig | 热力引擎SDK配置项 | SEConfig | 是 |
调用示例
//初始化
SolarEngine.Analytics.preInitSeSdk("开发者申请的appkey"); //必须要先调用预初始化
SEConfig seConfig = new SEConfig();
seConfig.logEnabled = true;
seConfig.initCompletedCallback = onInitCallback; //此处将初始化回调放入SEConfig中
SolarEngine.Analytics.initSeSdk("开发者申请的appkey", seConfig);
//初始化回调
private void onInitCallback(int code) {
///code码请参考下方初始化回调code码
}
初始化回调 code 码:
0 | 初始化成功 |
101 | SDK未预初始化 |
102 | appkey非法 |
103 | context为null(仅Android生效) |
104 | distinct_id生成失败(仅Android生效) |
SDK提供获取归因结果信息接口,开发者可使用归因信息做埋点等逻辑处理
SDK提供两种方式获取归因结果信息
方法示例
public struct SEConfig
{
...
public Analytics.SEAttributionCallback attributionCallback { get; set; }
}
示例代码
private void initSDK(){
SEConfig seConfig = new SEConfig();
// 设置归因结果回调
SolarEngine.Analytics.SEAttributionCallback callback = new SolarEngine.Analytics.SEAttributionCallback(attributionCallback);
seConfig.attributionCallback = callback;
SolarEngine.Analytics.initSeSdk(AppKey, seConfig);
}
private void attributionCallback(int code , Dictionary<string, object> attribution)
{
Debug.Log("SEUnity: errorCode : " + errorCode);
Debug.Log("SEUnity: attribution : " + attribution);
if (code == 0)
{
// 归因成功
}
else
{
// 归因失败
}
}
方法示例
public static Dictionary<string, object> getAttribution()
示例代码
Dictionary<string, object> attribution = SolarEngine.Analytics.getAttribution();
Debug.Log("[unity] getAttribution = "+ attribution);
6.3.1 iOS和Android
归因code 描述及 归因结果详情见:归因结果详情
6.3.2 小游戏
{
"app_platform": "minigame",
"app_type": "",
"appkey": "",
"attribution_method": "",
"brand": "HUAWEI",
"channel_id": "-1",
"channel_name": "自然量",
"collector_version": "1.0.1.0",
"container_name": "",
"country": "CN",
"current_event_time": "",
"custom_params": {
"_app_name": "",
"_browser": "",
"_channel": "",
"_city": "chaoyang",
"_country": "CN",
"_country_code": "CN",
"_distinct_id_type": "1101",
"_event_type": "1",
"_experiment_group_id_list": "[]",
"_group_id_list": "[]",
"_is_first_day": "true",
"_is_first_time": "true",
"_lib": "5",
"_log_count": "0",
"_page_title": "",
"_province": "bj",
"_referrer_title": "",
"_screen_height": "800",
"_screen_width": "360",
"_sdk_type": "unity",
"_source_type": "sdk",
"_sub_lib_version": "1.0.1.0",
"_type": "event",
"ecpm_rate": "1",
"ip_upload": "111.203.237.82",
"random_user_id": "2998000746001017891",
"se_pro_id": "787"
},
"device_id": "",
"device_id_type": "",
"install_time": "1727335959338",
"integration_type": "sdk",
"ipv4": "111.203.237.82",
"language": "zh_CN",
"model": "JEF-AN20",
"openid": "",
"os": "android",
"os_version": "31",
"query_info": {
"gsid": ""
},
"report_time": "1727335958766",
"scene_id": "other",
"unionid": "",
"result": "organic"
}
attribution 为一个 json 字符串,内容如下
iOS/Android
归因code 描述及 归因结果详情见:归因结果详情
小游戏:
字段名 | 值 | 描述 |
---|---|---|
app_platform | minigame | app的平台 |
app_type | 平台类型:wechat、douyin | |
appkey | SE后台创建的应用唯一标识符 | |
attribution_method | 归因方式:透传归因(url)、点击归因(click) | |
brand | HUAWEI | 设备生产厂商 |
channel_id | -1 | 渠道id |
channel_name | 自然量 | 渠道名称 |
collector_version | 1.0.1.0 | 收集器版本 |
container_name | 宿主 APP 名称,抖音专属 | |
country | CN | 国家 |
current_event_time | 当前事件发生的时间 | |
custom_params | 事件自定义参数嵌套 | |
device_id | 归因设备唯一ID | |
device_id_type | 设备ID类型 | |
install_time | 1727335959338 | 激活时间 |
integration_type | sdk | 集成方式。固定为sdk |
ipv4 | 111.203.237.82 | 用户公网IP v4版本 |
language | zh_CN | 设备语言 |
model | JEF-AN20 | 设备型号 |
openid | 当前小程序内,用户唯一ID | |
os | android | 宿主 App 操作系统平台 |
os_version | 31 | 宿主 App 操作系统版本 |
query_info | 从小程序平台获取的query信息,SE携带参数+渠道追加参数 | |
report_time | 1727335958766 | 服务器接收到的时间 |
scene_id | other | 场景值 |
unionid | 抖音专属,当前小程序内,匿名用户唯一ID | |
result | organic |