菜单

Flutter SDK

1、简介

热力引擎 ( SolarEngine ) 是面向移动开发者提供的帮助产品持续增长的一站式智能营销服务平台,在报表方面提供固定分析报表服务和高度自定义的数据分析服务,系统在数据埋点、属性设置、报表创建、看板配置等多方面都支持开发者按需求进行个性化配置。

本文档将针对 Android SDK 端的数据上报进行说明,帮助您进行数据接入。

本文档适用于 Android 5.0 (API Level21) 及以上的操作系统。

隐私权政策:https://www.solar-engine.com/privacyPolicy.html

2、集成前的准备工作

在正式开始数据接入之前,需要提前准备一些接入过程中需要的参数、准备 SDK 包,下面说明如何获取这些信息。

2.1、获取 Appkey

Appkey 查询路径:资产管理-应用管理-16位 Appkey(即应用 ID)。


2.2、获取 SDK

如果要在您的 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

SDK Demo下载地址

3、SDK 集成

3.1、Android 依赖

通过步骤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.**{*;}

3.2、iOS 依赖

iOS使用pod集成不需要手动设置依赖

3.3、初始化SDK

SolarEngine 初始化启动方法

3.3.1、初始化

热力引擎SDK提供了两种初始化方法,开发者可以通过不同的初始化方法来选择自己项目中是否接入在线参数SDK,其中SEConfig代表了热力引擎SDK的配置参数,RCConfig代表了在线参数SDK的配置参数

预初始化

在应用安装后首次冷启动时,需要先预初始化 SDK,预初始化时 SDK 不采集任何个人信息也不会向热力引擎上报数据

方法示例

static void preInitialize(String appkey)

调用示例

String appkey = ""; 
SolarEngine.preInitialize(appkey);

3.3.1.1、初始化(不接入在线参数SDK)

方法示例

static void initializeWithAppkey(String appkey, SolarEngineConfig config)

参数说明

参数名称参数含义参数类型是否必传
appKey应用的appKey,需要联系商务人员从热力引擎后台获取String
config热力引擎SDK配置项SolarEngineConfig

SolarEngineConfig参数说明

参数名称参数含义参数类型是否必传
logEnabled是否开启日志打印,默认为关闭状态bool
isGDPRArea是否为GDPR区域,默认为falsebool
adPersonalizationEnabled用户是否允许Google将其数据用于个性化广告,不设置则不上报该字段,可选字段,只有Android调用有效,iOS没有此字段,无需设置此字段bool
adUserDataEnabled用户是否同意将其数据发送到Google。不设置则不上报该字段,可选字段,只有Android调用有效,iOS没有此字段,无需设置此字段bool
isDebugModel是否开启Debug调试模式,默认为关闭状态bool
remoteConfigData在线参数配置SERemoteConfigData
OnAttributionSuccess归因成功回调Callback
OnAttributionFail归因失败回调Callback
isCoppaEnabled是否支持coppa合规。默认为falsebool
isKidsAppEnabled是否支持Kids App。默认为falsebool
attAuthorizationWaitingIntervaliOS首次上报事件支持设置ATT授权等待,最多支持等待120秒. 设置等待后SDK会等用户ATT授权或等待超时才上报Install等事件。
单位:秒
int
fbAppID如果海外开发者需要用到meta归因,此处设置meta appidString
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);

3.3.1.2、初始化(接入在线参数SDK)


RCConfig参数说明

参数名称参数含义参数类型是否必传
enable是否启用在线参数SDK,默认为关闭状态,必传字段bool
mergeTypeSDK配置合并策略,默认情况下服务端配置跟本地缓存配置合并,具体释义参考下方参数解释,可选字段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_USERapp首次启动或版本更新时, 使用服务端配置跟用户默认配置合并,此方法可以清除本地缓存配置
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);

3.3.1.3、初始化(监听初始化回调)


参数说明:

appkey: 参考上面描述

config: 参考上面描述

callback: 初始化回调,回调参数code:

  • 0: 初始化成功
  • 101: 初始化失败,没调用预初始化
  • 102: 初始化失败,appkey不符合规范
  • 103:初始化失败,context为null(仅Android返回)
  • 104:初始化失败,distinct_id生成失败(仅Android返回)
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);    
        }  
    }
);

3.3.1.4、支持ODMInfo归因

非中国大陆 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


3.3.2、关于GDPR

在涉及欧盟地区用户的隐私信息处理时,我们的SDK默认会采集一些与用户隐私相关的字段,例如 gaid、IMEI、IMEI2、AndroidId 等。然而,根据欧盟地区的隐私保护法规,如果用户不同意数据采集,开发者需要进行相应的配置来关闭SDK对隐私字段的采集。

以下是集成SDK时的步骤:

1.在SDK初始化的代码中,默认情况下无需特殊设置。

2.当用户拒绝敏感数据采集时,请在SDK初始化中加入 isGDPRArea(true) 关闭敏感数据采集。

3.请确保在用户同意之前不要触发任何与隐私相关的事件。

4.在您的隐私政策中明确说明您在欧盟地区用户的隐私数据处理政策和实践。 请记住,根据欧盟地区隐私保护法律的规定,只有当用户明确拒绝数据采集时,才需要设置isGDPRArea(true)来关闭SDK对隐私字段的采集。

如果你的应用在欧盟地区运营并且在Google投放您的应用,请务必传入此属性,以确保您符合Google欧盟用户意见征求新政的规定

3.3.2.1 初始化时设置GDPR

关于支持Google的欧盟意见征求新政:为了应对即将生效的欧盟《数字市场法案》(DMA),Google对其欧盟用户意见征求政策进行了更新,SE SDK也做了对应的适配。

Google新政如下:

https://support.google.com/tagmanager/answer/13695607?hl=en

预置属性如下图所示:


SE 属性Google 属性值(boolean )含义错误提示
_isGDPRAreaeeatrue/false是否为GDPR区域,默认为false
_ad_personalization_enabledad_personalizationtrue/false用户是否允许Google将其数据用于个性化广告The value of "_ad_personalization_enabled" cannot be empty.
_ad_user_data_enabledad_user_datatrue/false用户是否同意将其数据发送到GoogleThe 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);

3.3.2.2 通过API设置GDPR

方法示例

static void setGDPRArea(bool isGDPRArea)

参数说明


参数名称参数含义参数类型是否必传
isGDPRArea是否是GDPR地区,默认为falsebool

调用示例

SolarEngine.setGDPRArea(true);

3.3.2.3 初始化设置iOS ATT授权等待

如果App有归因需求则设置ATT授权等待,在等待时间内SDK会等用户授权ATT后能获取到IDFA才上报Install事件,从而增加归因精准率。如果超过了ATT授权等待时间用户还未授权则SDK也将上报事件,事件中不包含IDFA有效字段

注:此方法仅iOS适用

调用示例

SolarEngineConfig config = SolarEngineConfig();
config.attAuthorizationWaitingInterval = 120; // 等待iOS ATT授权,最多等待120秒后上报事件
SolarEngine.initializeWithAppkey(appkey, config);


3.4、获取distinct_id

获取当前设置的distinct_id

方法示例

static Future<String> getDistinctId()

返回值:返回当前设置的distinct_id,没有则为null

示例代码

 void getDistinctId() async{
      var distinctId = await SolarEngine.getDistinctId();
      print(distinctId);
 }

3.5、访客 ID

访客 ID 即 _visitor_id,是用户在设备上安装了应用之后,登录状态之前该用户的唯一标识。

我们提供访客 ID 自定义设置的接口,如果您有自己的访客管理体系需要替换访客 ID,应在 SDK 初始化之前进行设置

数据上报时仅以最后一次传入的访客 ID 为准,应避免多次调用造成多个非正常访客 ID 先后上报数据的情况。

3.5.1、设置访客 ID

调用 setVisitorID 方法来设置访客 ID。

方法示例

static void setVisitorID(String visitorID)

参数说明


参数名称参数含义参数类型是否必传
visitorID需要设置的访客 IDString

调用示例

SolarEngine.setVisitorID("xxx访客IDxxx");

注:

1.该调用仅为向 SDK 传入访客 ID,不会上报用户设置事件。

2.开发者设置的访客 ID 长度不能超过 128 个字符,否则会设置失败。

3.5.2、获取访客 ID

获取当前设置的访客 ID,可以调用 getVisitorID 方法获取。

方法示例

static Future<String> getVisitorID()

返回值:返回已经设置的访客 ID,默认为""

调用示例

void getVisitorId() async{
      var visitorID = await SolarEngine.getVisitorId();
      print(visitorID);
 }

3.6、账户ID

指用户在应用中登录之后,登录账号在应用中的唯一标识。登录之前将以访客 ID 作为用户标识。

在账号 ID 设置完成后,在调用 logout 清除账号 ID之前,设置的账号 ID 将一直保留,并作为用户身份识别 ID。清除账号 ID 的操作请在有真实退出登录状态行为时进行,关闭 App、退至后台运行时无需调用。

数据上报时仅以最后一次传入的账号 ID 为准,应避免多次调用造成多个非正常账号 ID 先后上报数据的情况。

3.6.1、设置账号 ID

调用 login 方法来设置用户的账号 ID。

注:开发者设置的账户ID长度不能超过128个字符,否则会设置失败。

方法示例

static void login(String accountID)

参数说明


参数名称参数含义参数类型是否必传
accountID需要设置的账号 IDString

调用示例

SolarEngine.login("xxx账号IDxxx");

3.6.2、获取账号 ID

调用 getAccountID 来获取用户的账号 ID。

方法示例

static Future<String> getAccountID()

返回值:返回已经设置的账号ID,默认为""

调用示例

void getAccountID() async{
      var accountID = await SolarEngine.getAccountID();
      print(accountID);
 }

3.6.3、清除账户ID

调用 logout 来清除账号 ID。

方法示例

static void logout()

调用示例

SolarEngine.logout();

注:该调用仅为通知 SDK 清除账号 ID,不会上报用户登出事件。

3.7、设置公共事件属性

公共事件属性指的就是每个事件都会带有的属性,对于一些重要的属性,譬如用户的来源渠道、转化而来的广告 ID 等,这些属性需要设置在每个事件中,SDK 需支持这些属性被设置为公共事件属性的设置。

3.7.1、设置公共事件属性

调用 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);

3.7.2、清空指定的公共事件属性

调用 unsetSuperProperty 方法可清除指定key值的一个公共事件属性

方法示例

static void unsetSuperProperty(String key)

参数说明


参数名称参数含义参数类型是否必传
key需要清除的公共事件属性key值String

调用示例

SolarEngine.unsetSuperProperty("K3");

3.7.3、清空所有公共事件属性

调用 clearSuperProperties 方法可清空所有公共事件属性

方法示例

static void clearSuperProperties()

调用示例

SolarEngine.clearSuperProperties();

3.8、获取归因结果信息

SDK提供获取归因结果信息接口,开发者可使用归因信息做埋点等逻辑处理

SDK提供两种方式获取归因结果信息

•1、设置归因结果回调:当SDK获取归因结果成功或者失败时会给出回调(此接口为异步回调)

•2、直接获取归因结果:直接从SDK缓存中获取归因结果,SDK还没归因结果时直接返回null(此接口为同步返回)


3.8.1、设置归因结果回调

在SEConfig中设置归因回调

示例代码

String appkey = "";
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
config.onAttributionSuccess = (data) {
  print(data);
};
config.onAttributionFail = (code) {
  print(code);
};
SolarEngine.initializeWithAppkey(appkey, config);

3.8.2、直接获取归因结果回调

static Future<String> getAttribution()

示例代码

void getAttribution() async{
      var attribution = await SolarEngine.getAttribution();
      print(attribution);
 }


归因code 描述及 归因结果详情见:归因结果详情

3.8.3、获取预置属性信息

开发者可以通过调用此接口获取预置属性信息

方法示例

static Future<Map> getPresetProperties() async

示例代码

var properties = await SolarEngine.getPresetProperties();
print(properties.toString());

返回字段说明


字段说明
_appkeySE平台分配的appKey,开发者初始化传入
_distinct_idSE生成的设备ID
_account_id开发者通过login接口传入的accountID
_visitor_id开发者通过setVisitorID接口传入的visitorID
_session_idSE内部每次冷启动生成的sessionID
_uuidSE安装时产生的唯一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设备生成厂商
_platformSDK平台,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_versionSDK版本号

4、预置事件设置自定义属性

热力引擎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 会默认丢弃该条属性。

5、事件上报

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 会默认丢弃该条属性。

下面将对每种事件的上报规则进行一一说明。

5.1、预置事件

5.1.1、安装

每次安装后首次打开自动报送该事件。

安装事件的 _event_name 为 _appInstall

5.1.2、启动

Android应用每次打开、或退出后台30s再进入前台时,自动报送该事件。

启动事件的 _event_name 为 _appStart

5.1.3、退出

Android应用退出、或退到后台超过30s时,自动报送该事件。

退出事件的 _event_name 为 _appEnd

5.2、预定义事件

5.2.1、变现广告展示事件

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:AdcolonyString
adType展示广告的类型 1:激励视频 2:开屏 3:插屏 4:全屏视频 5:Banner 6:信息流 7:短视频信息流 8:大横幅 9:视频贴片 10:中等尺寸横幅 0:其它int
adNetworkAppID变现平台的应用 IDString
adNetworkADID变现平台的变现广告位 IDString
mediationPlatform聚合平台标识,常见聚合平台枚举如下,若您使用的聚合平台不在如下枚举值,您可以自定义命名,并控制字符数在32位。没有聚合平台标识,请设置为 "custom"。
max
ironsource
admob
hyperbid
topon
cas
Tradplus
Tobid
String
ecpm广告ECPM(广告千次展现的变现收入,0或负值表示没传),单位:元double
currencyType展示收益的货币种类,遵循《ISO 4217国际标准》如 CNY、USDString
isRenderSuccess广告是否渲染成功,具体枚举值如下: 例如:成功时,只需要传入 YES YES:成功 NO:失败 如果不需要统计该指标,请传 YESbool
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保留字段,开发者设置则直接报错丢弃

5.2.2、应用内购买事件

App 内付费购买时,报送该事件,用于进行购买及内购收入分析。

该事件为用于付费预测模型训练的关键事件,使用系统提供的预测服务时,为必须报送事件。

应用内购买事件的 _event_name 为 _appPur。

方法示例

static void trackAppPurchase(SEAppPurchaseData appPurchase)

参数说明


参数名称参数含义参数类型是否必传
appPurchase承载应用内购买事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的SEAppPurchaseData 类的定义SEAppPurchaseData

SEAppPurchaseData 类参数说明:

参数名称参数含义参数类型是否必传
orderId本次购买由系统生成的订单 IDString
payAmount本次购买支付的金额,单位:元double
currencyType支付的货币类型,遵循《ISO 4217国际标准》,如 CNY、USDString
payType支付方式:如 alipay、weixin、applepay、paypal 等String
productId购买商品的IDString
productName商品名称String
productNum购买商品的数量Int
payStatus1:成功 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保留字段,开发者设置则直接报错丢弃

5.2.3、上报变现广告点击事件

调用 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:AdcolonyString
adType展示广告的类型 1:激励视频 2:开屏 3:插屏 4:全屏视频 5:Banner 6:信息流 7:短视频信息流 8:大横幅 9:视频贴片 0:其它int
adNetworkADID变现平台的变现广告位 IDString
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保留字段,开发者设置则直接报错丢弃

5.2.4、上报注册事件

调用 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保留字段,开发者设置则直接报错丢弃

5.2.5、上报登录事件

调用 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保留字段,开发者设置则直接报错丢弃

5.2.6、上报订单事件

调用 trackOrder 方法可以上报订单事件

方法示例

static void trackAppOrder(SEAppOrderData appOrderData)

参数说明

参数名称参数含义参数类型是否必传
appOrderData承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppOrderData 类的定义SEAppOrderData


SEAppOrderData 类参数介绍:

参数名称参数含义参数类型是否必传
orderId订单 IDString否,不超过 128 字符
payAmount订单金额,单位:元double
currencyType展示货币类型,遵循《ISO 4217国际标准》,如 CNY、USDString
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保留字段,开发者设置则直接报错丢弃

5.2.7、上报自归因事件

增加归因安装事件,支持统计归因数据,满足客户使用三方归因或者自归因之后的结果数据回传到自定义分析,上报时机支持开发者自定义触发

自归因事件的 `_event_name` 为 _appAttr

方法示例

static void trackAppAttr(SEAppAttrData trackAppAttr)

参数说明

参数名称参数含义参数类型是否必传
trackAppAttr承载变现广告展示事件所需要上传的属性的类,具体可参考 solar_engine.dart 文件中的 SEAppAttrData 类的定义SEAppAttrData

SEAppAttrData 类参数介绍:

参数名称参数含义参数类型是否必传
adNetwork投放广告的渠道 ID,需要与发行平台匹配String
subChannel投放广告的子渠道String
adAccountId投放广告的投放账号 IDString
adAccountName投放广告的投放账号名称String
adCampaignId投放广告的广告计划 IDString
adCampaignName投放广告的广告计划名称String
adOfferId投放广告的广告单元 IDString
adOfferName投放广告的广告单元名称String
adCreativeId投放广告的广告创意 IDString
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);

5.3、自定义事件

除了以上已经列出的有明确定义的事件外,开发者可以根据自己的分析需求,进行自定义事件的上报自定义事件,即事件的 _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);

5.4、自定义属性

事件的属性是一个 Dictionary 对象,其中每个元素代表一个属性。

5.4.1、key 为该属性的名称

•String 类型

•只能以字母开头,不能以下划线开头,其余字符可包含数字、小写字母和下划线"_"

•长度最大为 40 个字符

•对字母大小写敏感

5.4.2、value 为该属性的值

•支持基本数据类型 string、int、long、float、double、boolean 等以及 date 类型与数组

•对于数组的元素,只支持字符串类型

•对于其他类型都将强制转为字符串存储

5.4.3、自定义属性的属性类型

一个自定义属性的存储数据类型,会以第一次上报数据的格式自动由系统进行识别,一旦确定无法修改。相同产品的属性类型在第一次上报时进行确定。后续不同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"
布尔型-booleantrue 或 falsetrue,false带引号的 true 或 false 会被识别为字符
列表型-array列表中的元素都会转变为字符串类型["a","1","true"]

注:属性的存储数据类型,决定了在分析模型中可以选择的分析逻辑,比如数值型可以进行最大值、最小值、求和等计算,布尔型可以进行为真数、为假数的计算,所以报送数据的格式,需要考虑分析场景和业务需求,制定完整的埋点方案,并按埋点方案进行格式确定。

5.4.4、自定事件(支持预置属性)

在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);




5.5、时长事件

创建时长事件

调用 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 开始计时的时长,即退出事件的时长无需配置开始计时,会默认赋值。


5.6、首次事件

首次事件是指针对某些维度(设备 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首次事件校验idstring是(如果未传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为必传字段



6、用户属性设置

在热力引擎中,专门提供了针对用户属性设置数据的上报方法,针对用户的属性添加或变更,您可以通过该方法进行上报。

建议您将与用户相关的不变的、或变化频率比较低、或保存价值比较高的属性,比如年龄、创建角色时间、等级、所在地、首次付费时间、总付费金额等属性设置为用户属性,其它变化频率比较高的属性通过事件进行上报和记录。

用户属性设置分为以下几种方式:userUpdate、userInit、userAdd、userUnset、userAppend、userDelete,由开发者调用,对用户属性进行设置。

注:

1.用户属性格式要求与事件属性保持一致。

2.所有用户属性设置事件上报时设置的自定义属性均不能为"_"下划线开头,"_"下划线开头为SDK保留字段,开发者设置则直接报错丢弃。

6.1、userInit

如果您要上传一批用户属性,其中已经存在的用户属性不去更新属性值、不存在的属性进行创建并保存属性值,则可以调用 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);

6.2、userUpdate

对于一般的用户属性,您可以调用 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);

6.3、userAdd

当您要上传数值型的属性时,您可以调用 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 累加操作

6.4、userUnset

当您要清空用户的用户属性值时,您可以调用 userUnset 来对指定属性(字符串数组)进行清空操作,如果该属性还未在集群中被创建,则 不会 创建该属性。

方法示例

static void userUnset(List<String> keys)

参数说明

参数名称参数含义参数类型是否必传
keys需要清空的用户属性 key 值 string 数组string[]

调用示例

SolarEngine.userUnset(["kind"]);

6.5、userAppend

您可以调用 userAppend 对 JSONArray 类型的用户属性进行追加操作,如果该属性不存在,则会新建该属性。

方法示例

static void userAppend(Map<String, dynamic> properties)

参数说明

参数名称参数含义参数类型是否必传
properties开发者自定义用户属性Map<String, dynamic>

调用示例

Map<String, dynamic> properties = {};
properties['kind3'] = 'timer3';
SolarEngine.userAppend(properties);

6.6、userDelete

如果您要删除某个用户,可以调用 userDelete 将这名用户删除。用户删除后,您将无法再查询该名用户的用户属性,但该用户产生的事件仍然可以被查询到。

方法示例

static void userDelete(SEUserDeleteType deleteType)

调用示例

SolarEngine.userDelete(SEUserDeleteType.DELETE_BY_ACCOUNTID);


6.7、iOS ATT请求追踪授权

此接口适用于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');    
    } 
});



6.8、设置iOS SKAdNetwork 和 conversion value转化值

注:

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
coarseValueSKAdNetworkCoarseConversionValue 值,粗粒度转化值。 如果应用安装量不足,未能达到隐私阈值,就会启用粗粒度转化值,支持以下选择: SKAdNetworkCoarseConversionValueHigh SKAdNetworkCoarseConversionValueLow SKAdNetworkCoarseConversionValueMediumString
lockWindow 是否在转换窗口结束之前发送回调。YES告诉系统发送回调,而不必等待转换窗口结束。默认值为NO。bool

设置安装回调

需要将 SolarEngineSDK 指定为 SKAdNetwork 回调接收方,请进行以下操作:

1.在 Xcode 的项目导航器中选择 Info.plist

2.单击"属性/Property"列表编辑器中某个键旁边的添加按钮 (+),然后按回车键

3.输入名称 NSAdvertisingAttributionReportEndpoint

4.从"类型/Type"列的弹出菜单中选择"String"

5.输入 https://detailroi.com





6.9、设置深度链接

开发者可以通过创建深度链接来将用户转到应用中的特定页面。如果用户已在设备上安装您的应用,SE SDK 会转向链接中指定的页面。用户通过链接打开应用后,SDK 就可以读取深度链接数据了,具体步骤如下:查看 SolarEngine 后台配置


URL Scheme 示例为:test1://

Android 配置深度链接

配置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);

参数说明:

参数名称参数含义参数类型是否必传
callbackdeeplink回调OnDeeplinkCallback

调用代码如下:

SolarEngine.onDeepLinkCallback((code, data) {
      if (code == 0) {
           print("deeplink回调成功----");
           print(data);
       } else {
            print("deeplink回调失败----$code");
       }
});

传递URL给SESDK

url获取方式可参考:设置深度链接

方法示例

static void handleDeepLinkUrl(String url);

参数说明:

参数名称参数含义参数类型是否必传
urlusrSchemeString

调用代码如下:

SolarEngine.initializeWithCallbacK(appkey, config, (code) {
      // 初始化成功
      if(code == 0){
          print("初始化成功-----"); 
          print(code);
          //注意handleDeepLinkUrl方法必须在初始化成功之后且在设置Deeplink回调之后调用,否则不生效
          SolarEngine.handleDeepLinkUrl("your url");
      }
  });

延迟深度链接

开启了延迟deeplink后sdk初始化时回去请求延迟deeplink相关参数

回调成功, data字段 属性说明:

  • sedpLink:跳转参数
  • turlId:7位短链
  • sedpUrlscheme:用户在创建deeplink链接时填写的

回调失败,errorCode

  • 1101: sdk内部异常;
  • 1102: 与服务端建立链接失败;
  • 1103: 与服务端建立链接超时;
  • 1104: 服务端异常;
  • 1105: 服务端返回sdk端数据;
  • 1106: deeplink匹配失败,服务端回调空


示例代码

// 设置延迟深度链接回调
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 相关配置

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

});






————————————

SDK 更新记录


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:优化获取归因结果

  • Android:  优化 appEnd 事件计算逻辑
  • Android: SDK 性能优化


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初版




最近修改: 2025-08-07Powered by