Menu

User, Device & Event

User

Broadly speaking, a user refers to each unique individual who interacts with the product. Regardless of the number of devices they use or switch between, they are treated as a single user and identified with a unique cross-device and cross-platform ID: account ID. The account ID requires registration or login to be generated.

Narrowly speaking, a user refers to each unique device that accesses the product. Even if multiple individuals use the same device or an individual uses multiple devices, each device is counted as a separate user and identified with a unique device-centered ID: visitor ID.

However, in real life, a user might have a visitor ID after install and register for an account ID later. Therefore, we still need another ID to connect the user's behavior before and after registration. This ID is referred to as the user ID in the SolarEngine system.

In short, the user ID is to link the user's entire lifecycle and serves as a cross-platform identification ID. As it involves cross-platform recognition, in the user ID genration rules, the account ID takes precedence over the visitor ID in terms of priority.

User Identification

SolarEngine uses device ID, user ID, account ID and visitor ID to identify users.

  • Device ID: A unique device identifier generated by SDK, with the attribute name "_distinct_id".
  • User ID: A unique user identifier generated based on user identification rules (see below), with the attribute name "_user_id".
  • Account ID: Reported by the developer, with the attribute name "_account_id".
  • Visitor ID: Reported by the developer, with the attribute name "_visitor_id". If not provided, it takes the value of "_distinct_id".

Identification Rules

  Basic Rules:

  • A single user ID can only be bound to 1 account ID and 1 visitor ID.
  • The binding priority is given to account ID over visitor ID.
  • One account ID can only be bound to 1 user ID.
  • One visitor ID can only be bound to 1 user ID.

  Detailed Description:

  • When only an account ID is present,
    • If the account ID is already bound to a user ID, the data belongs to the bound user ID.
    • If the account ID is not bound to an existing user ID, a new user ID is created and bound.
  • When only a visitor ID is present,
    • If the visitor ID is already bound to a user ID, the data belongs to the bound user ID.
    • If the visitor ID is not bound to an existing user ID, a new user ID is created and bound.
  • When both an account ID and a visitor ID are present, and the account ID is already bound to a user ID, the data belongs to the bound user ID. Then check the binding status of the visitor ID:
    • If the visitor ID is already bound to a user ID, the binding status remains unchanged.
    • If the visitor ID is not bound to any user ID, the following check is performed:
      • If the account ID is already bound to another visitor ID, the visitor ID is not bound to any user ID.
      • If the account ID is not bound to any visitor ID, the visitor ID is bound to the user ID that the account ID is bound to.
  • When both an account ID and a visitor ID are present, and the account ID is not bound to an existing user ID, the binding status of the visitor ID is checked:
    • If the visitor ID is bound to a user ID and the bound user ID is already associated with an account ID, a new user ID is created and bound to the current account ID.
    • If the visitor ID is bound to a user ID but the bound user ID is not associated with an account ID, the current account ID is bound to the user ID.
    • If the visitor ID is not bound to any user ID, a new user ID is created, and the current account ID, along with the visitor ID, is bound to the newly created user ID.

User Properties

User IDs can only be used to count the number of users but cannot meet more in-depth user analysis requirements. Therefore, SolarEngine provides the concept of user properties, allowing our clients to report user-related properties and utilize them within SolarEngine user analysis models to gain further insights into user behavior.

It is recommended to select properties that change infrequently or hold significant value, such as first payment time and total payment amount. Other properties with higher change frequency can be reported and recorded through events.

User properties are divided into preset user properties and custom user properties.

Preset User Properties

Here are the user properties collected by default.

Field NameDescriptionExampleData Type
_tenant_idThe Tenant ID to which the AppKey belongs.157string
_prokeyThe Product ID to which the AppKey belongs.546279e4b8514d56string
_user_idUser IDs generated based on SE user identification rules.90901129412int
_account_idAccount IDs reported by the developer.aid25491084string
_visitor_idVisitor IDs reported by the developer.vid8709901241string
_active_timeApp activation time = The "_ts" in the user's first data record.2023/9/16 19:13date
_reg_timeThe "_ts" in the user's first Account ID-included data record.2023/9/16 19:13date
_update_timeThe "_ts" in the user's last data record.2023/9/16 19:13date
_user_operationThe "_userset_type" in the user's last data record.initstring
_server_timeThe time when the server receives the user's last data record.2023/9/16 19:13date

Custom User Properties

In addition to preset ones, you can also customize user properties based on your analysis requirements. It is recommended to synchronize these properties in the event tracking plan to enbale information sharing among all team members.

Data Reporting Format Table

Data TypeDescriptionExample
numberRange from -9E15 to 9E15, without quotation marks.1234, 12.34
stringLimit 2KB. Numbers with quotation marks will also be identified as strings."dashen", "北京", "1234"
date"yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss", or "yyyy-MM-dd 00:00:00""2023-03-01 12:34:56","2023-03-01 12:34:56.789","2023-03-01 00:00:00"
booleanTrue or false without quotation marks.true, false
arrayAll elements in an array will be converted into strings.["a","1","true"]

Device

Many of our clients do not enforce user login in their applications. In such cases, the device ID serves as the visitor ID. As for applications with few multi-device logins or without a login system at all, like some IAA hyper casual games, we can directly use the device ID as a unique identifier for users.

In this context, we developed the Device Table to record and update device-level properties and advertising-related data in real time.

Device ID (_distinct_id) Generation Rules:

PlatformDevice ID
AndroidRetrieve android_ID by default. If it fails, then take the UUID.
iOSRetrieve and encrypt IDFV by default. If it fails, then take the UUID.

Device Table

When a device generates an event for the first time, its device ID and properties of this event will be added into the device table in real time.

The device table updates its properties daily at 2:00 a.m. for devices added the day before, using the latest non-empty property values reported.

Field NameDescriptionExampleData Type
_tenant_idTenant ID1fca0a4b93fa7170string
_prokeyProduct ID540c8f9f1519f770string
_appkeyThe 16-character AppKey, equals "attribution_app_id" in the ROI device table.546279e4b8514d56string
_distinct_idDevice ID: _android_id, _idfv, cookie_id, or OpenID3e4416a9d42f4566string
_uuidUUID (Universally Unique Identifier) generated through Android system APIs.99ae3a5b-750c-4f5f-aeb9-f128ab8a0ea0string
_idfaIDFA (Identifier for Advertisers) for iOS devices.1e2dfa89-496a-47fd-9941-df1fc4e6484astring
_idfvIDFV (Identifier for Vendor) for iOS devices.599f9c00-92dc-4b5c-9464-7971f01f8370string
_imeiIMEI (International Mobile Equipment Identity) for Android devices.8.61886E+14string
_imei2IMEI2 / IMEISV (IMEI Software Version) for Android devices.8.61886E+14string
_gaidGAID (Google Advertising ID) for Android devices.bd4b382b-2eeb-4aea-90c4-02b7f28a04b3string
_oaidOAID (Open Anonymous Identification) for Android devices.fdebebfd-c64f-e6c5-7eea-b7f73da79380string
_android_idAndroid ID55ae62239e982d88string
_meidMEID (Mobile Equipment Identifier) for Android devices.0cf091d3-83da-42df-9b23-a05bdc9cce7astring
_macMAC address08:00:27:11:22:33string
_uaUser AgentMozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X)string
_active_timeApp Activation Time, "_ts"06:34.7DateTime64
_update_timeLast update time08:02.9DateTime64
_server_timeThe time when the server received the user's last data record.45:13.7DateTime64
_db_timeDatabase Time1.662E+12Int64
_languageDevice Languagezh-hanstring
_time_zoneDevice TimezoneGMT+08:00string
_manufacturerDevice ManufacturerApplestring
_platformOperating Platform, e.g.0: Other1: Android2: iOS3: Windows4: Mac5: Web6: WeChat2number
_os_versionOperating System Version14.3.1number
_screen_widthDevice Screen Width1080number
_screen_heightDevice Screen Height1920number
_densityPixel Density2.62number
_device_modelDevice ModeliPhone 9,1string
_device_typeDevice Type, e.g.0: Other1: Android Phone2: Android Pad3: iPhone4: iPad5: Mac6: PC3number
_app_versionApp Version1.0.10.404string
_app_version_codeBuild Number819string
_package_namePackage Namecom.aike.dashenguilai.adstring
_app_nameApp Name指上谈兵string
_channelApp Distribution Platforms:Default AppStore for iOS devices.AppStorestring
_ipIP Address1.119.176.34string
_ipv6IPv6392c:3e1:5158:f0ac:92ae:ed3:e852:4d42string
_countryCountryCNstring
_country_codeCountry CodeCNstring
_provinceProvincebjstring
_cityCitybeijingstring
attribution_platformAttribution Platformstring
promotion_platformPromotion Platformstring
promotion_account_idPromotion Account IDstring
promotion_account_namePromotion Account Namestring
campaign_nameCampaign Namestring
campaign_idCampaign IDstring
offer_nameOffer Namestring
offer_idOffer IDstring
creative_nameCreative Namestring
creative_idCreative IDstring
sub-channelSub-Channelstring
cost_amtAdvertising Costsdouble
monetization_platform_listMonetization Platforms["kuaishou","toutiao","mintegral"]array
iap_revenue_amt_totalIAP Revenue (Total)
iap_revenue_amt_h0IAP Revenue (Hour 0)
iap_revenue_amt_d0IAP Revenue (Day 0)
iap_revenue_amt_d1IAP Revenue (Day 1)
iap_revenue_amt_d3IAP Revenue (Day 3)
iap_revenue_amt_d7IAP Revenue (Day 7)
iap_revenue_amt_d14IAP Revenue (Day 14)
iap_revenue_amt_d30IAP Revenue (Day 30)
iap_revenue_amt_d60IAP Revenue (Day 60)
all_estimate_revenue_amt_total Estimated Revenue (Total)
all_estimate_revenue_amt_h0 Estimated Revenue (Hour 0)
all_estimate_revenue_amt_d0 Estimated Revenue (Day 0)
all_estimate_revenue_amt_d1Estimated Revenue (Day 1)
all_estimate_revenue_amt_d3Estimated Revenue (Day 3)
all_estimate_revenue_amt_d7Estimated Revenue (Day 7)
all_estimate_revenue_amt_d14Estimated Revenue (Day 14)
all_estimate_revenue_amt_d30Estimated Revenue (Day 30)
all_estimate_revenue_amt_d60Estimated Revenue (Day 60)
all_real_revenue_amt_totalActual Revenue (Total)
all_real_revenue_amt_h0Actual Revenue (Hour 0)
all_real_revenue_amt_d0Actual Revenue (Day 0)
all_real_revenue_amt_d1Actual Revenue (Day 1)
all_real_revenue_amt_d3Actual Revenue (Day 3)
all_real_revenue_amt_d7Actual Revenue (Day 7)
all_real_revenue_amt_d14Actual Revenue (Day 14)
all_real_revenue_amt_d30Actual Revenue (Day 30)
all_real_revenue_amt_d60Actual Revenue (Day 60)
monetization_propertiesUsed to differentiate the monetization platforms and their respective estimated & actual revenue.map

The Application of Device Table

The device table can be used in the following scenarios:

  • User Analysis

Device properties can be used as the conditions to filter analysis subjects or group users.

Multiple analysis models support device-level user behavior analysis.

  • Online Parameter

Taking "_distinct_id" as the traffic diversion entity, you can use properties in the device table as conditions to further filter the audience.

  • A/B Testing

Taking "_distinct_id" as the traffic diversion entity, you can use properties in the device table as conditions to further filter the audience.

Event

Events represent specific actions that users perform within a product (App/Mini-program/Web Page). These events can include interactions such as app launches, registration, login, page views, purchases, or any other meaningful actions. Some events occur only once in a user's lifecycle, such as registration. However, most events occur multiple times, such as app launches, ad impressions, purchases and so on.

A complete event should consist of the following elements:

•Who: User information, such as the user ID.

•When: The time when the event occurs.

•Where: The location where the event occurs.

•How: Refers to how the user engages in the event. It includes various aspects, such as the device and browser used, app version, operating system, channel of acquisition, etc. You can also customize more properties as needed.

After a user is acquired, there will be many events to occur. These events are independent and arranged in chronological order (see pic). For each user, there is only one piece of record that integrates all their properties (see pic).

Event data is stored in an event table, while user data is stored in a user table. These two tables are associated with each other using the user ID as a common identifier.

Due to different event collection methods, SolarEngine divides events into preset events and self-reported events (event tracking).

Preset Events

Preset events do not require any additional tracking code inserted. They are automatically collected and recorded by the SolarEngine SDK, including app install, app launch and app exit.

Event NameEvent IdentifierDescription
App Install_appInstallAutomatically reported every time the app is installed and opened for the first time.
App Launch_appStartAutomatically reported every time the app is opened, either from a closed state or transitioning from the background to the foreground after being inactive for more than 30 seconds.
App Exit_appEndAutomatically reported every time the app is closed or when it remains inactive in the background for more than 30 seconds.

Self-Reported Events

In practical business operations, besides preset events, developers often need to define and report more events for analysis. Therefore, SolarEngine provides two methods, SDK and API, for our clients to report events according to their own needs.

In SolarEngine, self-reported events are categorized into three types: predefined events, automatically captured events, and custom events.

Predefined Events

1) Ad Impression

Automatically reported when displaying ads within the app, which is essential for ad revenue measurement in ROI analysis and user analysis. (Event Name:  "_appImp")

2) Ad Click

Automatically reported when users click ads within the app. (Event Name:  "_appClick")

3) In-App Purchase

Automatically reported when users make purchases within the app (Event name: "_appPur"), which is essential for IAP revenue measurement. It is also a key event for training the payment prediction model, so if you are using our payment prediction services, "_appPur" will be a mandatory event to report.

4) Order

Automatically reported when users place orders within the app. (Event Name: "_appOrder")

5) Registration

Automatically reported when users register within the app. (Event Name: "_appReg")

6) Login

Automatically reported when users log into the app. (Event Name: "_appLogin")

7) Attribution

Allows our customers to send us the attribution results from a third-party attribution platform or SANs. You can define when and how to report this event. (Event Name: "_appAttr")

Automatically Captured Events

You can set up automatically captured events when initializing the SolarEngine SDK.

1) _appViewScreen

Report when users view a specific page within the app.

2) _appElementClick

Report when users click a specific element within the app.

Custom Events

In addition to those industry-wide events listed above, you can also custom-define and report events based on your analysis goals.

Here are the naming conventions for custom events:

  • Start with letters only.
  • No more than 40 characters.
  • Contain numbers, lowercase letters and underscores only.

Event Properties

Event properties are divided into: general event properties, public event properties, predefined event properties, automatically captured event properties and custom event properties, each corresponding to the events mentioned above.

General Event Properties

General event properties are reported by the SolarEngine SDK.

Field NameDescriptionExampleData Type
_tenant_idTenant ID1fca0a4b93fa7170string
_prokeyProduct ID540c8f9f1519f770string
_appkeyAppKey546279e4b8514d56string
_source_typeData Source: record "sdk" by default if reported by SDK.sdkstring
_event_nameEvent Name_appInstallstring
_user_idThe unique user identifier created by the SolarEngine system.6.21562E+18Int64
_account_idAccount ID: the value developers assign to their users.aid25491084string
_visitor_idVisitor ID: take the value of _distinct_id instead without _visitor_id.vid8709901241string
_session_idSession ID: identify the duration of a user's visit.
App: Start from opening the app, and end when closing it.
Web: Start from landing on the web page, and end when closing it.
3e4a4f9d2258cc41ee86dd09132bc61cstring
_event_idEvent identifier generated by SDK.56e3704cf535e5e6dccdc421e37b201estring
_event_timeEvent trigger time, equals "_ts".21:11.8DateTime64
_server_timeThe time when the server received data.21:12.5DateTime64
_db_timeDatabase Time1.662E+12Int64
_dsDate when the event occurs.2022/11/19date
_tsTimestamp1.63179E+12long
_idfaIDFA for iOS1e2dfa89-496a-47fd-9941-df1fc4e6484astring
_idfvIDFV for iOS599f9c00-92dc-4b5c-9464-7971f01f8370string
_uuidUUID for Android99ae3a5b-750c-4f5f-aeb9-f128ab8a0ea0string
_imeiIMEI for Android8.61886E+14string
_imei2IMEI2 for Android8.61886E+14string
_gaidGAID for Androidbd4b382b-2eeb-4aea-90c4-02b7f28a04b3string
_oaidOAID for Androidfdebebfd-c64f-e6c5-7eea-b7f73da79380string
_android_idAndroid ID55ae62239e982d88string
_uaUser AgentMozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X)string
_languageDevice Languagezh-hanstring
_time_zoneDevice TimezoneGMT+08:00string
_manufacturerDevice ManufacturerApplestring
_platformOperating Platform, e.g.
0: Other
1: Android
2: iOS
3: Windows
4: Mac
5: Web
6: WeChat
2number
_os_versionOperating System Version14.3.1number
_resolutionResolution (not collected for now)string
_screen_widthDevice Screen Width1080number
_screen_heightDevice Screen Height1920number
_densityPixel Density2.62number
_device_modelDevice ModeliPhone 9,1string
_device_nameDevice NameiPadAir4string
_device_typeDevice Type, e.g.
0: Other
1: Android Phone
2: Android Pad
3: iPhone
4: iPad
5: Mac
6: PC
3number
_network_typeNetwork Type, e.g.
0: No network connection
1: Unknown
2: 2G
3: 3G
4: 4G
5: 5G
6: 6G or more
7: WiFi
4number
_carrierNetwork Carrierstring
_app_versionApp Version1.0.10.404string
_app_version_codeBuild Number819string
_package_namePackage Namecom.aike.dashenguilai.adstring
_app_nameApp Name指上谈兵string
_channelApp Distribution Platforms:
Default AppStore for iOS devices.
AppStorestring
_libSDK Type, e.g.
0: Other
1: Android
2: iOS
3: JavaScript
4: WeChat Mini Program
6: OPPO Quick App
2number
_lib_versionIntegrated SDK Version1.6.6string
_durationEvent duration for "_appEnd"in milliseconds. Call the timeEvent functionality for timing.1280number
_is_first_dayWhether a first-day event or nottrueboolean
_is_first_timeWhether a first-time event or notfalseboolean
_browserBrowserChrome, Firefoxstring
_browser_versionBrowser VersionChrome 61.0string
_page_titleTitle of the current pageCartstring
_page_nameAddress of the current pagecom.aike.dashenguilai.android.cartstring
_referrer_titleTitle of the previous pageIndexstring
_referrer_nameAddress of the previous pagecom.aike.dashenguilai.android.indexstring
_log_countThe daily incremental sequence number of event data; used to track event data loss.25number
_distinct_idDevice ID

iOS: Default IDFV
Android: Default Android ID
Web: Default cookie_id
WeChat: Default open ID

Optional:
For apps and WeChat, if no device IDs listed above are available, then take UUID+13-bit current timestamp.
35f06a1106cd442dstring
_distinct_id_type1001: default _distinct_id
1002: optional _distinct_id
1003: custom _distinct_id
1001decimal
_distinct_indexCreate indexes for segmentation/user packages to accelerate queries.1.24125E+12Int64
_is_attrWhether self-attribute or not
True: 1
False: 0
0boolean
_adnetworkAdvertising channel IDtoutiaostring
_sub_channelSub-channel103300string
_adaccount_idAd account ID1.65596E+15 string
_adaccount_nameAd account namexxx科技全量18 string
_adcampaign_idAd campaign ID1.68071E+15 string
_adcampaign_nameAd campaign name小鸭快冲计划157-1024 string
_adoffer_idAd offer ID1.68522E+15 string
_adoffer_nameAd offer name小鸭快冲单元406-1024 string
_adcreative_idAd creative ID1.68013E+15 string
_adcreative_nameAd creative name自动创建20210901178921string
_ad_platformAdvertising platforms, e.g. (value: name),
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
csjstring
_mediation_platformMediation platforms, like GroMore and TopOn.
Record "custom" if no mediation platform is used.
gromorestring
_ad_appidThe App ID on monetization platforms.a603f46266d902string
_placement_idThe Placement ID on mediation platforms.string
_ad_idThe Placement ID on monetization platforms.943508343string
_ad_typeAd types, e.g. (value: explanation),
1:Rewarded Video Ads
2:Splash Ads
3:Interstitial Ads
4:Full Screen Videos
5:Banner Ads
6:In-Feed Ads
7:Native Video Ads
8:Playable Ads
9:Pre-movie Ads
0:Other
1string
_bid_typeWhether Header Bidding or not0string
_ad_ecpmThe eCPM of the current ad that received exposure. (Raw currency: CNY)1.2206number
_currency_typeRevenue Currency Type (following ISO 4217)CNYstring
_is_renderedWhether the ad is filled successfully.
True: 1
False: 0
1number
_order_idThe order ID generated by the system for this purchase2.02111E+21 string
_pay_amountThe amount paid for this purchase (Unit: yuan)128string
_pay_typePayment methods, such as alipay, weixin, applepay, paypal, etc.applepaystring
_product_idPurchased item ID1700923511string
_product_namePurchased item name Package 1string
_product_numQuantity of items purchased 1number
_pay_statusPayment status
1: successful
2: failed
3: restored
1string
_abgroup_idTest ID in A/B testingstring
_abexp_idVersion ID in A/B testingstring
_bool_propertiesResolve bool type properties by calling "properties"Map
_str_propertiesResolve string type properties by calling "properties"Map
_dec_propertiesResolve decimal type properties by calling "properties"Map
_arr_propertiesResolve array type properties by calling "properties"Map
_date_propertiesResolve date type properties by calling "properties"Map
_fail_reasonThe reason of failureBANK_ERRORstring
_reg_typeRegistration typeWeChatstring
_login_typeLogin typeWeChatstring
_statusCompletion status of user behavior in the corresponding eventsuccessstring
_attribution_platformAttribution platform
_ipIP address (prioritize the value passed in, then parse through Header if necessary)1.119.176.34string
_countryCountry (parsed based on IP)CNstring
_country_codeCountry code (parsed based on IP)CNstring
_provinceProvince (parsed based on IP)bjstring
_cityCity (parsed based on IP)beijingstring
_ipv6IPv6392c:3e1:5158:f0ac:92ae:ed3:e852:4d42 string
_page_hostPage URL domain"xxx.com/a/a.action" extracted from "xxx.com/a/a.action?id=123"string
_referrer_hostPrevious page URL domain"xxx.com/a/a.action" extracted from "xxx.com/a/a.action?id=123"string
_element_idElement IDCollect elements with the "ID" property.string
_element_contentElement contentCollect text only, such as </span></a>.
It cannot be captured if the content is an image.
string
_element_nameElement nameCollect elements with the "name" property.string
_element_class_nameElement class nameCollect elements with the "class" property.string
_element_typeElement typebuttonstring
_element_target_urlElement target URLstring
_launch_sceneMini Program Launch Scene ID
_combination_idCombination ID, set as null if not captured6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4bstring
_group_id_listOnline parameter group ID list,
set as null if not captured
"124","431","412" array (string)
_enter_group_idOnline Parameter Group ID (The user's entered group ID is parsed by the server. If the requested parameters are default or not present in the configuration file, this value will be "null". The SDK needs to establish an agreement with the server on a specific field for transmitting the value.)
0number
_enter_group_statusUser device status when entering groupsnumber
_experiment_idExperiment ID
string
_experiment_group_idExperiment Group IDstring
_experiment_group_id_listExperiment Group ID Listarray (string)
_experiment_statusExperiment Status (whether debugging or not)decimal
_custom_idCustom attribute IDMap
_event_custom_idCustom event attribute IDMap
_user_custom_idCustom user attribute IDMap
_event_typeEvent Typedecimal
_report_typeEvent Typedecimal

Custom Event Properties

After defining custom events, you are also prompted to set up their properties according to the integration documentation for different platforms.

Note that the data type of custom event properties is determined by their data types reported for the first time and cannot be changed once confirmed.

Data Reporting Format Table

Data TypeDescriptionExample
numberRange from -9E15 to 9E15, without quotation marks.1234, 12.34
stringLimit 2KB. Numbers with quotation marks will also be identified as strings."diamond", "北京", "1234", "true"
date"yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss", or "yyyy-MM-dd 00:00:00""2023-12-25 12:34:56",
"2023-12-25 12:34:56.789",
"2023-12-25 00:00:00"
booleanTrue or false without quotation marks.true, false
arrayAll elements in an array will be converted into strings.["a","1","true"]

Predefined Event Properties

Predefined event properties include general event properties, custom event properties and properties specific to predefined events.

Here is an explanation of properties specific to predefined events.

1)_appImp

Field NameDescriptionExampleData TypeLimit
_ad_platformMonetization platforms, for example (value: name),
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
csjstringRequired
_ad_appidThe App ID on monetization platforms.5043562stringRequired
_mediation_platformMediation platforms, like GroMore and TopOn.
Record "custom" if no mediation platform is used.
gromorestringRequired
_ad_idThe Placement ID on monetization platforms.943508343stringRequired
_ad_typeAd types, for example (value: explanation),
1:Rewarded Video Ads
2:Splash Ads
3:Interstitial Ads
4:Full Screen Videos
5:Banner Ads
6:In-Feed Ads
7:Native Video Ads
8:Playable Ads
9:Pre-movie Ads
0:Other
1numberRequired
_ad_ecpmThe eCPM of the current ad that received exposure. (Raw currency: CNY)34.00numberRequired
_currency_typeRevenue Currency Type (following ISO 4217)CNYstringRequired
_is_renderedWhether the ad is filled successfully.truebooleanRequired

2)_appClick

Field NameDescriptionExampleData TypeLimit
_ad_platformMonetization platforms, for example (value: name),
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
csjstringRequired
_mediation_platformMediation platforms, like GroMore and TopOn.
Record "custom" if no mediation platform is used.
gromorestringRequired
_ad_idThe Placement ID on monetization platforms.943508343stringRequired
_ad_typeAd types, for example (value: explanation),
1:Rewarded Video Ads
2:Splash Ads
3:Interstitial Ads
4:Full Screen Videos
5:Banner Ads
6:In-Feed Ads
7:Native Video Ads
8:Playable Ads
9:Pre-movie Ads
0:Other
1numberRequired

3)_appPur

Field NameDescriptionExampleData TypeLimit
_order_idThe order ID generated by the system for this purchase 2021111918032157001921stringRequired
_pay_amountThe amount paid for this purchase (Unit: yuan) 128.00numberRequired
_currency_typeThe currency type of payment (following ISO 4217) CNYstringRequired
_pay_typePayment methods, such as alipay, weixin, applepay, paypal, etc. alipaystringRequired
_product_idPurchased item ID1700923511stringRequired
_product_namePurchased item namePackage 1stringRequired
_product_numQuantity of items purchased1numberRequired
_pay_statusPayment status
1: successful
2: failed
3: restored
1numberRequired
_fail_reasonReason for payment failureBANK_ERRORstringOptional

4)_appOrder

Field NameDescriptionExampleData TypeLimit
_order_idThe order ID generated by the system for this order2341242342676398724stringRequired
(Limit 128 characters)
_pay_amountThe payment amount of the order (Unit: yuan)128.00numberRequired
_currency_typeThe currency type of the order (following ISO 4217) CNYstringRequired
_pay_typePayment methods, such as alipay, weixin, applepay, paypal, etc.AlipaystringLimit 32 characters
_statusOrder statussuccessstringOptional

5)_appReg

Field NameDescriptionExampleData TypeLimit
_reg_typePayment methods, such as alipay, weixin, applepay, paypal, etc.WeChatstringRequired
(Limit 32 characters)
_statusRegistration StatussuccessstringOptional

6)_appLogin

Field NameDescriptionExampleData TypeLimit
_login_typeLogin type such as "WeChat", "QQ" and other custom valuesWeChatstringRequired
(Limit 32 characters)
_statusLogin statussuccessstring

7)_appAttr

Field Name DescriptionExampleData TypeLimit
_is_attrWhether self-attribute or not
true:yes
fales:no
truebooleanOptional
(send true if no value)
_adnetworkChannel ID (should match the channel ID in ROI analysis)toutiaostringRequired
_sub_channelSub-channels for advertising103300string
_adaccount_idAd account ID for advertising1655958321988611string
_adaccount_nameAd account name for advertisingxxx科技全量18string
_adcampaign_idAd campaign ID for advertising1680711982033293string
_adcampaign_nameAd campaign name for advertising小鸭快冲计划157-1024string
_adoffer_idAd offer ID for advertising1685219082855528string
_adoffer_nameAd offer name for advertising小鸭快冲单元406-1024string
_adcreative_idAd creative ID for advertising1680128668901378string
_adcreative_nameAd creative name for advertisingAuto create
20210901178921
string
_attribution_platformMonitoring platform stringRequired

Automatically Captured Event Properties

   Automatically captured event properties include general event properties, self-reported custom event properties, and predefined properties for the event.

1)_appViewScreen

Field NameDescription
_page_titleTitle of the current page
_page_nameAddress of the current page
_referrer_titleTitle of the previous page
_referrer_nameAddress of the previous page
_page_hostURL of the current page
_referrer_hostURL of the previous page
_combination_idCombination ID, set as null if no value obtained
_group_id_listGroup ID, set as null if no value obtained
_session_idSession ID, identifying app start to app exit

2)_appElementClick

Field Name Description
_element_idElement ID
_element_contentElement content
_element_nameElement name
_element_class_nameElement class name
_element_typeElement type
_element_target_urlElement target URL
_combination_idCombination ID, set as null if no value obtained
_group_id_listGroup ID, set as null if no value obtained
_session_idSession ID, identifying app start to app exit

First Time/Day Properties

When analyzing user behavior, we might pay more attention to events that occur on the first day after app installation, or for the first time after user acquisition regardless of whether it's on the first day or later. Therefore, we developed two more identifiers for each event: "_is_first_day" and "_is_first_time".

The value of these two identifiers is either true or false.

Data Reporting MethodEventAssignment MethodServer-Side Validation & Correction
SDK Data ReportingApp install, launch, purchase, ad impressionsSDK assignmentPerform validation & correction if the value is true. Do not perform any correction if the value is false.
Other events (including custom events)SDK assignmentSave directly without any correction.
API Data ReportingApp install, launch, purchase, ad impressionsDeveloper assignmentPerform validation & correction if the value is true. Do not perform any correction if the value is false.
Other events (including custom events)Developer assignmentSave directly without any correction.

As you can see, we will validate and correct the value of the two markers for certain important events like "_appInstall" based on the user data reported before, so that the markers can be more reliable.

If you decide to report data through API, the responsibility for value assignment accuracy and accountability lies with the developer.

Event Tracking Plan

Given the high complexity of user behavior and huge quantity of events, it is recommended that you and your team establish a unified event tracking plan document to standardize the process and maintain data consistency.

Event data can be reported through either SDK or API. The only difference between these two methods is that SDK automatically collects certain events for you, such as app install, launch and exit, while API requires you to create customized code for each event you want to track.

SDK/API integration is performed on an application level, so please use different AppKeys for different apps.

Considerations

  • Determine user identification method, such as user ID, or device ID.
  • Determine events, event properties, and event triggers.
  • Determine user properties.
  • Prioritize the implementation of event tracking.

Naming Conventions

In event tracking, custom event identifiers and custom property identifiers must adhere to the following naming conventions: they can consist of lowercase letters, numbers and underscores, but cannot begin with an underscore, contain spaces, or exceed 40 characters.

  • The data type of property values is determined by the format type used in the initial reporting. Subsequent reports will only accept inputs of the same type. Otherwise, the data will be considered erroneous and will not be stored in the database.
  • Event identifiers and property identifiers are for development personnel to use and should be filled in by technical staff.
  • For event triggers, it is recommended to align the calibration internally between operations and development personnel, and then fill in the information uniformly to ensure data consistency and accuracy.


Previous
Compliance Guidelines
Next
SDK & API
Last modified: 2025-08-06Powered by