热力引擎 ( SolarEngine ) 是面向移动开发者提供的帮助产品持续增长的一站式智能营销服务平台,在报表方面提供固定分析报表服务和高度自定义的数据分析服务,系统在数据埋点、属性设置、报表创建、看板配置等多方面都支持开发者按需求进行个性化配置。
本文档将针对 Android SDK 端的数据上报进行说明,帮助您进行数据接入。
本文档适用于 Android 5.0 (API Level21) 及以上的操作系统。
隐私权政策:https://www.solar-engine.com/privacyPolicy.html
在正式开始数据接入之前,需要提前准备一些接入过程中需要的参数、准备 SDK 包,下面说明如何获取这些信息。
Appkey 查询路径:资产管理-应用管理-16位 Appkey(即应用 ID)。
如果要在您的 Flutter 应用中使用SE Flutter SDK,请先将 SDK 加入项目。
如果您创建的产品数据存储区域是中国大陆,请把以下内容添加到你Flutter工程的 pubspec.yaml 文件中:
dependencies:
se_flutter_sdk_cn: ^1.5.3
如果您创建的产品数据存储区域是非中国大陆,请把以下内容添加到你Flutter工程的 pubspec.yaml 文件中:
dependencies:
se_flutter_sdk_us: ^1.5.3
通过步骤2.2集成到SE Flutter SDK之后,如需升级Android SDK,在Flutter项目下的Flutter Plugins插件目录中找到Android lib目录下的build.gradle文件修改配置即可,具体操作如下:
如果您创建的产品数据存储区域是中国大陆,请使用:
implementation 'com.reyun.solar.engine.china:solar-engine-core:1.3.0.6'
如果您创建的产品数据存储区域是非中国大陆,请使用:
implementation 'com.reyun.solar.engine.oversea:solar-engine-core:1.3.0.6'
如果您使用了参数下发SDK,需要添加以下配置:
如果您创建的产品数据存储区域是中国大陆,请使用:
implementation 'com.reyun.solar.engine.china:solar-remote-config:1.3.0.6'
如果您创建的产品数据存储区域是非中国大陆,请使用:
implementation 'com.reyun.solar.engine.oversea:solar-remote-config:1.3.0.6'
具体路径如下图所示:
如果使用 gradle 拉取代码失败,需要在项目根目录的 build.gradle 文件中添加 maven 仓库配置,具体配置如下:
maven {
url "https://maven-android.solar-engine.com/repository/se_sdk_for_android/"
}
如果数据存储区域是非中国大陆且需要获取oaid时,需要在项目build.gradle文件中添加如下maven仓库配置,具体配置如下:
implementation 'com.reyun.solar.engine:se-plugin-oaid:1.3.0.6'
还需要在项目根目录的build.gradle文件中添加如下maven仓库配置,具体配置如下:
maven {
url "https://developer.huawei.com/repo/"
}
maven {
url 'https://developer.hihonor.com/repo'
}
如果打包时需要增加混淆,请将下方代码增加到混淆配置文件中
-keep class com.reyun.** {*; }
-keep class route.**{*;}
-keep interface com.reyun.** {*; }
-keep interface route.**{*;}
-dontwarn com.reyun.**
-dontwarn org.json.**
-keep class org.json.**{*;}
# Google lib库
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {
com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
java.lang.String getId();
boolean isLimitAdTrackingEnabled();
}
-keep public class com.android.installreferrer.** { *; }
# 如果使用到了获取oaid插件,请添加以下混淆策略
-keep class com.huawei.hms.**{*;}
-keep class com.hihonor.**{*;}
iOS使用pod集成不需要手动设置依赖
SolarEngine 初始化启动方法
热力引擎SDK提供了两种初始化方法,开发者可以通过不同的初始化方法来选择自己项目中是否接入在线参数SDK,其中SEConfig代表了热力引擎SDK的配置参数,RCConfig代表了在线参数SDK的配置参数
在应用安装后首次冷启动时,需要先预初始化 SDK,预初始化时 SDK 不采集任何个人信息也不会向热力引擎上报数据
方法示例
static void preInitialize(String appkey)
调用示例
String appkey = "";
SolarEngine.preInitialize(appkey);
方法示例
static void initializeWithAppkey(String appkey, SolarEngineConfig config)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appKey | 应用的appKey,需要联系商务人员从热力引擎后台获取 | String | 是 |
config | 热力引擎SDK配置项 | SolarEngineConfig | 是 |
SolarEngineConfig参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
---|---|---|---|
logEnabled | 是否开启日志打印,默认为关闭状态 | bool | 否 |
isGDPRArea | 是否为GDPR区域,默认为false | bool | 否 |
adPersonalizationEnabled | 用户是否允许Google将其数据用于个性化广告,不设置则不上报该字段,可选字段,只有Android调用有效,iOS没有此字段,无需设置此字段 | bool | 否 |
adUserDataEnabled | 用户是否同意将其数据发送到Google。不设置则不上报该字段,可选字段,只有Android调用有效,iOS没有此字段,无需设置此字段 | bool | 否 |
isDebugModel | 是否开启Debug调试模式,默认为关闭状态 | bool | 否 |
remoteConfigData | 在线参数配置 | SERemoteConfigData | 否 |
OnAttributionSuccess | 归因成功回调 | Callback | 否 |
OnAttributionFail | 归因失败回调 | Callback | 否 |
isCoppaEnabled | 是否支持coppa合规。默认为false | bool | 否 |
isKidsAppEnabled | 是否支持Kids App。默认为false | bool | 否 |
attAuthorizationWaitingInterval | iOS首次上报事件支持设置ATT授权等待,最多支持等待120秒. 设置等待后SDK会等用户ATT授权或等待超时才上报Install等事件。 单位:秒 | int | 否 |
fbAppID | 如果海外开发者需要用到meta归因,此处设置meta appid | String | 否 |
enableDelayDeeplink | 是否开启延迟Deeplink, 默认NO关闭 | bool | 否 |
调用示例
String appkey = "";
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
config.onAttributionSuccess = (data) {
print(data);
};
config.onAttributionFail = (code) {
print(code);
};
SolarEngine.initializeWithAppkey(appkey, config);
RCConfig参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
enable | 是否启用在线参数SDK,默认为关闭状态,必传字段 | bool | 是 |
mergeType | SDK配置合并策略,默认情况下服务端配置跟本地缓存配置合并,具体释义参考下方参数解释,可选字段 | MergeType | 否 |
customIDProperties | 自定义ID,跟用户在后台设置的使用自定义ID匹配对应 | Map<String, dynamic> | 否 |
customIDEventProperties | 自定义ID事件属性值,跟用户在后台设置的使用自定义ID事件属性值匹配对应,可选字段 | Map<String, dynamic> | 否 |
customIDUserProperties | 自定义ID用户属性值,跟用户在后台设置的使用自定义ID用户属性值匹配对应,可选字段 | Map<String, dynamic> | 否 |
customIDEventProperties | 自定义ID设备属性值,跟用户在后台设置的使用自定义ID设备属性值匹配对应,可选字段 | Map<String, dynamic> | 否 |
mergeType(合并策略)介绍
参数名称 | 参数含义 |
WITH_USER | app首次启动或版本更新时, 使用服务端配置跟用户默认配置合并,此方法可以清除本地缓存配置 |
WITH_CACHE | 使用服务端配置跟用户本地已有缓存配置合并,在线参数SDK默认合并策略 |
调用示例
String appkey = "";
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
SERemoteConfigData rcConfig = SERemoteConfigData();
rcConfig.enable = true;
rcConfig.logEnabled = true;
rcConfig.customIDProperties = {
"key": "customID",
"value": "androidID"
};
rcConfig.customIDEventProperties = {
"key": "customEventID",
"value": "_appStart"
};
rcConfig.customIDUserProperties = {
"key": "customUserID",
"value": "Topic"
};
config.remoteConfigData = rcConfig;
SolarEngine.initializeWithAppkey(appkey, config);
参数说明:
appkey: 参考上面描述
config: 参考上面描述
callback: 初始化回调,回调参数code:
static void initializeWithCallbacK(String appkey, SolarEngineConfig config, OnInitializationCallback callback)
调用示例
String appkey = "";
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
SolarEngine.initializeWithCallbacK(appkey, config, (int? code) {
// 初始化回调处理
if (code == 0) {
// 初始化成功
print("初始化成功");
} else {
// 初始化失败
print(code);
}
}
);
非中国大陆 iOS SDK支持ODMInfo 归因
初始化开启ODMInfo
String appkey = "";
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
config.enableODMInfo = true; // 开启ODMInfo
SolarEngine.initializeWithCallbacK(appkey, config, (int? code) {
// 初始化回调处理
if (code == 0) {
// 初始化成功
print("初始化成功");
} else {
// 初始化失败
print(code);
}
}
);
集成ODMInfo 库
在example/ios/Podfile 文件中添加 ODMInfo
target 'Runner' do
# 集成ODMInfo
pod 'SESDKODMInfo'
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
en
修改后在example/ios/目录下执行命令 `pod install` 或者重新再flutter项目再导出一次iOS
在涉及欧盟地区用户的隐私信息处理时,我们的SDK默认会采集一些与用户隐私相关的字段,例如 gaid、IMEI、IMEI2、AndroidId 等。然而,根据欧盟地区的隐私保护法规,如果用户不同意数据采集,开发者需要进行相应的配置来关闭SDK对隐私字段的采集。
以下是集成SDK时的步骤:
1.在SDK初始化的代码中,默认情况下无需特殊设置。
2.当用户拒绝敏感数据采集时,请在SDK初始化中加入 isGDPRArea(true) 关闭敏感数据采集。
3.请确保在用户同意之前不要触发任何与隐私相关的事件。
4.在您的隐私政策中明确说明您在欧盟地区用户的隐私数据处理政策和实践。 请记住,根据欧盟地区隐私保护法律的规定,只有当用户明确拒绝数据采集时,才需要设置isGDPRArea(true)来关闭SDK对隐私字段的采集。
如果你的应用在欧盟地区运营并且在Google投放您的应用,请务必传入此属性,以确保您符合Google欧盟用户意见征求新政的规定
关于支持Google的欧盟意见征求新政:为了应对即将生效的欧盟《数字市场法案》(DMA),Google对其欧盟用户意见征求政策进行了更新,SE SDK也做了对应的适配。
Google新政如下:
https://support.google.com/tagmanager/answer/13695607?hl=en
预置属性如下图所示:
SE 属性 | Google 属性 | 值(boolean ) | 含义 | 错误提示 |
---|---|---|---|---|
_isGDPRArea | eea | true/false | 是否为GDPR区域,默认为false | |
_ad_personalization_enabled | ad_personalization | true/false | 用户是否允许Google将其数据用于个性化广告 | The value of "_ad_personalization_enabled" cannot be empty. |
_ad_user_data_enabled | ad_user_data | true/false | 用户是否同意将其数据发送到Google | The value of "_ad_user_data_enabled" cannot be empty. |
调用示例
SolarEngineConfig config = SolarEngineConfig();
config.isGDPRArea = true;
config.adPersonalizationEnabled = false;
config.adUserDataEnabled = false;
SolarEngine.initializeWithAppkey(appkey, config);
方法示例
static void setGDPRArea(bool isGDPRArea)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
isGDPRArea | 是否是GDPR地区,默认为false | bool | 是 |
调用示例
SolarEngine.setGDPRArea(true);
如果App有归因需求则设置ATT授权等待,在等待时间内SDK会等用户授权ATT后能获取到IDFA才上报Install事件,从而增加归因精准率。如果超过了ATT授权等待时间用户还未授权则SDK也将上报事件,事件中不包含IDFA有效字段
注:此方法仅iOS适用
调用示例
SolarEngineConfig config = SolarEngineConfig();
config.attAuthorizationWaitingInterval = 120; // 等待iOS ATT授权,最多等待120秒后上报事件
SolarEngine.initializeWithAppkey(appkey, config);
获取当前设置的distinct_id
方法示例
static Future<String> getDistinctId()
返回值:返回当前设置的distinct_id,没有则为null
示例代码
void getDistinctId() async{
var distinctId = await SolarEngine.getDistinctId();
print(distinctId);
}
访客 ID 即 _visitor_id,是用户在设备上安装了应用之后,登录状态之前该用户的唯一标识。
我们提供访客 ID 自定义设置的接口,如果您有自己的访客管理体系需要替换访客 ID,应在 SDK 初始化之前进行设置。
数据上报时仅以最后一次传入的访客 ID 为准,应避免多次调用造成多个非正常访客 ID 先后上报数据的情况。
调用 setVisitorID 方法来设置访客 ID。
方法示例
static void setVisitorID(String visitorID)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
visitorID | 需要设置的访客 ID | String | 是 |
调用示例
SolarEngine.setVisitorID("xxx访客IDxxx");
注:
1.该调用仅为向 SDK 传入访客 ID,不会上报用户设置事件。
2.开发者设置的访客 ID 长度不能超过 128 个字符,否则会设置失败。
获取当前设置的访客 ID,可以调用 getVisitorID 方法获取。
方法示例
static Future<String> getVisitorID()
返回值:返回已经设置的访客 ID,默认为""
调用示例
void getVisitorId() async{
var visitorID = await SolarEngine.getVisitorId();
print(visitorID);
}
指用户在应用中登录之后,登录账号在应用中的唯一标识。登录之前将以访客 ID 作为用户标识。
在账号 ID 设置完成后,在调用 logout 清除账号 ID之前,设置的账号 ID 将一直保留,并作为用户身份识别 ID。清除账号 ID 的操作请在有真实退出登录状态行为时进行,关闭 App、退至后台运行时无需调用。
数据上报时仅以最后一次传入的账号 ID 为准,应避免多次调用造成多个非正常账号 ID 先后上报数据的情况。
调用 login 方法来设置用户的账号 ID。
注:开发者设置的账户ID长度不能超过128个字符,否则会设置失败。
方法示例
static void login(String accountID)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
accountID | 需要设置的账号 ID | String | 是 |
调用示例
SolarEngine.login("xxx账号IDxxx");
调用 getAccountID 来获取用户的账号 ID。
方法示例
static Future<String> getAccountID()
返回值:返回已经设置的账号ID,默认为""
调用示例
void getAccountID() async{
var accountID = await SolarEngine.getAccountID();
print(accountID);
}
调用 logout 来清除账号 ID。
方法示例
static void logout()
调用示例
SolarEngine.logout();
注:该调用仅为通知 SDK 清除账号 ID,不会上报用户登出事件。
公共事件属性指的就是每个事件都会带有的属性,对于一些重要的属性,譬如用户的来源渠道、转化而来的广告 ID 等,这些属性需要设置在每个事件中,SDK 需支持这些属性被设置为公共事件属性的设置。
调用 setSuperProperties 来设置公共事件属性
注:
1.公共事件属性将会被保存到缓存中,无需每次启动 App 时调用。
2.如果调用 setSuperProperties 上传了先前已设置过的公共事件属性,则会覆盖之前的属性。
3.如果公共事件属性和事件上报上传的某个属性的 key 重复,则该事件的属性会覆盖公共事件属性。
4.此方法设置公共事件属性最好放在SDK初始化方法initSeSdk之前设置,避免造成某些上报事件中不存在公共事件属性的问题。
5.开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
方法示例
static void setSuperProperties(Map<String, dynamic> superProperties)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
superProperties | 开发者自定义公共事件属性字典 | Map<String,dynamic> | 是 |
调用示例
Map<String, dynamic> properties = {};
properties['key1'] = 'String';
properties['key2'] = 2;
properties['key3'] = false;
SolarEngine.setSuperProperties(properties);
调用 unsetSuperProperty 方法可清除指定key值的一个公共事件属性
方法示例
static void unsetSuperProperty(String key)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
key | 需要清除的公共事件属性key值 | String | 是 |
调用示例
SolarEngine.unsetSuperProperty("K3");
调用 clearSuperProperties 方法可清空所有公共事件属性
方法示例
static void clearSuperProperties()
调用示例
SolarEngine.clearSuperProperties();
SDK提供获取归因结果信息接口,开发者可使用归因信息做埋点等逻辑处理
SDK提供两种方式获取归因结果信息
•1、设置归因结果回调:当SDK获取归因结果成功或者失败时会给出回调(此接口为异步回调)
•2、直接获取归因结果:直接从SDK缓存中获取归因结果,SDK还没归因结果时直接返回null(此接口为同步返回)
在SEConfig中设置归因回调
示例代码
String appkey = "";
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
config.onAttributionSuccess = (data) {
print(data);
};
config.onAttributionFail = (code) {
print(code);
};
SolarEngine.initializeWithAppkey(appkey, config);
static Future<String> getAttribution()
示例代码
void getAttribution() async{
var attribution = await SolarEngine.getAttribution();
print(attribution);
}
归因code 描述及 归因结果详情见:归因结果详情
开发者可以通过调用此接口获取预置属性信息
方法示例
static Future<Map> getPresetProperties() async
示例代码
var properties = await SolarEngine.getPresetProperties();
print(properties.toString());
返回字段说明
字段 | 说明 |
---|---|
_appkey | SE平台分配的appKey,开发者初始化传入 |
_distinct_id | SE生成的设备ID |
_account_id | 开发者通过login接口传入的accountID |
_visitor_id | 开发者通过setVisitorID接口传入的visitorID |
_session_id | SE内部每次冷启动生成的sessionID |
_uuid | SE安装时产生的唯一UUID(仅Android平台支持获取) |
_imei | 设备IMEI(仅Android平台支持获取) |
_imei2 | 设备IMEI2(仅Android平台支持获取) |
_gaid | 设备gaid(仅Android平台支持获取) |
_oaid | 设备oaid(仅Android平台支持获取) |
_idfa | 设备idfa(仅iOS平台支持获取) |
_idfv | 设备idfv(仅iOS平台支持获取) |
_android_id | 设备AndroidId(仅Android平台支持获取) |
_ua | 设备的UA |
_language | 设备的系统设置的语言 |
_time_zone | 设备的时区 |
_manufacturer | 设备生成厂商 |
_platform | SDK平台,1:android,2:iOS |
_os_version | 设备系统版本 |
_screen_height | 屏幕高 |
_screen_width | 屏幕宽 |
_density | 屏幕密度(仅Android平台支持获取) |
_device_model | 设备型号 |
_device_type | 设备类型,1:Android_phone,2:Android_pad,3:iphone,4:ipad,0:其它 |
_app_version | 应用版本号 |
_app_version_code | 应用版本code |
_package_name | 应用包名 |
_app_name | 应用名称 |
_channel | 渠道名称,iOS默认为AppStore |
_lib | 固定字段:1代表Android,2代表iOS |
_lib_version | SDK版本号 |
热力引擎SDK支持开发者对启动、安装、退出三个预置事件设置自定义属性,通过这些自定义属性,开发者可以更方便的统计和分析数据。
方法示例
static void setPresetEvent(PresetEventType presetEventType, Map<String, dynamic> customProperties)
参数相关:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
presetEventType | 预置事件枚举,具体如下: AppInstall(安装事件) AppStart(启动事件) AppEnd(退出事件) All(安装、启动、退出事件) | PresetEventType | 是 |
properties | 预置事件自定义属性 | Map<String,dynamic> | 否 |
调用示例
Map<String, dynamic> customProperties = {};
customProperties['kind'] = 'setPresetEventProperties';
customProperties['name'] = "Jim";
SolarEngine.setPresetEventProperties(PresetEventType.All, customProperties);
// 调用 setPresetEvent API 后,SDK 产生的 _appInstall、_appStart 和 _appEnd 事件都会带上 properties 里的自定义属性。
注:
1.设置预置事件自定义属性的方法可以在热力引擎 SDK 初始化之前设置,这样设置的属性会适用于所有后续 SDK 产生的预置事件,如果在 SDK 初始化之后再设置,在此之前产生的预置事件会不包含这些设置的自定义属性。
2.预置事件设置的自定义属性不会被缓存,每次设置都会覆盖前一次的设置,多次设置同一个预置事件只有最后一次生效。
3.如果设置了 PresetEventType 的枚举为 PresetEventType.All,那么会覆盖通过PresetEventType.AppInstall、PresetEventType.AppStart、PresetEventType.AppEnd 这三种枚举设置的自定义属性,如果多次设置,只有最后一次生效。
4.给预置事件设置的自定义属性不支持开发者传入"_"下划线开头的 key 值,SDK 会默认丢弃该条属性。
1.在 SDK 初始化完成之后,就可以调用 track 来进行数据的上报。
2.SDK默认情况下设备3G/4G/5G/WiFi上报数据,2G不上报数据。通过设置enable2GReporting开关可以在2G时也上报数据。
3.事件需要满足缓存30条才会触发上报,并且发送间隔距离上次不超过30秒
4.以下情况能触发立即上报:
(1)App切换前后台,SDK内部产生_appStart、_appEnd事件,检查缓存事件并立即上报
(2)开发者调用SDK reportEventImmediately接口,检查缓存事件并立即上报
调用示例:
SolarEngine.reportEventImmediately();
上报的数据主要分为以下 4 类:
•预置事件:该类事件由 SDK 按规则自行触发上报,无需开发者调用。有确定的 _event_name ,如安装、启动、退出等事件。
•预定义事件:该类事件已经在系统中明确定义了事件意义,有确定的 _event_name 。需要在对应的事件发生时,由开发者触发上报,如变现广告展示、应用内付费等。
•自定义事件:即系统未明确定义意义的事件,开发者可按分析需要自行定义并埋点进行上报。
•时长事件:需要记录某个事件的持续时长,用来进行相关的分析。
注:所有事件上报时设置的自定义属性均不支持开发者传入"_"下划线开头的 key 值,SDK 会默认丢弃该条属性。
下面将对每种事件的上报规则进行一一说明。
每次安装后首次打开自动报送该事件。
安装事件的 _event_name 为 _appInstall
Android应用每次打开、或退出后台30s再进入前台时,自动报送该事件。
启动事件的 _event_name 为 _appStart
Android应用退出、或退到后台超过30s时,自动报送该事件。
退出事件的 _event_name 为 _appEnd
App内变现广告展示时,报送该事件,用于进行广告展示及变现收入分析。
使用ROI分析功能、自定义分析变现指标时,为必须报送事件。
广告展示事件的 _event_name 为 _appImp
方法示例
static void trackAppImpress(SEAppImpressionData appImpressionData)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appImpressionData | 承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppImpressionData 类的定义 | SEAppImpressionData | 是 |
SEAppImpressionData 类参数说明:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
adNetworkPlatform | 变现平台,前面为应传值,后面为平台名称 csj:穿山甲国内版 pangle:穿山甲国际版 tencent:腾讯优量汇 baidu:百度百青藤 kuaishou:快手 oppo:OPPO vivo:vivo mi:小米 huawei:华为 applovin:Applovin sigmob:Sigmob mintegral:Mintegral oneway:OneWay vungle:Vungle facebook:Facebook admob:AdMob unity:UnityAds is:IronSource adtiming:AdTiming klein:游可赢 fyber:Fyber chartboost:Chartboost adcolony:Adcolony | String | 是 |
adType | 展示广告的类型 1:激励视频 2:开屏 3:插屏 4:全屏视频 5:Banner 6:信息流 7:短视频信息流 8:大横幅 9:视频贴片 10:中等尺寸横幅 0:其它 | int | 是 |
adNetworkAppID | 变现平台的应用 ID | String | 否 |
adNetworkADID | 变现平台的变现广告位 ID | String | 是 |
mediationPlatform | 聚合平台标识,常见聚合平台枚举如下,若您使用的聚合平台不在如下枚举值,您可以自定义命名,并控制字符数在32位。没有聚合平台标识,请设置为 "custom"。 max ironsource admob hyperbid topon cas Tradplus Tobid | String | 是 |
ecpm | 广告ECPM(广告千次展现的变现收入,0或负值表示没传),单位:元 | double | 是 |
currencyType | 展示收益的货币种类,遵循《ISO 4217国际标准》如 CNY、USD | String | 是 |
isRenderSuccess | 广告是否渲染成功,具体枚举值如下: 例如:成功时,只需要传入 YES YES:成功 NO:失败 如果不需要统计该指标,请传 YES | bool | 是 |
customProperties | 自定义属性, json字符串 | Map<String, dynamic> | 否 |
调用示例
SEAppImpressionData appImpressionData =
SEAppImpressionData();
appImpressionData.adNetworkPlatform = "tencent";
appImpressionData.adType = 2;
appImpressionData.adNetworkAppID = "3SDFED";
appImpressionData.adNetworkADID = "22323";
appImpressionData.mediationPlatform = "toutiao";
appImpressionData.ecpm = 22.9;
appImpressionData.currencyType = "USD";
appImpressionData.isRenderSuccess = true;
appImpressionData.mediationPlatform = "custom";
Map<String, dynamic> customProperties = {};
customProperties['goods'] = 'shoes';
customProperties['goodsprice'] = 20;
customProperties['goodsaddress'] = "北京";
appImpressionData.customProperties = customProperties;
SolarEngine.trackAppImpress(appImpressionData);
// customProperties 为自定义属性,可以不设置
// 注:开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
App 内付费购买时,报送该事件,用于进行购买及内购收入分析。
该事件为用于付费预测模型训练的关键事件,使用系统提供的预测服务时,为必须报送事件。
应用内购买事件的 _event_name 为 _appPur。
方法示例
static void trackAppPurchase(SEAppPurchaseData appPurchase)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appPurchase | 承载应用内购买事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的SEAppPurchaseData 类的定义 | SEAppPurchaseData | 是 |
SEAppPurchaseData 类参数说明:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
orderId | 本次购买由系统生成的订单 ID | String | 否 |
payAmount | 本次购买支付的金额,单位:元 | double | 是 |
currencyType | 支付的货币类型,遵循《ISO 4217国际标准》,如 CNY、USD | String | 是 |
payType | 支付方式:如 alipay、weixin、applepay、paypal 等 | String | 否 |
productId | 购买商品的ID | String | 否 |
productName | 商品名称 | String | 否 |
productNum | 购买商品的数量 | Int | 否 |
payStatus | 1:成功 2:余额不足 3:取消支付 4:商品不足 5:支付超时 | int | 是 |
failReason | 支付失败的原因 | String | 否 |
customProperties | 自定义属性 | Map<String, dynamic> | 否 |
注:支付失败原因 fail_reason 参数仅在 paystatus 参数为 SEConstant_IAP_PayStatus_fail 支付失败时才会传入,其他状态传""即可。
调用示例
SEAppPurchaseData appPurchaseData = SEAppPurchaseData();
appPurchaseData.orderId = "1123";
appPurchaseData.payAmount = 90.99;
appPurchaseData.currencyType = "CN";
appPurchaseData.payType = "weixin";
appPurchaseData.productId = "232dddd";
appPurchaseData.productName = "皮肤";
appPurchaseData.productNum = 1;
appPurchaseData.payStatus = 1;
appPurchaseData.failReason = "支付失败";
Map<String, dynamic> customProperties = {};
customProperties['name'] = 'wyq';
customProperties['age'] = 10;
appPurchaseData.customProperties = customProperties;
SolarEngine.trackAppPurchase(appPurchaseData);
// customProperties 为自定义属性,可以不设置
// 注:开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
调用 trackAdClick 方法可以上报变现广告点击事件
方法示例
static void trackAdClick(SEAdClickData adClickData)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
adClickData | 承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAdClickData 类的定义 | SEAdClickData | 是 |
SEAdClickData 类参数说明:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
adPlatform | 变现平台,前面为应传值,后面为平台名称 csj:穿山甲国内版 pangle:穿山甲国际版 tencent:腾讯优量汇 baidu:百度百青藤 kuaishou:快手 oppo:OPPO vivo:vivo mi:小米 huawei:华为 applovin:Applovin sigmob:Sigmob mintegral:Mintegral oneway:OneWay vungle:Vungle facebook:Facebook admob:AdMob unity:UnityAds is:IronSource adtiming:AdTiming klein:游可赢 fyber:Fyber chartboost:Chartboost adcolony:Adcolony | String | 是 |
adType | 展示广告的类型 1:激励视频 2:开屏 3:插屏 4:全屏视频 5:Banner 6:信息流 7:短视频信息流 8:大横幅 9:视频贴片 0:其它 | int | 是 |
adNetworkADID | 变现平台的变现广告位 ID | String | 是 |
mediationPlatform | 聚合平台标识,常见聚合平台枚举如下,若您使用的聚合平台不在如下枚举值,您可以自定义命名,并控制字符数在32位。没有聚合平台标识,请设置为 "custom"。 max ironsource admob hyperbid topon cas Tradplus Tobid | String | 是 |
customProperties | 自定义属性说明见目录:4.自定义属性 | Map<String, dynamic> | 否 |
调用示例
SEAdClickData adClickData = SEAdClickData();
adClickData.adPlatform = "mtg";
adClickData.adType = 1;
adClickData.adNetworkADID = "11222ffff";
adClickData.mediationPlatform = "solar-engine";
Map<String, dynamic> customProperties = {};
customProperties['app'] = 'taobao';
customProperties['sex'] = "man";
adClickData.customProperties = customProperties;
SolarEngine.trackAdClick(adClickData);
// customProperties 为自定义属性,可以为空
// 注:开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
调用 trackRegister 方法可以上报注册事件
方法示例
static void trackAppRegister(SEAppRegisterData appRegisterData)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appRegisterData | 承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppRegisterData 类的定义 | SEAppRegisterData | 是 |
SEAppRegisterData 类参数介绍:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
regType | 注册类型如 "WeChat"、"QQ" 等自定义值 | String | 是,不超过 32 字符 |
status | 注册状态 如 "success" | String | 否 |
customProperties | 自定义属性 | Map<String, dynamic> | 否 |
调用示例
SEAppRegisterData appRegisterData = SEAppRegisterData();
appRegisterData.regType = "QQ";
appRegisterData.status = "success";
Map<String, dynamic> customProperties = {};
customProperties['type'] = 'wifi';
customProperties['like'] = "foods";
customProperties['re'] = "QQ";
appRegisterData.customProperties = customProperties;
SolarEngine.trackAppRegister(appRegisterData);
// customProperties 为自定义属性,可以不设置
// 注:开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
调用 trackLogin 方法可以上报登录事件
方法示例
static void trackAppLogin(SEAppLoginData appLoginData)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appLoginData | 承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppLoginData 类的定义 | SEAppLoginData | 是 |
SEAppLoginData 类参数介绍:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
loginType | 登录类型如 "WeChat"、"QQ" 等自定义值 | String | 是,不超过 32 字符 |
status | 登录状态 如 "success" | String | 否 |
customProperties | 自定义属性 | Map<String, dynamic> | 否 |
调用示例
SEAppLoginData appLoginData = SEAppLoginData();
appLoginData.loginType = "weixin";
appLoginData.status = "failed";
Map<String, dynamic> customProperties = {};
customProperties['type'] = 'wifi';
customProperties['like'] = "foods";
customProperties['re'] = "QQ";
appLoginData.customProperties = customProperties;
SolarEngine.trackAppLogin(appLoginData);
// customProperties 为自定义属性,可以不设置
// 注:开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
调用 trackOrder 方法可以上报订单事件
方法示例
static void trackAppOrder(SEAppOrderData appOrderData)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
appOrderData | 承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppOrderData 类的定义 | SEAppOrderData | 是 |
SEAppOrderData 类参数介绍:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
orderId | 订单 ID | String | 否,不超过 128 字符 |
payAmount | 订单金额,单位:元 | double | 是 |
currencyType | 展示货币类型,遵循《ISO 4217国际标准》,如 CNY、USD | String | 是 |
payType | 支付方式:如 alipay、weixin、applepay、paypal 等 | String | 否,不超过 32 字符 |
status | 订单状态 | String | 是 |
customProperties | 自定义属性说明见目录:4.自定义属性 | Map<String, dynamic> | 否 |
调用示例
SEAppOrderData appOrderData = SEAppOrderData();
appOrderData.orderId = "111222333";
appOrderData.payAmount = 20.33;
appOrderData.currencyType = "USD";
appOrderData.payType = "weixin";
appOrderData.status = "failed";
Map<String, dynamic> customProperties = {};
customProperties['app'] = 'taobao';
customProperties['sex'] = "man";
appOrderData.customProperties = customProperties;
SolarEngine.trackAppOrder(appOrderData);
/ customProperties 为自定义属性,可以不设置
// 注:开发者传入属性 key 不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃
增加归因安装事件,支持统计归因数据,满足客户使用三方归因或者自归因之后的结果数据回传到自定义分析,上报时机支持开发者自定义触发
自归因事件的 `_event_name` 为 _appAttr
方法示例
static void trackAppAttr(SEAppAttrData trackAppAttr)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
trackAppAttr | 承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppAttrData 类的定义 | SEAppAttrData | 是 |
SEAppAttrData 类参数介绍:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
adNetwork | 投放广告的渠道 ID,需要与发行平台匹配 | String | 是 |
subChannel | 投放广告的子渠道 | String | 否 |
adAccountId | 投放广告的投放账号 ID | String | 否 |
adAccountName | 投放广告的投放账号名称 | String | 否 |
adCampaignId | 投放广告的广告计划 ID | String | 否 |
adCampaignName | 投放广告的广告计划名称 | String | 否 |
adOfferId | 投放广告的广告单元 ID | String | 否 |
adOfferName | 投放广告的广告单元名称 | String | 否 |
adCreativeId | 投放广告的广告创意 ID | String | 否 |
adCreativeName | 投放广告的广告创意名称 | String | 否 |
attributionPlatform | 监测平台 | String | 是 |
customProperties | 开发者传入的自定义属性 | Map<String, dynamic> | 否 |
调用示例
SEAppAttrData appAttrData = SEAppAttrData();
appAttrData.adNetwork = "ks";
appAttrData.subChannel = "bytedance";
appAttrData.adAccountId = "2222ddd";
appAttrData.adAccountName = "mtg";
appAttrData.adCampaignId = "12323";
appAttrData.adCampaignName = "animal";
appAttrData.adOfferId = "100oo";
appAttrData.adOfferName = "wanmeishijie";
appAttrData.adCreativeId = "dkdkd11";
appAttrData.adCreativeName = "dog";
appAttrData.attributionPlatform = "tencent";
Map<String, dynamic> customProperties = {};
customProperties['channel'] = 'xiaomi';
customProperties['date'] = "10.20";
appAttrData.customProperties = customProperties;
SolarEngine.trackAppAttr(appAttrData);
除了以上已经列出的有明确定义的事件外,开发者可以根据自己的分析需求,进行自定义事件的上报自定义事件,即事件的 _event_name 由开发者自定义。
事件名称要求:
•String 类型
•只能以字母开头,不能以下划线开头,其余字符可包含数字、小写字母和下划线 "_"
•长度最大为 40 个字符
•对字母大小写敏感
调用 trackCustom 方法可以上报开发者自定义的自定义事件。
方法示例
static void trackCustomEvent(SECustomEventData customEventData)
customEventData对象参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
customEventName | 自定义事件名称 | string | 是 |
customProperties | 自定义事件属性 | Map<String, dynamic> | 是 |
调用示例
SECustomEventData customEventData = SECustomEventData();
customEventData.customEventName = "OpenAPP";
Map<String, dynamic> customProperties = {};
customProperties['time'] = '2020-10-10';
customProperties['data'] = "hello word!";
customEventData.customProperties = customProperties;
SolarEngine.trackCustomEvent(customEventData);
事件的属性是一个 Dictionary 对象,其中每个元素代表一个属性。
•String 类型
•只能以字母开头,不能以下划线开头,其余字符可包含数字、小写字母和下划线"_"
•长度最大为 40 个字符
•对字母大小写敏感
•支持基本数据类型 string、int、long、float、double、boolean 等以及 date 类型与数组
•对于数组的元素,只支持字符串类型
•对于其他类型都将强制转为字符串存储
一个自定义属性的存储数据类型,会以第一次上报数据的格式自动由系统进行识别,一旦确定无法修改。相同产品的属性类型在第一次上报时进行确定。后续不同SDK、不同事件上报的同名属性只有类型与第一次一致才会入库。
数据类型 | 说明 | 示例 |
数值型-number | 数据范围是 -9E15 至 9E15 | 不带引号的数值,如:1234,12.34 |
字符型-string | 上限2KB | "dashen","北京"带引号的数值也会被识别为字符 |
时间型-date | "yyyy-MM-dd HH:mm:ss.SSS"或"yyyy-MM-dd HH:mm:ss",如需表示日期,可使用"yyyy-MM-dd 00:00:00" | "2021-03-01 12:34:56","2021-03-01 12:34:56.789""2021-03-01 00:00:00" |
布尔型-boolean | true 或 false | true,false带引号的 true 或 false 会被识别为字符 |
列表型-array | 列表中的元素都会转变为字符串类型 | ["a","1","true"] |
注:属性的存储数据类型,决定了在分析模型中可以选择的分析逻辑,比如数值型可以进行最大值、最小值、求和等计算,布尔型可以进行为真数、为假数的计算,所以报送数据的格式,需要考虑分析场景和业务需求,制定完整的埋点方案,并按埋点方案进行格式确定。
在5.3自定义事件基础上新增一个自定义事件支持开发者传SDK预置属性
方法示例
static void trackCustomEventWithPreEventData(SECustomEventData customEventData,SEPreEventData preEventData)
customEventData对象参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
customEventName | 自定义事件名称 | string | 是 |
customProperties | 自定义事件属性 | Map<String, dynamic> | 是 |
preEventData对象参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
preProperties | 自定义事件属性 | Map<String, dynamic> | 是 |
preProperties预置属性目前支持的预置属性有:_currency_type、_pay_amount,如传其它预置属性直接丢弃。
调用示例
SECustomEventData customEventData = SECustomEventData();
customEventData.customEventName = "order";
Map<String, dynamic> customProperties = {};
customProperties['time'] = '2024-04-02';
customProperties['order'] = "1234567";
customEventData.customProperties = customProperties;
SEPreEventData sePreEventData = SEPreEventData();
Map<String, dynamic> preProperties = {};
preProperties['_currency_type'] = 'USD';
preProperties['_pay_amount'] = 10;
sePreEventData.preProperties = preProperties;
SolarEngine.trackCustomEventWithPreEventData(customEventData,sePreEventData);
创建时长事件
调用 eventStart 来开始计时,配置要计时的事件名称以及计时事件要上报的属性。
当该事件上传时,会自动在事件属性中加入 _duration 这一属性来表示事件的持续时长,单位为毫秒。
同一事件名只能有一个在计时的事件,多次设置同一事件名时,以最后一次设置为准。
方法示例
static void eventStart(String eventName)
timerEventData对象参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
eventName | 自定义时长事件名称 | string | 是 |
调用示例
SolarEngine.eventStart("test");
上报时长事件
调用 eventFinish 方法可以上报开发者自定义的时长事件
方法示例
static void eventFinish(String eventName,Map<String, dynamic> customProperties)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
eventName | 自定义时长事件名称 | string | 是 |
customProperties | 时长事件自定义属性 | Map<String, dynamic> | 否 |
调用示例
Map<String, dynamic> customProperties = {};
customProperties['kind'] = 'timer';
customProperties['send'] = "ture";
SolarEngine.eventFinish("test",customProperties);
注:在上报预置事件 _appEnd 时,会默认上报由上一次 _appStart 开始计时的时长,即退出事件的时长无需配置开始计时,会默认赋值。
首次事件是指针对某些维度(设备 ID或其他维度的 ID)只记录一次的事件,例如记录某个账号的注册事件,可以使用首次事件来记录,服务端会按照 setCheckId() 设置的 ID 去重,同一 ID 只会记录第一次上报的事件。
预置事件(_appInstall、_appStart、_appEnd)不支持设置为首次事件。
方法示例
static void trackFirstEvent(SEBaseEventData baseEventData)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
baseEventData | 首次事件类 | SEBaseEventData | 是 |
baseEventData参数使用时需要传SEBaseEventData的子类实例,具体说明如下:
首次事件 | 参数类型 | 说明 |
---|---|---|
自定义首次事件 | SECustomEventData | 自定义事件首次事件model类,具体使用方式参考下方示例 |
变现广告展示首次事件 | SEAppImpressionData | 变现广告展示事件首次事件model类,具体使用方式参考下方示例 |
变现广告点击首次事件 | SEAdClickData | 变现广告点击事件首次事件model类,具体使用方式参考下方示例 |
应用内购买首次事件 | SEAppPurchaseData | 应用内购买事件首次事件model类,具体使用方式参考下方示例 |
自归因安装首次事件 | SEAppAttrData | 自归因事件首次事件model类,具体使用方式参考下方示例 |
订单事件首次事件 | SEAppOrderData | 订单事件首次事件model类,具体使用方式参考下方示例 |
注册事件首次事件 | SEAppRegisterData | 注册事件首次事件model类,具体使用方式参考下方示例 |
登录事件首次事件 | SEAppLoginData | 登录事件首次事件model类,具体使用方式参考下方示例 |
调用示例
自定义首次事件调用示例
SECustomEventData 类参数说明:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
firstCheckId | 首次事件校验id | string | 是(如果未传checkId,则为普通事件) |
customEventName | 自定义事件名称 | string | 是 |
preProperties | 自定义事件预置属性,目前只支持 _pay_amount与_currency_type,其他字段会被SDK舍弃 | Map | 否 |
customProperties | 自定义事件属性 | Map | 否 |
SECustomEventData customEventData = SECustomEventData();
customEventData.customEventName = "OpenAPP"; // 必传字段
Map<String, dynamic> customProperties = {};
customProperties['time'] = '2020-10-10';
customProperties['data'] = "hello word!";
Map<String, dynamic> preProperties = {};
preProperties['_currency_type'] = 'USD';
preProperties['_pay_amount'] = 10;
customEventData.firstCheckId = "checkId"; // 必传字段
customEventData.customProperties = customProperties;
customEventData.preProperties = preProperties;
SolarEngine.trackFirstEvent(customEventData);
应用内购买首次事件调用示例
SEAppPurchaseData 类参数说明见: 5.2.2、应用内购买事件
SEAppPurchaseData appPurchaseData = SEAppPurchaseData();
appPurchaseData.currencyType = "CN";
appPurchaseData.failReason = "支付失败";
appPurchaseData.orderId = "1123";
appPurchaseData.payAmount = 90.99;
appPurchaseData.payStatus = 1;
appPurchaseData.payType = "weixin";
appPurchaseData.productId = "232dddd";
appPurchaseData.productName = "皮肤";
appPurchaseData.productNum = 1;
Map<String, dynamic> customProperties = {};
customProperties['name'] = 'wyq';
customProperties['age'] = 10;
customProperties['like'] = "啤酒";
appPurchaseData.customProperties = customProperties;
SolarEngine.trackAppPurchase(appPurchaseData);
appPurchaseData.firstCheckId = "checkId"; // 必传字段
SolarEngine.trackFirstEvent(appPurchaseData);
变现广告展示首次事件调用示例
SEAppImpressionData类参数说明见:5.2.1、变现广告展示事件,firstCheckId为必传字段
变现广告点击首次事件调用示例
SEAdClickData类参数说明见:5.2.3、上报变现广告点击事件,firstCheckId为必传字段
自归因安装首次事件调用示例
SEAppAttrData类参数说明见:5.2.7、上报自归因事件,firstCheckId为必传字段
订单事件首次事件调用示例
SEAppOrderData类参数说明见:5.2.6、上报订单事件,firstCheckId为必传字段
注册事件首次事件调用示例
SEAppRegisterData类参数说明见:5.2.4、上报注册事件,firstCheckId为必传字段
登录事件首次事件调用示例
SEAppLoginData 类参数说明见:5.2.5、上报登录事件,firstCheckId为必传字段
在热力引擎中,专门提供了针对用户属性设置数据的上报方法,针对用户的属性添加或变更,您可以通过该方法进行上报。
建议您将与用户相关的不变的、或变化频率比较低、或保存价值比较高的属性,比如年龄、创建角色时间、等级、所在地、首次付费时间、总付费金额等属性设置为用户属性,其它变化频率比较高的属性通过事件进行上报和记录。
用户属性设置分为以下几种方式:userUpdate、userInit、userAdd、userUnset、userAppend、userDelete,由开发者调用,对用户属性进行设置。
注:
1.用户属性格式要求与事件属性保持一致。
2.所有用户属性设置事件上报时设置的自定义属性均不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃。
如果您要上传一批用户属性,其中已经存在的用户属性不去更新属性值、不存在的属性进行创建并保存属性值,则可以调用 userInit 来进行设置。
方法示例
static void userInit(Map<String, dynamic> properties)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
properties | 开发者自定义用户属性 | Map<String, dynamic> | 是 |
调用示例
Map<String, dynamic> properties = {};
properties['kind'] = 'timer';
properties['send'] = "ture";
SolarEngine.userInit(properties);
对于一般的用户属性,您可以调用 userUpdate 来进行设置,使用该接口上传的属性将会覆盖原有的属性值,如果之前不存在该用户属性,则会新建该用户属性,类型与传入属性的类型一致。
方法示例
static void userUpdate(Map<String, dynamic> properties)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
properties | 开发者自定义用户属性 | Map<String, dynamic> | 是 |
调用示例
Map<String, dynamic> properties = {};
properties['kind'] = 'timer1111';
properties['send'] = "false";
properties['count'] = 1;
SolarEngine.userUpdate(properties);
当您要上传数值型的属性时,您可以调用 userAdd 来对该属性进行累加操作,如果该属性还未被设置,则会赋值 0 后再进行计算,可传入负值,等同于相减操作。
方法示例
static void userAdd(Map<String, dynamic> properties)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
properties | 开发者自定义用户属性 | Map<String, dynamic> | 是 |
调用示例
Map<String, dynamic> properties = {};
properties['count'] = 2;
SolarEngine.userAdd(properties);
注:本方法只对 value 值为数值类型的 key 值进行 add 累加操作
当您要清空用户的用户属性值时,您可以调用 userUnset 来对指定属性(字符串数组)进行清空操作,如果该属性还未在集群中被创建,则 不会 创建该属性。
方法示例
static void userUnset(List<String> keys)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
keys | 需要清空的用户属性 key 值 string 数组 | string[] | 是 |
调用示例
SolarEngine.userUnset(["kind"]);
您可以调用 userAppend 对 JSONArray 类型的用户属性进行追加操作,如果该属性不存在,则会新建该属性。
方法示例
static void userAppend(Map<String, dynamic> properties)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
properties | 开发者自定义用户属性 | Map<String, dynamic> | 是 |
调用示例
Map<String, dynamic> properties = {};
properties['kind3'] = 'timer3';
SolarEngine.userAppend(properties);
如果您要删除某个用户,可以调用 userDelete 将这名用户删除。用户删除后,您将无法再查询该名用户的用户属性,但该用户产生的事件仍然可以被查询到。
方法示例
static void userDelete(SEUserDeleteType deleteType)
调用示例
SolarEngine.userDelete(SEUserDeleteType.DELETE_BY_ACCOUNTID);
此接口适用于iOS用了归因服务的应用
SolarEngine SDK封装了系统的requestTrackingAuthorizationWithCompletionHandler,使用SDK封装的ATT授权接口SDK能第一时间知道用户的授权状态,能优先上报带有IDFA的Install事件,能优化归因效率。
回调值 status对应iOS系统的ATTrackingManagerAuthorizationStatus
0: Not Determined;1: Restricted;2: Denied;3: Authorized ;999: system error
代码示例
SolarEngine.requestTrackingAuthorizationWithCompletionHandler((code) {
if (code == 0) {
print('att-Not Determined');
} else if (code == 1) {
print('att-Restricted');
} else if (code == 2) {
print('att-Denied');
} else if (code == 3) {
print('att-Authorized');
} else if (code == 999) {
print('att-systom error');
}
});
注:
1、此功能只可用于iOS 14 及更高版本设备。
2、此功能需要添加StoreKit.framework到您的项目中
更新转化值
转化值是用来在 SKAdNetwork 中跟踪用户行为的机制。您可以将 64 个条件映射至 0-63 的转化值,并在用户安装时将此整数值发送至 SKAdNetwork。该信息可帮助您进一步了解用户在安装后的最初几日内是如何与应用交互的。
您可以通过updateConversionValue方法更新转化值。该方法会包装 Apple 的 updateConversionValue方法,接受代表更新后的转化值的整数参数。
方法示例1
static Future<String?> updateConversionValueWithErrorCallback(int conversionValue)
参数相关:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
conversionValue | 转化值,必须在 0 - 63 之间的数值。 你可以将其分配给某个具体的安装。 在不识别出这个具体用户的前提下,Conversion value 依旧可以帮助你了解该具体用户价值的“信号”。 | int | 是 |
调用示例:
var error = await SolarEngine.updateConversionValueWithErrorCallback(0);
print("sss-updateConversionValueWithErrorCallback =${error}");
方法示例2
static Future<String?> updateConversionValueWithErrorCallbackSkad4( int conversionValue, String coarseValue, bool lockWindow)
参数相关:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
fineValue | 转化值,必须在 0 - 63 之间的数值。 你可以将其分配给某个具体的安装。 在不识别出这个具体用户的前提下,Conversion value 依旧可以帮助你了解该具体用户价值的“信号”。 | int | 是 |
coarseValue | SKAdNetworkCoarseConversionValue 值,粗粒度转化值。 如果应用安装量不足,未能达到隐私阈值,就会启用粗粒度转化值,支持以下选择: SKAdNetworkCoarseConversionValueHigh SKAdNetworkCoarseConversionValueLow SKAdNetworkCoarseConversionValueMedium | String | 是 |
lockWindow | 是否在转换窗口结束之前发送回调。YES告诉系统发送回调,而不必等待转换窗口结束。默认值为NO。 | bool | 是 |
设置安装回调
需要将 SolarEngineSDK 指定为 SKAdNetwork 回调接收方,请进行以下操作:
1.在 Xcode 的项目导航器中选择 Info.plist
2.单击"属性/Property"列表编辑器中某个键旁边的添加按钮 (+),然后按回车键
3.输入名称 NSAdvertisingAttributionReportEndpoint
4.从"类型/Type"列的弹出菜单中选择"String"
5.输入 https://detailroi.com
开发者可以通过创建深度链接来将用户转到应用中的特定页面。如果用户已在设备上安装您的应用,SE SDK 会转向链接中指定的页面。用户通过链接打开应用后,SDK 就可以读取深度链接数据了,具体步骤如下:查看 SolarEngine 后台配置
URL Scheme 示例为:test1://
配置Scheme
开发者可以在打开的Android原生项目中配置AndroidManifest.xml文件(将 Scheme 替换为上步通过SolarEngine后台获取的值):
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="your scheme" />
</intent-filter>
</activity>
设置Deeplink回调
方法示例
static void onDeepLinkCallback(OnDeeplinkCallback callback);
参数说明:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
callback | deeplink回调 | OnDeeplinkCallback | 是 |
调用代码如下:
SolarEngine.onDeepLinkCallback((code, data) {
if (code == 0) {
print("deeplink回调成功----");
print(data);
} else {
print("deeplink回调失败----$code");
}
});
传递URL给SESDK
url获取方式可参考:设置深度链接
方法示例
static void handleDeepLinkUrl(String url);
参数说明:
参数名称 | 参数含义 | 参数类型 | 是否必传 |
url | usrScheme | String | 是 |
调用代码如下:
SolarEngine.initializeWithCallbacK(appkey, config, (code) {
// 初始化成功
if(code == 0){
print("初始化成功-----");
print(code);
//注意handleDeepLinkUrl方法必须在初始化成功之后且在设置Deeplink回调之后调用,否则不生效
SolarEngine.handleDeepLinkUrl("your url");
}
});
开启了延迟deeplink后sdk初始化时回去请求延迟deeplink相关参数
回调成功, data字段 属性说明:
回调失败,errorCode
示例代码
// 设置延迟深度链接回调
SolarEngine.onDelayDeepLinkCallback((code, data) {
print("onDelayDeepLinkCallback----");
if (code == 0) {
print("延迟deeplink解析成功----");
print(data);
} else {
print("延迟deeplink失败----$code");
}
});
// 开启延迟深度链接
SolarEngineConfig config = SolarEngineConfig();
config.enableDelayDeeplink = true;
SolarEngine.initializeWithCallbacK(appkey, config, (code) {
print("initializeWithCallbacK----");
print(code);
})
iOS 配置 URL Scheme
iOS 工程选择 TARGETS > Info > URL Types,点击加号 (+),设置唤起 App 的 URL Schemes。内容为 SolarEngine 后台配置的 URL Scheme 信息
iOS 代码支持 URL Scheme 解析
在 SDK 中配置 Scheme后,就可以通过URL Scheme 唤起 App,
Flutter项目导出iOS工程后找到在 AppDelegate.m文件, 实现下列方法。
代码示例
#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
#import <SolarEngineSDK/SolarEngineSDK.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
NSString *urlString = url.absoluteString;
[[SolarEngineSDK sharedInstance] track:@"url_scheme_openURL" withProperties:@{@"url":urlString}];
[[SolarEngineSDK sharedInstance] appDeeplinkOpenURL:url];
return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
[[SolarEngineSDK sharedInstance] track:@"univisal_link_openURL" withProperties:@{@"url":userActivity.webpageURL.absoluteString}];
[[SolarEngineSDK sharedInstance] appDeeplinkOpenURL:userActivity.webpageURL];
return YES;
}
@end
Flutter 中监听Deeplink回调参数
方法示例
static void onDeepLinkCallback(OnDeeplinkCallback callback)
调用示例
// 此方法需要在初始化之前调用,否则接受不到回调
SolarEngine.onDeepLinkCallback((code, data) {
if (code == 0) {
print("onDeepLinkCallback 成功");
String sedpLink = data?['sedpLink'];
String turlId = data?['turlId'];
String from = data?['from'];
Map customParams = data?['customParams'];
} else {
print("onDeepLinkCallback 失败:$code");
}
});
————————————
2025-8-07 1.5.3
基于Android 1.3.0.6 iOS 1.3.0.3
•Android:性能优化
2025-7-04 1.5.2
基于Android 1.3.0.3 iOS 1.3.0.3
•iOS&Android:优化获取归因结果
•iOS&Android:性能优化
2025-1-17 1.5.1
基于Android 1.2.9.3 iOS 1.2.9.4
•iOS: 优化预置事件
2024-12-31 1.5.0
基于Android 1.2.9.3 iOS 1.2.9.3
•iOS&Android:优化获取归因结果
2024-11-21 1.4.2
基于Android 1.2.9.1 iOS 1.2.9.2
•iOS: 优化网络请求
2024-11-07 1.4.1
中国大陆版:基于Android 1.2.9.1 iOS 1.2.9.1
•iOS&Android:debug模式优化
•iOS: 埋点优化
2024-10-24 1.4.0
中国大陆版:基于Android 1.2.9.0 iOS 1.2.9.0
•iOS&Android:国内版优化网络请求
2024-9-20 1.3.3
中国大陆版:基于Android 1.2.8.3 iOS 1.2.8.2
非中国大陆版:基于Android 1.2.8.3 iOS 1.2.8.2
•iOS&Android:优化网络请求
•Android:优化在线参数逻辑
2024-9-11 1.3.2
中国大陆版:基于Android 1.2.8.2 iOS 1.2.8.1
非中国大陆版:基于Android 1.2.8.2 iOS 1.2.8.1
•iOS:优化埋点上报
•iOS&Android:支持延迟deeplink
2024-8-23 1.3.1
中国大陆版:基于Android 1.2.8.1 iOS 1.2.8.0
非中国大陆版:基于Android 1.2.8.0 iOS 1.2.8.0
•Android:优化埋点上报
•Android:在线参数初始化逻辑调整
2024-8-16 1.3.1
中国大陆版:基于Android 1.2.8.0 iOS 1.2.8.0
非中国大陆版:基于Android 1.2.8.0 iOS 1.2.8.0
•iOS&Android:预定义事件上报优化
•iOS&Android:事件上报策略优化
•iOS:自定义属性上报优化
•Android:优化埋点逻辑
2024-8-1 1.3.0
中国大陆版:基于Android 1.2.7.9 iOS 1.2.7.9
非中国大陆版:基于Android 1.2.7.9 iOS 1.2.7.9
•iOS&Android:时长事件逻辑优化
•Android:SDK支持meta归因
•Android:优化SDK埋点逻辑
2024-7-11 1.2.9
中国大陆版:基于Android 1.2.7.8 iOS 1.2.7.8
非中国大陆版:基于Android 1.2.7.8 iOS 1.2.7.8
•iOS&Android:支持deeplink归因
•iOS&Android:归因逻辑优化
•Android:修复disctinctId某些情况下为null的情况
2024-6-6 1.2.8
国内版:基于Android 1.2.7.6 iOS 1.2.7.6
国际版:基于Android 1.2.7.6 iOS 1.2.7.6
•Android:优化启动事件上报逻辑
2024-5-13 1.2.8
国内版:基于Android 1.2.7.5 iOS 1.2.7.6
国际版:基于Android 1.2.7.5 iOS 1.2.7.6
•Android:预定义、自定义事件方法优化
•iOS: SDK支持设置ATT授权等待
2024-4-23 1.2.7
国内版:基于Android 1.2.7.4 iOS 1.2.7.5
国际版:基于Android 1.2.7.4 iOS 1.2.7.5
•iOS&Android:SDK支持coppa与Kids App合规
2024-4-18 1.2.6
国内版:基于Android 1.2.7.3 iOS 1.2.7.4
国际版:基于Android 1.2.7.3 iOS 1.2.7.4
•Android:优化_appStart与_appEnd事件逻辑
2024-4-15 1.2.6
国内版:基于Android 1.2.7.2 iOS 1.2.7.4
国际版:基于Android 1.2.7.2 iOS 1.2.7.4
•iOS:网络优化
2024-4-9 1.2.5
国内版:基于Android 1.2.7.2 iOS 1.2.7.3
国际版:基于Android 1.2.7.2 iOS 1.2.7.3
•iOS:性能优化
2024-4-2 1.2.3
国内版:基于Android 1.2.7.2 iOS 1.2.7.2
国际版:基于Android 1.2.7.2 iOS 1.2.7.2
•iOS&Android:增加初始化成功回调
•iOS&Android:国内包取消GDPR
•iOS&Android:自定义事件支持设置币种和金额
•Android:oaid获取插件方案优化
2024-3-6 1.2.2
国内版:基于Android 1.2.7.1 iOS 1.2.7.1
国际版:基于Android 1.2.7.1 iOS 1.2.7.1
•iOS:支持Apple隐私清单
2024-2-29 1.2.1
国内版:基于Android 1.2.7.1 iOS 1.2.7.0
国际版:基于Android 1.2.7.1 iOS 1.2.7.0
•Android:SDK海外版本新增oaid插件
•Android:SDK支持Google的欧盟意见征求新政
•Android:SDK逻辑优化
2024-02-05 1.2.0
国内版:基于Android 1.2.7.0 iOS 1.2.7.0
国际版:基于Android 1.2.7.0 iOS 1.2.7.0
•iOS&Android:优化初始化接口
•iOS&Android:优化事件发送策略
•iOS&Android:优化内部字段
•iOS:SDK 优化预定义事件
•Android:支持获取亚马逊id
2023-12-28 1.1.3
国内版:基于Android 1.2.6.1 iOS 1.2.6.1
国际版:基于Android 1.2.6.1 iOS 1.2.6.1
•iOS&Android:优化内部字段
•iOS:封装SKAN updatePostbackConversionValue
•Android:国内版OAID获取方式优化
•Android:优化debug模型下gaid获取机制
2023-12-14 1.1.2
国内版:基于Android 1.2.6.0 iOS 1.2.6.0
国际版:基于Android 1.2.6.0 iOS 1.2.6.0
•iOS&Android:SDK支持获取预置属性信息
•iOS&Android:SDK支持通过setting关闭事件上报
•iOS&Android:SDK支持初始化前设置_account_id、_visitor_id、_channel
•Android:SDK升级AES加密依赖
2023-12-01 1.1.1
国内版:基于Android 1.2.5.3 iOS 1.2.5.3
国际版:基于Android 1.2.5.3 iOS 1.2.5.3
•Android:_appEnd事件功能优化
2023-11-22 1.1.1
国内版:基于Android 1.2.5.2 iOS 1.2.5.3
国际版:基于Android 1.2.5.2 iOS 1.2.5.3
•iOS&Android:SDK支持首次事件
•iOS优化_appEnd事件
•Android:_appCrash事件上报堆栈信息优化
2023-11-10 1.1.0
国内版:基于Android 1.2.5.0 iOS 1.2.5.1
国际版:基于Android 1.2.5.0 iOS 1.2.5.1
•Android:增加预初始化功能
•Android:优化海外版本gaid获取方式
•Android:增加混淆配置
•Android:事件上报逻辑优化
2023-10-30 1.1.0
国内版:基于Android 1.2.4.3 iOS 1.2.5.1
国际版:基于Android 1.2.4.3 iOS 1.2.5.1
•iOS&Anroid:获取归因结果优化
•iOS:增加预初始化接口
2023-10-16 1.0.4
iOS 兼容静态库
2023-09-25 1.0.2
兼容2.19.6版本sdk
2023-09-25 1.0.1
iOS 路径配置报错修复
2023-09-23 1.0.0
基于Android 1.2.4.1 iOS 1.2.3.1
•SE Flutter SDK初版