@thinkingai/ae-cli 1.0.28 → 6.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -16
- package/README.zh.md +1 -16
- package/dist/{auth-H2376DEF.js → auth-DYC2BGLM.js} +2 -2
- package/dist/{auth-5NSDQFQB.js → auth-GHBMJ5ZR.js} +31 -12
- package/dist/{chunk-CLJF7MQA.js → chunk-2DUEAXV3.js} +1 -1
- package/dist/chunk-5OC7CYCG.js +98 -0
- package/dist/{chunk-SRJIAOBN.js → chunk-6W4QOZAL.js} +10 -0
- package/dist/{chunk-LU7SXK4Q.js → chunk-BJX3GXWC.js} +2 -2
- package/dist/{chunk-WCHI7725.js → chunk-DMMEPCST.js} +47 -6
- package/dist/{chunk-IMBKVXKY.js → chunk-EGEIXA2Z.js} +82 -10
- package/dist/{chunk-AD5V3ZPJ.js → chunk-I5CRVM2S.js} +98 -10
- package/dist/chunk-NOO24N7W.js +11 -0
- package/dist/{chunk-GSJGPNKK.js → chunk-PN3OS34E.js} +1 -1
- package/dist/{chunk-CAQYQA4R.js → chunk-RSHMZ3LG.js} +15 -1
- package/dist/{client-FCMK3XEK.js → client-2UJ63MVQ.js} +3 -3
- package/dist/{config-64G36TJL.js → config-NCUGK6NS.js} +3 -3
- package/dist/index.js +2549 -29
- package/dist/{model-EZ6K7FXI.js → model-SJSOZTRS.js} +5 -7
- package/dist/{raw-VEF3D6UD.js → raw-7NVWSVJP.js} +4 -4
- package/dist/{sync-NRODEVNH.js → sync-GRVO4K3U.js} +120 -23
- package/dist/{te-agent-7U7JLJKU.js → te-agent-KZRIEN4N.js} +468 -47
- package/dist/{te-analysis-A2OSGHQ4.js → te-analysis-VAR4KUOK.js} +145 -28
- package/dist/{te-audience-LI67PPGO.js → te-audience-KMKYI2YJ.js} +23 -14
- package/dist/{te-common-35WVU3C5.js → te-common-WNCZB7R7.js} +5 -4
- package/dist/{te-community-LEAP6PWT.js → te-community-JEEFXPB3.js} +11 -10
- package/dist/{te-dataops-N2LGZBOX.js → te-dataops-GD3XBYCS.js} +33 -32
- package/dist/{te-engage-H7C72Z46.js → te-engage-4XHCTS6I.js} +5 -4
- package/dist/{te-kb-I2OKTBAI.js → te-kb-B62KFP2A.js} +97 -7
- package/dist/{te-meta-HBTIEDRO.js → te-meta-EPZGQN56.js} +10 -9
- package/dist/{te-team-EM5OWRQL.js → te-team-YY24VORI.js} +16 -12
- package/dist/tracking/i18n/resources/cli/en.json +153 -0
- package/dist/tracking/i18n/resources/cli/ja.json +153 -0
- package/dist/tracking/i18n/resources/cli/ko.json +153 -0
- package/dist/tracking/i18n/resources/cli/zh.json +153 -0
- package/package.json +9 -3
- package/skills/ae-agent/SKILL.md +66 -26
- package/skills/ae-analysis/SKILL.md +108 -8
- package/skills/ae-analysis/references/cancel_query.md +39 -0
- package/skills/ae-analysis/references/drilldown_user_events.md +4 -2
- package/skills/ae-analysis/references/drilldown_users.md +4 -2
- package/skills/ae-analysis/references/get_bi_panel_detail.md +35 -0
- package/skills/ae-analysis/references/list_alerts.md +1 -1
- package/skills/ae-analysis/references/list_bi_panels.md +35 -0
- package/skills/ae-analysis/references/list_cluster_members.md +4 -1
- package/skills/ae-analysis/references/list_dashboards.md +1 -1
- package/skills/ae-analysis/references/list_entities.md +1 -1
- package/skills/ae-analysis/references/list_events.md +1 -1
- package/skills/ae-analysis/references/list_metrics.md +1 -1
- package/skills/ae-analysis/references/list_project_mark_times.md +1 -1
- package/skills/ae-analysis/references/list_properties.md +1 -1
- package/skills/ae-analysis/references/list_public_access_links.md +1 -1
- package/skills/ae-analysis/references/list_reports.md +1 -1
- package/skills/ae-analysis/references/list_tag_members.md +4 -1
- package/skills/ae-analysis/references/query_adhoc.md +6 -5
- package/skills/ae-analysis/references/query_bi_panel_data.md +58 -0
- package/skills/ae-analysis/references/query_dashboard_report_data.md +4 -1
- package/skills/ae-analysis/references/query_entity_details.md +5 -2
- package/skills/ae-analysis/references/query_event_details.md +4 -1
- package/skills/ae-analysis/references/query_report_data.md +2 -2
- package/skills/ae-analysis-global/SKILL.md +3 -1
- package/skills/ae-analysis-intent/SKILL.md +132 -0
- package/skills/ae-data-integration-helper/SKILL.md +242 -0
- package/skills/ae-data-integration-helper/references/android_sdk_faq.md +179 -0
- package/skills/ae-data-integration-helper/references/c_sdk_compilation.md +83 -0
- package/skills/ae-data-integration-helper/references/c_sdk_faq.md +416 -0
- package/skills/ae-data-integration-helper/references/cocoscreator_sdk_faq.md +123 -0
- package/skills/ae-data-integration-helper/references/cpp_server_sdk_faq.md +365 -0
- package/skills/ae-data-integration-helper/references/index.md +56 -0
- package/skills/ae-data-integration-helper/references/ios_sdk_faq.md +118 -0
- package/skills/ae-data-integration-helper/references/java_sdk_faq.md +406 -0
- package/skills/ae-data-integration-helper/references/javascript_sdk_faq.md +129 -0
- package/skills/ae-data-integration-helper/references/logbus2_guide.md +309 -0
- package/skills/ae-data-integration-helper/references/logbus2_parser_plugin.md +348 -0
- package/skills/ae-data-integration-helper/references/minigame_sdk_faq.md +115 -0
- package/skills/ae-data-integration-helper/references/miniprogram_sdk_faq.md +118 -0
- package/skills/ae-data-integration-helper/references/python_sdk_faq.md +232 -0
- package/skills/ae-data-integration-helper/references/restful_api_notes.md +74 -0
- package/skills/ae-data-integration-helper/references/sdk_log_guide.md +316 -0
- package/skills/ae-data-integration-helper/references/sdk_usage_notes.md +107 -0
- package/skills/ae-data-integration-helper/references/unity_sdk_faq.md +115 -0
- package/skills/ae-generate-tracking-code/SKILL.md +629 -0
- package/skills/ae-generate-tracking-code/references/autotrack-enum.md +183 -0
- package/skills/ae-generate-tracking-code/references/client-sdk-insert.md +202 -0
- package/skills/ae-generate-tracking-code/references/datax-config.md +43 -0
- package/skills/ae-generate-tracking-code/references/debug-script.md +102 -0
- package/skills/ae-generate-tracking-code/references/logbus-config.md +200 -0
- package/skills/ae-generate-tracking-code/references/modes.md +83 -0
- package/skills/ae-generate-tracking-code/references/restful-call.md +36 -0
- package/skills/ae-generate-tracking-code/references/sdk-index.md +128 -0
- package/skills/ae-generate-tracking-code/references/server-sdk-insert.md +206 -0
- package/skills/ae-generate-tracking-code/references/snippet-delivery.md +394 -0
- package/skills/ae-generate-tracking-code/references/te-api.md +181 -0
- package/skills/ae-generate-tracking-plan/SKILL.md +1083 -0
- package/skills/ae-generate-tracking-plan/references/autotrack-events.md +273 -0
- package/skills/ae-generate-tracking-plan/references/business-dimension-mapping.md +425 -0
- package/skills/ae-generate-tracking-plan/references/te-api.md +100 -0
- package/skills/ae-generate-tracking-plan/references/xlsx-schema.md +152 -0
- package/skills/ae-kb/SKILL.md +38 -5
- package/tracking-plan-template/MMO/346/211/213/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +104 -0
- package/tracking-plan-template/MMO/346/211/213/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/MMO/351/241/265/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v2.md +117 -0
- package/tracking-plan-template/MMO/351/241/265/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v2.xlsx +0 -0
- package/tracking-plan-template/RPG/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +72 -0
- package/tracking-plan-template/RPG/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/SLG/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +86 -0
- package/tracking-plan-template/SLG/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/Slots/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +80 -0
- package/tracking-plan-template/Slots/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/TE /345/237/213/347/202/271/347/244/272/344/276/213/346/250/241/346/235/277.md" +40 -0
- package/tracking-plan-template/TE /345/237/213/347/202/271/347/244/272/344/276/213/346/250/241/346/235/277.xlsx +0 -0
- package/tracking-plan-template/TE/345/256/230/346/226/271/346/250/241/346/235/277_dataTrackSample.md +40 -0
- package/tracking-plan-template/TE/345/256/230/346/226/271/346/250/241/346/235/277_dataTrackSample.xlsx +0 -0
- package/tracking-plan-template//344/274/221/351/227/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v2.md +92 -0
- package/tracking-plan-template//344/274/221/351/227/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v2.xlsx +0 -0
- package/tracking-plan-template//345/215/241/347/211/214/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +119 -0
- package/tracking-plan-template//345/215/241/347/211/214/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//345/241/224/351/230/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_V1.md +130 -0
- package/tracking-plan-template//345/241/224/351/230/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_V1.xlsx +0 -0
- package/tracking-plan-template//345/276/256/344/277/241/345/260/217/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +52 -0
- package/tracking-plan-template//345/276/256/344/277/241/345/260/217/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/215/225/351/261/274/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +68 -0
- package/tracking-plan-template//346/215/225/351/261/274/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/215/241/347/211/214/346/270/270/346/210/217_/345/237/213/347/202/271/346/250/241/347/211/210v1.md +108 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/215/241/347/211/214/346/270/270/346/210/217_/345/237/213/347/202/271/346/250/241/347/211/210v1.xlsx +0 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +119 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/346/226/227/345/234/260/344/270/273/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +63 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/346/226/227/345/234/260/344/270/273/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/351/272/273/345/260/206/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v2.md +101 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/351/272/273/345/260/206/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v2.xlsx +0 -0
- package/tracking-plan-template//347/224/265/345/225/206/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.md +84 -0
- package/tracking-plan-template//347/224/265/345/225/206/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//347/237/255/345/211/247/344/272/247/345/223/201/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.md +79 -0
- package/tracking-plan-template//347/237/255/345/211/247/344/272/247/345/223/201/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//347/244/276/344/272/244/350/201/212/345/244/251/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +105 -0
- package/tracking-plan-template//347/244/276/344/272/244/350/201/212/345/244/251/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//351/230/205/350/257/273/347/261/273APP/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +83 -0
- package/tracking-plan-template//351/230/205/350/257/273/347/261/273APP/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/wiki/te-docs/index.md +225 -0
- package/wiki/te-docs/raw/advanced-data-type/first-event-check.md +66 -0
- package/wiki/te-docs/raw/advanced-data-type/updated-event.md +87 -0
- package/wiki/te-docs/raw/advanced-data-type.md +16 -0
- package/wiki/te-docs/raw/data-ingestion-guide/about-gdpr.md +55 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/automatic-event-tracking.md +431 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/debugging-and-logging.md +49 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/multi-instance.md +66 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/preset-properties.md +466 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/third-party-integration.md +127 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced.md +513 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/release-notes.md +177 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android.md +228 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/c/c-advanced.md +419 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/c/release-notes.md +45 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/c.md +110 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/client-side-sdk-faq.md +52 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cpp/cpp-advanced.md +366 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cpp/release-notes.md +103 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cpp.md +201 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/compliance.md +26 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced/automatically-track-events.md +117 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced/preset-properties.md +52 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced.md +267 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/release-notes.md +82 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter.md +139 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/compliance.md +26 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced/automatically-track-events.md +121 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced/debugging-and-logging.md +54 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced/preset-properties.md +18 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced.md +305 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/release-notes.md +79 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native.md +137 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/release-notes.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/automatically-track-events.md +54 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/debugging-and-logging.md +53 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/multi-instance.md +42 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/preset-properties.md +119 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/support-native.md +81 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced.md +331 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app.md +156 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform.md +12 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/automatic-event-tracking.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/multi-instance.md +21 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/preset-properties.md +249 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced.md +301 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/release-notes.md +51 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x.md +281 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/automatic-event-tracking.md +70 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/debugging-and-logging.md +57 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/native-support.md +104 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/preset-properties.md +91 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance.md +374 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/compliance.md +35 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/release-notes.md +109 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator.md +170 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/compliance.md +28 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced/automatic-event-tracking.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced/debugging-and-logging.md +58 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced/preset-properties.md +43 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced.md +204 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/release-notes.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona.md +269 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/release-notes.md +177 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/automatic-event-tracking.md +119 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/multi-instance.md +50 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/native-pluggable.md +43 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/preset-properties.md +212 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/third-party-integration.md +77 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced.md +396 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity.md +176 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/release-notes.md +81 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/automatic-event-tracking.md +79 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/debugging-and-logging.md +31 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/preset-properties.md +25 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/third-party-integrations.md +141 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced.md +278 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal.md +190 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine.md +14 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/h5-and-app-sdk-connection.md +147 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/instant-app-and-game.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/automatic-event-tracking.md +272 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/debugging-and-logging.md +77 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/multi-instance.md +142 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/preset-properties.md +484 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/third-party-integrations.md +132 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced.md +682 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/release-notes.md +163 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios.md +304 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/compliance.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/automatic-event-tracking.md +136 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/debugging-and-logging.md +48 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/multi-instance.md +50 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/preset-properties.md +132 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced.md +462 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/release-notes.md +107 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript.md +208 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos/macos-advanced/debugging-and-logging.md +62 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos/macos-advanced/preset-properties.md +118 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos/macos-advanced.md +556 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos.md +231 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk.md +25 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools/filebeat-logstash-user-guide.md +610 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools/logbus2-user-guide.md +1215 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools/ta-datax-writer-plugin-user-guide.md +278 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools.md +15 -0
- package/wiki/te-docs/raw/data-ingestion-guide/privacy-policy.md +38 -0
- package/wiki/te-docs/raw/data-ingestion-guide/restful-api-user-guide.md +155 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/debugging-and-logging-FM9Cwz.md +37 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/debugging-and-logging-RSyfw7.md +41 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/debugging-and-logging.md +89 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/preset-properties-OxzWw.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/preset-properties-VuE3wr.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced-IauKwI.md +175 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced-YAilwk.md +210 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced.md +211 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/release-notes-PVazwa.md +62 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/release-notes-TADbwY.md +50 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/release-notes.md +69 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c-V2W3wv.md +131 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c-Zf9Jwl.md +179 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c.md +189 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/erlang-advanced/debugging-and-logging.md +38 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/erlang-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/erlang-advanced.md +113 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/release-notes.md +34 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang.md +155 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/golang-advanced/debugging-and-logging.md +42 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/golang-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/golang-advanced.md +157 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/release-notes.md +72 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang.md +148 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/java-advanced/debugging-and-logging.md +49 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/java-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/java-advanced.md +223 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/release-notes.md +88 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java.md +174 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/lua-advanced/debugging-and-logging.md +46 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/lua-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/lua-advanced.md +182 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/release-notes.md +61 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua.md +121 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/nodejs-advanced/debugging-and-logging.md +55 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/nodejs-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/nodejs-advanced.md +225 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/release-notes.md +45 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs.md +141 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/php-advanced/debugging-and-logging.md +41 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/php-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/php-advanced.md +216 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/release-notes.md +45 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php.md +173 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/python-advanced/debugging-and-logging.md +40 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/python-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/python-advanced.md +206 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/release-notes.md +51 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python.md +116 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/release-notes.md +44 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/ruby-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/ruby-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/ruby-advanced.md +189 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby.md +142 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk.md +22 -0
- package/wiki/te-docs/raw/data-ingestion-guide/thinkingdata-privacy-policy.md +37 -0
- package/wiki/te-docs/raw/data-ingestion-guide.md +48 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion/data-rules.md +396 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion/preset-properties-and-system-fields.md +957 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion/user-identification-rules.md +723 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion.md +203 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//345/220/210/350/247/204/346/214/207/345/215/227.md +96 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//346/233/264/346/226/260/346/227/245/345/277/227.md +97 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227//345/244/232/345/256/236/344/276/213.md +52 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +48 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +447 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227.md +370 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony.md +172 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//345/220/210/350/247/204/346/214/207/345/215/227.md +37 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//346/233/264/346/226/260/346/227/245/345/277/227.md +209 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//345/244/232/345/256/236/344/276/213.md +71 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +49 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +125 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +498 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227.md +612 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217.md +373 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//345/220/210/350/247/204/346/214/207/345/215/227.md +26 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//346/233/264/346/226/260/346/227/245/345/277/227.md +32 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +48 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +30 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +61 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227.md +236 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua.md +200 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//346/233/264/346/226/260/346/227/245/345/277/227.md +83 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227/native/346/224/257/346/214/201.md +66 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +54 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +62 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +358 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227.md +615 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret.md +166 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//346/233/264/346/226/260/346/227/245/345/277/227.md +87 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227/native/346/224/257/346/214/201.md +71 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +54 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +61 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +406 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227.md +597 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair.md +179 -0
- package/wiki/te-docs/schema.md +16 -0
- package/wiki/te-docs/synthesis/batch-ingest-comparison.md +324 -0
- package/wiki/te-docs/synthesis/js-sdk-cheatsheet.md +538 -0
- package/wiki/te-docs/synthesis/restful-api-reference.md +363 -0
- package/wiki/te-docs/synthesis/sdk-selection.md +372 -0
- package/wiki/te-docs/synthesis/server-sdk-overview.md +449 -0
- package/dist/chunk-KAEZTSXN.js +0 -99
- package/dist/chunk-OJDNO5QY.js +0 -63
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
---
|
|
2
|
+
code: csharp_sdk_advanced
|
|
3
|
+
name: "C#-Advanced"
|
|
4
|
+
wikiToken: Lx4bwX6lEiEdy7kLndmcs86JnSh
|
|
5
|
+
parentWikiToken: ENH2wrxtFicwM7koUgtcPsaCnOE
|
|
6
|
+
updateTime: 1774252000000
|
|
7
|
+
sourceUrl: https://docs-v2.thinkingdata.cn/?version=v6.0&lan=en-US&code=csharp_sdk_advanced
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1**. Managing User Identity**
|
|
11
|
+
SDK instances would use random UUID as the default distinct ID of each user by default, which would be used as the identity identification ID of users under an unlogged-in state. It should be noted that the distinct ID would change after the user reinstalled the App or use the APP with a new device.
|
|
12
|
+
### **1.1. Identify**
|
|
13
|
+
::: tip
|
|
14
|
+
Generally speaking, you do not need to customize a distinct ID. Please ensure that you understand [<text underline="true">User Identification Rules</text>](https://thinkingdata.feishu.cn/wiki/Pov9wECdsi2QQsk4NN9cEPsvnyc)<text color="purple" underline="true"> </text>before setting a distinct ID.
|
|
15
|
+
If you need to change the distinct ID, please call the API immediately after SDK is initialized. To avoid the generation of useless accounts, please do not call such a process multiple times.
|
|
16
|
+
:::
|
|
17
|
+
If your App has its own distinct ID management system for each user, you can call `SetIdentity` to set the distinct ID:
|
|
18
|
+
```csharp
|
|
19
|
+
TDAnalytics.SetDistinctId("Thinker");
|
|
20
|
+
TDAnalytics.GetDistinctId()
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### **1.2 Login**
|
|
24
|
+
When the users log in, `Login` could be called to set the account ID of the user. TE would use the account ID as the identity identification ID, and the account ID that has been set would be saved before `Log``o``ut` is called. The previous account ID would be replaced if `Login` has been called multiple times.
|
|
25
|
+
```csharp
|
|
26
|
+
TDAnalytics.Login("TA");
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
<quote-container>
|
|
30
|
+
**Login events wouldn't be uploaded in this method.**
|
|
31
|
+
</quote-container>
|
|
32
|
+
|
|
33
|
+
### **1.3 Removing Account ID**
|
|
34
|
+
After the user logs out, `Logout` could be called to remove the account ID. The distinct ID would be used as the identity identification ID before the next time `Login` is called.
|
|
35
|
+
```java
|
|
36
|
+
TDAnalytics.Logout();
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
It is recommended that you call logout upon explicit logout event. For example, call `Logout` when the user commits the behavior of canceling an account; do not call such a process when the App is closed.
|
|
40
|
+
<quote-container>
|
|
41
|
+
**Logout events wouldn't be uploaded in this method.**
|
|
42
|
+
</quote-container>
|
|
43
|
+
|
|
44
|
+
## **Sending Events**
|
|
45
|
+
After SDK is initialized, you can track user behaviour data. In general, ordinary events could meet business requirements. You can also use the First/Updatable Event based on your own service scenario.
|
|
46
|
+
### **2.1 Ordinary Events**
|
|
47
|
+
You can call `Track` to upload events. It is suggested that you set event properties based on the data tracking plan drafted previously. Here is an example of a user buying an item:
|
|
48
|
+
```csharp
|
|
49
|
+
Dictionary<string, Object> dic = new Dictionary<string, object>();
|
|
50
|
+
dic.Add("product_name", "product name");
|
|
51
|
+
TDAnalytics.Track( "product_buy",dic);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### **2.2 First Events**
|
|
55
|
+
The First Events refers to events that would only be recorded once for the ID of a certain device or other dimensions. For example, under certain scenarios, you may want to record the activation event on a certain device. In this case, you can perform data tracking with the First Event.
|
|
56
|
+
```csharp
|
|
57
|
+
Dictionary<string, Object> dic = new Dictionary<string, object>();
|
|
58
|
+
dic.Add("key", "value");
|
|
59
|
+
TDFirstEventModel firstEventModel = new TDFirstEventModel("device_activation", dic);
|
|
60
|
+
TDAnalytics.Track(firstEventModel);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
If you want to judge whether an event is the First Event from other dimensions, you can define a `first_check_id` for the First Event:
|
|
64
|
+
```csharp
|
|
65
|
+
Dictionary<string, Object> dic = new Dictionary<string, object>();
|
|
66
|
+
dic.Add("key", "value");
|
|
67
|
+
TDFirstEventModel firstEventModel = new TDFirstEventModel("device_activation", dic,"TA");
|
|
68
|
+
TDAnalytics.Track(firstEventModel);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
<quote-container>
|
|
72
|
+
Note: Since the server has to check whether the event is the First Event, the first event will be put in storage one hour later by default.
|
|
73
|
+
</quote-container>
|
|
74
|
+
|
|
75
|
+
### **2.3 Updatable Events**
|
|
76
|
+
You can meet the requirements for event data modification under specific scenarios through Updatable Events. The ID of Updatable Events should be specified and uploaded when the objects of Updatable Events are created. TE would determine the data to be updated according to the event name and event ID.
|
|
77
|
+
```csharp
|
|
78
|
+
//The event property status is 3 after reporting, with the price being 100
|
|
79
|
+
Dictionary<string, Object> dic = new Dictionary<string, object>();
|
|
80
|
+
dic.Add("price", 100);
|
|
81
|
+
dic.Add("status",3);
|
|
82
|
+
TDUpdatableEventModel updatableEventModel = new TDUpdatableEventModel("UPDATABLE_EVENT", dic, "updateEventId");
|
|
83
|
+
TDAnalytics.Track(updatableEventModel);
|
|
84
|
+
|
|
85
|
+
//The event property status is 5 after reporting, with the price remaining the same
|
|
86
|
+
Dictionary<string, Object> dic1 = new Dictionary<string, object>();
|
|
87
|
+
dic1.Add("status",5);
|
|
88
|
+
TDUpdatableEventModel updatableEventModel = new TDUpdatableEventModel("UPDATABLE_EVENT", dic1,"updateEventId");
|
|
89
|
+
TDAnalytics.Track(updatableEventModel);
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### **2.4 Overwritable Events**
|
|
93
|
+
Despite the similarity with Updatable Events, Overwritable Events would replace all historical data with the latest date. Looking from the perspective of effect, such a process is equivalent to the behavior of deleting the previous data while putting the latest data in storage. TE would determine the data to be updated according to the event name and event ID.
|
|
94
|
+
```csharp
|
|
95
|
+
// Instance: Assume the event name is OVERWRITE_EVENT when reporting an overwritable event
|
|
96
|
+
//The event property status is 3 after reporting, with the price being 100
|
|
97
|
+
Dictionary<string, Object> dic = new Dictionary<string, object>();
|
|
98
|
+
dic.Add("price", 100);
|
|
99
|
+
dic.Add("status",3);
|
|
100
|
+
TDOverwritableEventModel overwritableEventModel = new TDOverwritableEventModel("OVERWRITABLE_EVENT", dic,"eventId");
|
|
101
|
+
TDAnalytics.Track(overwritableEventModel);
|
|
102
|
+
|
|
103
|
+
//The event property status is 5 after reporting, with the price deleted
|
|
104
|
+
Dictionary<string, Object> dic1 = new Dictionary<string, object>();
|
|
105
|
+
dic1.Add("status",5);
|
|
106
|
+
TDOverwritableEventModel overwritableEventModel = new TDOverwritableEventModel("OVERWRITABLE_EVENT", dic1,"eventId");
|
|
107
|
+
TDAnalytics.Track(overwritableEventModel);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### **2.5 Common event properties**
|
|
111
|
+
Public event attributes refer to the attributes that are uploaded for each event.
|
|
112
|
+
#### 2.5.1 Static public event attributes
|
|
113
|
+
Static public event attributes are attributes that change infrequently and are carried by each event, such as user membership level. After setting static public event attributes through setSuperProperties, the SDK will obtain the set public event attributes as event attributes when collecting events.
|
|
114
|
+
```javascript
|
|
115
|
+
Dictionary<string, object> superProperties = new Dictionary<string, object>();
|
|
116
|
+
superProperties["vip_level"] = 2;
|
|
117
|
+
TDAnalytics.SetSuperProperties(superProperties);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Static public event attributes will be saved in the cache and do not need to be called every time the App is started. If the attribute already exists, the re-set attribute will overwrite the original attribute value; if the attribute did not exist before, a new attribute will be created. In addition to attribute settings, we also provide other APIs to manage static public event attributes to meet daily business needs.
|
|
121
|
+
```javascript
|
|
122
|
+
//Clear a public event property
|
|
123
|
+
TDAnalytics.UnsetSuperProperties("Channel");
|
|
124
|
+
//Clear all public event properties
|
|
125
|
+
TDAnalytics.ClearSuperProperties();
|
|
126
|
+
//Get all public event properties
|
|
127
|
+
var superProperties = TDAnalytics.GetSuperProperties();
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### 2.5.2 Dynamic public event attributes
|
|
131
|
+
Dynamic public event attributes are attributes that change frequently and are carried by each event, such as the number of gold coins of a user. After setting the dynamic public attribute class through SetDynamicSuperProperties, the SDK will automatically obtain the attributes when collecting events and add them to the triggered events.
|
|
132
|
+
```javascript
|
|
133
|
+
static Dictionary<string, object> GetDynamicSuperProperties()
|
|
134
|
+
{
|
|
135
|
+
return new Dictionary<string, object> { { "coin", 10 } };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
TDAnalytics.Init(config);
|
|
139
|
+
TDAnalytics.SetDynamicSuperProperties(GetDynamicSuperProperties);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 2.6 Recording event duration
|
|
143
|
+
If you need to record the duration of an event, you can call timeEvent to start timing. Configure the event name you want to time. When you upload the event, the #duration attribute will be automatically added to your event attributes to indicate the recorded duration in seconds. It should be noted that there can only be one task being timed for the same event name.
|
|
144
|
+
```javascript
|
|
145
|
+
//The user enters the product page and starts timing
|
|
146
|
+
TDAnalytics.TimeEvent("stay_shop");
|
|
147
|
+
/**do someting
|
|
148
|
+
.......
|
|
149
|
+
**/
|
|
150
|
+
//The user leaves the product page and the timing ends. The "stay_shop" event will have the attribute #duration indicating the duration of the event
|
|
151
|
+
TDAnalytics.Track("stay_shop");
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## **3. User Properties**
|
|
155
|
+
User property setting APIs supported by TE include: `UserSet`,`UserSetOnce`,`UserAdd`,`UserUnset`,`UserDelete`,`UserAppend`
|
|
156
|
+
### 3.1 UserSet
|
|
157
|
+
You can call `UserSet` to set general user properties. The original properties would be replaced if the properties uploaded via the API are used. The type of newly-created user properties must conform to that of the uploaded properties. User name setting is taken as the example here:
|
|
158
|
+
```csharp
|
|
159
|
+
//the username now is TA
|
|
160
|
+
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TA"}});
|
|
161
|
+
//the userName now is TE
|
|
162
|
+
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TE"}});
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 3.2 UserSetOnce
|
|
166
|
+
If the user property you want to upload only needs to be set once, you can call `UserSetOnce` to set the property. If such property had been set before, this message would be ignored. Let's take the setting of the first payment time as an example:
|
|
167
|
+
```csharp
|
|
168
|
+
//first_payment_time is 2018-01-01 01:23:45.678
|
|
169
|
+
TDAnalytics.UserSetOnce(new Dictionary<string, object>(){{"first_pay_time","2018-01-01 01:23:45.67"}});
|
|
170
|
+
//first_payment_time is still 2018-01-01 01:23:45.678
|
|
171
|
+
TDAnalytics.UserSetOnce(new Dictionary<string, object>(){{"first_pay_time","2018-12-31 01:23:45.678"}});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 3.3 UserAdd
|
|
175
|
+
When you want to upload numeric attributes for cumulative operation, you can call `UserAdd`.
|
|
176
|
+
If the property has not been set, it would be given a value of 0 before computing. A negative value could be uploaded, which is equivalent to subtraction operation. Let's take the accumulative payment amount as an example:
|
|
177
|
+
```csharp
|
|
178
|
+
//in this case, the total_revenue is 30
|
|
179
|
+
TDAnalytics.UserAdd(new Dictionary<string, object>(){{"total_revenue",30}});
|
|
180
|
+
//in this case, the total_revenue is 678
|
|
181
|
+
TDAnalytics.UserAdd(new Dictionary<string, object>(){{"total_revenue",648}})
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
<quote-container>
|
|
185
|
+
The set attribute key is a string, and the Value is only allowed to be a numeric value.
|
|
186
|
+
</quote-container>
|
|
187
|
+
|
|
188
|
+
### 3.4 UserUnset
|
|
189
|
+
When you need to clear the user properties of users, you can call `UserUnSet` to clear specific properties. `UserUnSet` would not create properties that have not been created in the cluster.
|
|
190
|
+
```csharp
|
|
191
|
+
List<string> list2 = new List<string>();
|
|
192
|
+
list2.Add("nickname");
|
|
193
|
+
list2.Add("age");
|
|
194
|
+
TDAnalytics.UserUnSet(list2);
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 3.5 UserDelete
|
|
198
|
+
You can call `UserDelete` to delete a user. After deleting the user, you would no longer be able to inquire about its user property, but could still obtain the events data triggered by the user.
|
|
199
|
+
```csharp
|
|
200
|
+
TDAnalytics.UserDelete();
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 3.6 UserAppend
|
|
204
|
+
You can call `UserAppend` to add user properties of array type.
|
|
205
|
+
```csharp
|
|
206
|
+
Dictionary<string, object> dictionary = new Dictionary<string, object>();
|
|
207
|
+
List<string> list6 = new List<string>();
|
|
208
|
+
list6.Add("true");
|
|
209
|
+
list6.Add("test");
|
|
210
|
+
dictionary.Add("arrkey4", list6);
|
|
211
|
+
TDAnalytics.UserAppend( dictionary);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Encryption function
|
|
215
|
+
Starting from v2.0.0-beta.1, SDK supports the use of AES+RSA to encrypt data. The data encryption function requires the cooperation of the client and the server. Please consult the customer success personnel for specific usage methods.
|
|
216
|
+
```javascript
|
|
217
|
+
TDConfig config = new TDConfig();
|
|
218
|
+
config.AppId = appid;
|
|
219
|
+
config.ServerUrl = server_url;
|
|
220
|
+
config.EnableEncrypt = true;
|
|
221
|
+
config.Version = 1;
|
|
222
|
+
config.PublicKey = "publickKey";
|
|
223
|
+
TDAnalytics.Init(config);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## **Others**
|
|
227
|
+
### **5****.1 Printing Log**
|
|
228
|
+
During the process of SDK integration, you can perform real-time debugging by checking SDK's logs in the IDE console or using the Debug feature of TE.
|
|
229
|
+
```cpp
|
|
230
|
+
// After enabling, the log will be viewed in the ta_event_log.txt file in the project root directory
|
|
231
|
+
TDAnalytics.EnableLogType(TDLogType.LogTxt);
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### **5****.2** **Preset Properties of All Events**
|
|
235
|
+
|
|
236
|
+
<lark-table rows="10" cols="4" column-widths="169,152,140,259">
|
|
237
|
+
|
|
238
|
+
<lark-tr>
|
|
239
|
+
<lark-td>
|
|
240
|
+
** Property name **
|
|
241
|
+
</lark-td>
|
|
242
|
+
<lark-td>
|
|
243
|
+
**Display name **
|
|
244
|
+
</lark-td>
|
|
245
|
+
<lark-td>
|
|
246
|
+
** Property type **
|
|
247
|
+
</lark-td>
|
|
248
|
+
<lark-td>
|
|
249
|
+
** Instruction **
|
|
250
|
+
</lark-td>
|
|
251
|
+
</lark-tr>
|
|
252
|
+
<lark-tr>
|
|
253
|
+
<lark-td>
|
|
254
|
+
#ip
|
|
255
|
+
</lark-td>
|
|
256
|
+
<lark-td>
|
|
257
|
+
IP address
|
|
258
|
+
</lark-td>
|
|
259
|
+
<lark-td>
|
|
260
|
+
Text
|
|
261
|
+
</lark-td>
|
|
262
|
+
<lark-td>
|
|
263
|
+
IP address of the user, based on which TE would get the geographical location of the user
|
|
264
|
+
</lark-td>
|
|
265
|
+
</lark-tr>
|
|
266
|
+
<lark-tr>
|
|
267
|
+
<lark-td>
|
|
268
|
+
#country
|
|
269
|
+
</lark-td>
|
|
270
|
+
<lark-td>
|
|
271
|
+
Country
|
|
272
|
+
</lark-td>
|
|
273
|
+
<lark-td>
|
|
274
|
+
Text
|
|
275
|
+
</lark-td>
|
|
276
|
+
<lark-td>
|
|
277
|
+
The country where the user is located; generated based on the IP address
|
|
278
|
+
</lark-td>
|
|
279
|
+
</lark-tr>
|
|
280
|
+
<lark-tr>
|
|
281
|
+
<lark-td>
|
|
282
|
+
#country_code
|
|
283
|
+
</lark-td>
|
|
284
|
+
<lark-td>
|
|
285
|
+
Country code
|
|
286
|
+
</lark-td>
|
|
287
|
+
<lark-td>
|
|
288
|
+
Text
|
|
289
|
+
</lark-td>
|
|
290
|
+
<lark-td>
|
|
291
|
+
The code of the country where the user is located (ISO 3166-1 alpha-2, two English characters in upper case); generated based on the IP address
|
|
292
|
+
</lark-td>
|
|
293
|
+
</lark-tr>
|
|
294
|
+
<lark-tr>
|
|
295
|
+
<lark-td>
|
|
296
|
+
#province
|
|
297
|
+
</lark-td>
|
|
298
|
+
<lark-td>
|
|
299
|
+
Province
|
|
300
|
+
</lark-td>
|
|
301
|
+
<lark-td>
|
|
302
|
+
Text
|
|
303
|
+
</lark-td>
|
|
304
|
+
<lark-td>
|
|
305
|
+
The province or state where the user is located; generated based on the IP address
|
|
306
|
+
</lark-td>
|
|
307
|
+
</lark-tr>
|
|
308
|
+
<lark-tr>
|
|
309
|
+
<lark-td>
|
|
310
|
+
#city
|
|
311
|
+
</lark-td>
|
|
312
|
+
<lark-td>
|
|
313
|
+
City
|
|
314
|
+
</lark-td>
|
|
315
|
+
<lark-td>
|
|
316
|
+
Text
|
|
317
|
+
</lark-td>
|
|
318
|
+
<lark-td>
|
|
319
|
+
The city where the user is located; generated based on the IP address
|
|
320
|
+
</lark-td>
|
|
321
|
+
</lark-tr>
|
|
322
|
+
<lark-tr>
|
|
323
|
+
<lark-td>
|
|
324
|
+
#os
|
|
325
|
+
</lark-td>
|
|
326
|
+
<lark-td>
|
|
327
|
+
OS
|
|
328
|
+
</lark-td>
|
|
329
|
+
<lark-td>
|
|
330
|
+
Text
|
|
331
|
+
</lark-td>
|
|
332
|
+
<lark-td>
|
|
333
|
+
E.g., Android, iOS, Mac OS, etc.
|
|
334
|
+
</lark-td>
|
|
335
|
+
</lark-tr>
|
|
336
|
+
<lark-tr>
|
|
337
|
+
<lark-td>
|
|
338
|
+
#device_id
|
|
339
|
+
</lark-td>
|
|
340
|
+
<lark-td>
|
|
341
|
+
Device ID
|
|
342
|
+
</lark-td>
|
|
343
|
+
<lark-td>
|
|
344
|
+
Text
|
|
345
|
+
</lark-td>
|
|
346
|
+
<lark-td>
|
|
347
|
+
The ID of the user device; IDFV or UUID of the user for iOS; androidID for Android
|
|
348
|
+
</lark-td>
|
|
349
|
+
</lark-tr>
|
|
350
|
+
<lark-tr>
|
|
351
|
+
<lark-td>
|
|
352
|
+
#lib
|
|
353
|
+
</lark-td>
|
|
354
|
+
<lark-td>
|
|
355
|
+
SDK type
|
|
356
|
+
</lark-td>
|
|
357
|
+
<lark-td>
|
|
358
|
+
Text
|
|
359
|
+
</lark-td>
|
|
360
|
+
<lark-td>
|
|
361
|
+
The type of the SDK to which you access, e.g., Android,iOS, etc.
|
|
362
|
+
</lark-td>
|
|
363
|
+
</lark-tr>
|
|
364
|
+
<lark-tr>
|
|
365
|
+
<lark-td>
|
|
366
|
+
#lib_version
|
|
367
|
+
</lark-td>
|
|
368
|
+
<lark-td>
|
|
369
|
+
SDK version
|
|
370
|
+
</lark-td>
|
|
371
|
+
<lark-td>
|
|
372
|
+
Text
|
|
373
|
+
</lark-td>
|
|
374
|
+
<lark-td>
|
|
375
|
+
The version of the SDK to which you access
|
|
376
|
+
</lark-td>
|
|
377
|
+
</lark-tr>
|
|
378
|
+
</lark-table>
|
|
379
|
+
|
|
380
|
+
### 5.3 Time Calibration
|
|
381
|
+
The SDK uses the local time as the event occurrence time by default. If the user manually modifies the device time and affects your business analysis, you can calibrate the time to ensure the accuracy of the event occurrence time. We provide a timestamp time calibration method.
|
|
382
|
+
- You can use the current timestamp obtained from the server to calibrate the SDK time. After that, all calls without a specified time, including event data and user attribute setting operations, will use the calibrated time as the occurrence time.
|
|
383
|
+
```javascript
|
|
384
|
+
// 1585633785954 is the current unix timestamp in milliseconds, corresponding to Beijing time 2020-03-31 13:49:45
|
|
385
|
+
TDAnalytics.CalibrateTime(1585633785954);
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
- You can also set automatic time calibration, after which the SDK will try to obtain the current time from the config interface and calibrate the SDK time. If the correct return result is not obtained, the local time will be used to report the data later.
|
|
389
|
+
```javascript
|
|
390
|
+
TDConfig config = new TDConfig();
|
|
391
|
+
config.AppId = appid;
|
|
392
|
+
config.ServerUrl = server_url;
|
|
393
|
+
config.EnableAutoCalibrated = true;
|
|
394
|
+
TDAnalytics.Init(config);
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### 5.4 Send data immediately
|
|
398
|
+
In some business scenarios, if you expect data to be reported to the TE server immediately, you can do so by calling the flush interface
|
|
399
|
+
```javascript
|
|
400
|
+
TDAnalytics.Flush();
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 5.5 Get device ID
|
|
404
|
+
You can get the device ID by calling getDeviceId:
|
|
405
|
+
```javascript
|
|
406
|
+
TDAnalytics.GetDeviceId();
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### 5.6 Set the default time zone
|
|
410
|
+
By default, the SDK uses the local time when the interface is called as the event occurrence time for reporting. You can also specify the default time zone by setting the default time zone interface, so that all events will be aligned with the time zone you set:
|
|
411
|
+
```javascript
|
|
412
|
+
TDConfig config = new TDConfig();
|
|
413
|
+
config.AppId = appid;
|
|
414
|
+
config.ServerUrl = server_url;
|
|
415
|
+
config.ZoneOffset = 5;
|
|
416
|
+
TDAnalytics.Init(config);
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Note: Aligning event times with a specified time zone will lose the device's local time zone information. If you need to keep the device's local time zone information, you currently need to add relevant attributes to the event yourself.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
code: client_csharp_sdk_release_note
|
|
3
|
+
name: "Release Notes"
|
|
4
|
+
wikiToken: Ob12wuqdUiupq4kKfBlcmSkPnUc
|
|
5
|
+
parentWikiToken: ENH2wrxtFicwM7koUgtcPsaCnOE
|
|
6
|
+
updateTime: 1774249215000
|
|
7
|
+
sourceUrl: https://docs-v2.thinkingdata.cn/?version=v6.0&lan=en-US&code=client_csharp_sdk_release_note
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## v2.0.1
|
|
11
|
+
**Date: 10/13/2025 **[**下载**](https%3A%2F%2Fdownload.thinkingdata.cn%2Fclient%2Fcsharp%2Ftd_analytics_csharp_client_v2.0.1.zip)
|
|
12
|
+
**Notes:**
|
|
13
|
+
- Known issues fixed
|
|
14
|
+
## v2.0.0
|
|
15
|
+
**Date: 10/09/2025 **[**下载**](https%3A%2F%2Fdownload.thinkingdata.cn%2Fclient%2Fcsharp%2Ftd_analytics_csharp_client_v2.0.0.zip)
|
|
16
|
+
**Notes:**
|
|
17
|
+
- Supports automatic time calibration
|
|
18
|
+
- Supports timing events
|
|
19
|
+
- Newly added encryption function
|
|
20
|
+
- Supports custom time zone function
|
|
21
|
+
## v1.3.0
|
|
22
|
+
**Date: 11/08/2023**
|
|
23
|
+
**Notes:**
|
|
24
|
+
- Code specifications and comment specifications
|
|
25
|
+
- Supports obtaining visitor ID
|
|
26
|
+
- Support timestamp calibration
|
|
27
|
+
- Get static public properties
|
|
28
|
+
- Add UserUniqAppend API
|
|
29
|
+
## v1.2.0
|
|
30
|
+
**Date: **04/06/2023
|
|
31
|
+
**Notes:**
|
|
32
|
+
- Optimize code
|
|
33
|
+
- Compatible with mac os
|
|
34
|
+
## v1.1.0
|
|
35
|
+
**Date:** 2022/09/27
|
|
36
|
+
**Notes:**
|
|
37
|
+
- Support for complex data types
|
|
38
|
+
- Standardize external API
|
|
39
|
+
## v1.0.0
|
|
40
|
+
**Date:** 2022/06/09
|
|
41
|
+
**Notes:**
|
|
42
|
+
- Support setting of visitor ID and user account
|
|
43
|
+
- Support event and user attribute reporting
|
|
44
|
+
- Support reporting of first, update and rewrite events
|
|
45
|
+
- Support Windows data reporting
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
code: csharp_client_sdk_installation
|
|
3
|
+
name: "C#"
|
|
4
|
+
wikiToken: ENH2wrxtFicwM7koUgtcPsaCnOE
|
|
5
|
+
parentWikiToken: KaFCwNeV3iRxjNkpT3QcDMg3n5V
|
|
6
|
+
updateTime: 1774251999000
|
|
7
|
+
sourceUrl: https://docs-v2.thinkingdata.cn/?version=v6.0&lan=en-US&code=csharp_client_sdk_installation
|
|
8
|
+
---
|
|
9
|
+
::: tip
|
|
10
|
+
Before you begin, please read [Preparations before Data Ingestion](https://thinkingdata.feishu.cn/wiki/OhD8we9iai6Xk5kM1QNc8ITRnQe)
|
|
11
|
+
Supported platforms: Windows.
|
|
12
|
+
:::
|
|
13
|
+
**Latest version:** 2.0.1
|
|
14
|
+
**Update time:** 10/13/2025
|
|
15
|
+
**Resource download: **[SDK Source Code](https%3A%2F%2Fgithub.com%2FThinkingDataAnalytics%2Fcsharp-client-sdk)
|
|
16
|
+
## 1. **SDK**** Integration**
|
|
17
|
+
### 1.1 Download SDK
|
|
18
|
+
Download Source Code from [GitHub](https%3A%2F%2Fgithub.com%2FThinkingDataAnalytics%2Fcsharp-client-sdk), add the files in the `TDAnalyticsSDK` directory to the project.
|
|
19
|
+
The SDK relies on `Newtonsoft.Json` for json parsing. If you are using `Visual Studio`, please use `NuGet` to add `Newtonsoft.Json` library.
|
|
20
|
+
### 1.2 Add dynamic library
|
|
21
|
+
- Download the dll and unzip it (you can download any one)
|
|
22
|
+
- [github link](https%3A%2F%2Fgithub.com%2FThinkingDataAnalytics%2Fcsharp-client-sdk%2Fblob%2Fmain%2Fdll%2Fta_csharp_sdk.zip)
|
|
23
|
+
- [official website link](https%3A%2F%2Fdownload.thinkingdata.cn%2Fclient%2Frelease%2Ftd_analytics_csharp_client.zip)
|
|
24
|
+
- For Windows platform, you can find the dll file in the windowswen folder and copy it to the project root directory. (Note: If the dll conflicts with the existing dll in the project, just use the existing one in the project)
|
|
25
|
+
<image token="VlfNbOkbdoVtTux2HEHcUhqpnxg" width="728" height="335" align="center"/>
|
|
26
|
+
|
|
27
|
+
- Mac platform
|
|
28
|
+
- Step 1: Install sqlite, curl, zlib, openssl through homebrew
|
|
29
|
+
- Step 2: Find the dll file in the macOS folder and copy it to the project root directory
|
|
30
|
+
<image token="U1rVbMHfToJZc3xPTcqcQ9RWndg" width="731" height="217" align="center"/>
|
|
31
|
+
|
|
32
|
+
## **2. Initialization**
|
|
33
|
+
```csharp
|
|
34
|
+
using ThinkingData.Analytics;
|
|
35
|
+
TDAnalytics.Init(APPID,SERVER_URL)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Instruction on parameters:
|
|
39
|
+
- `APPID`: The APP ID of your project, which can be found on the project management page of the TE.
|
|
40
|
+
- `SERVER_URL`:
|
|
41
|
+
- If you are using a SaaS version, please check the receiver URL on this page
|
|
42
|
+
<image token="OOXjbbcBioOIm8x1ZPMcYlCFnFr" width="1280" height="1007" align="center"/>
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
- If you use the private deployment version, you can customize the data tracking URL .
|
|
46
|
+
## **3. Common Features**
|
|
47
|
+
We suggested that you read [User Identification Rules](https://thinkingdata.feishu.cn/wiki/Pov9wECdsi2QQsk4NN9cEPsvnyc) before using common features; SDK would generate a random number that would be used as the distinct ID, and save the ID locally. Before the user logs in, the distinct ID would be used as the identification ID. Note: The distinct ID would change after the user reinstalled the App or used the APP with a new device.
|
|
48
|
+
### **3.1 Login**
|
|
49
|
+
When the users log in , `Login` could be called to set the account ID of the user. TE would use the account ID as the identification ID, and this ID would be saved before `Logout` is called. The previous account ID would be replaced if `Login` has been called multiple times.
|
|
50
|
+
```csharp
|
|
51
|
+
TDAnalytics.Login("TA");
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
<quote-container>
|
|
55
|
+
**Login events wouldn't be uploaded in this method.**
|
|
56
|
+
</quote-container>
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
### **3.2 Sending Events**
|
|
60
|
+
You can call `Track` to upload events. It is suggested that you set event properties based on the data tracking plan drafted previously. Here is an example of a user buying an item:
|
|
61
|
+
```csharp
|
|
62
|
+
Dictionary<string, object> dic = new Dictionary<string, object>();
|
|
63
|
+
dic.Add("channel", "te");//string
|
|
64
|
+
dic.Add("id", 618834);//number
|
|
65
|
+
dic.Add("isSuccess", true);//boolean
|
|
66
|
+
dic.Add("create_date", Convert.ToDateTime("2019-7-8 20:23:22"));//time
|
|
67
|
+
List<string> arr = new List<string>();
|
|
68
|
+
arr.Add("value");
|
|
69
|
+
dic.Add("arr", arr);//array
|
|
70
|
+
TDAnalytics.Track("product_buy", dic);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The event name is string type. It could only start with a character and could contain figures, characters, and an underline "_", with a maximum length of 50 characters.
|
|
74
|
+
### **3.2 User Properties**
|
|
75
|
+
You can set user properties by calling `UserSet` API. The original properties would be replaced by the properties uploaded via this API. The data type of newly-created user properties must be the same as the uploaded properties. User name setting is taken as the example here:
|
|
76
|
+
```csharp
|
|
77
|
+
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TA"}});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## **4. Best Practice**
|
|
81
|
+
The following sample code covers all the above-mentioned operations. It is recommended that the SDK be used in the following steps:
|
|
82
|
+
```csharp
|
|
83
|
+
using ThinkingData.Analytics;
|
|
84
|
+
|
|
85
|
+
TDAnalytics.Init(APPID,SERVER_URL)
|
|
86
|
+
//if the user has logged in, the account ID of the user could be set as the unique identifier
|
|
87
|
+
TDAnalytics.Login("TA");
|
|
88
|
+
//track
|
|
89
|
+
Dictionary<string, Object> dic = new Dictionary<string, object>();
|
|
90
|
+
dic.Add("channel", "te");//string
|
|
91
|
+
dic.Add("id", 618834);//number
|
|
92
|
+
dic.Add("isSuccess", true);//boolean
|
|
93
|
+
dic.Add("create_date", Convert.ToDateTime("2019-7-8 20:23:22"));//time
|
|
94
|
+
List<string> arr = new List<string>();
|
|
95
|
+
arr.Add("value");
|
|
96
|
+
dic.Add("arr", arr);//array
|
|
97
|
+
TDAnalytics.Track("product_buy", dic);
|
|
98
|
+
// object
|
|
99
|
+
Dictionary<string, object> json = new Dictionary<string, object>();
|
|
100
|
+
json.Add("key", "value");
|
|
101
|
+
dic.Add("object", json);
|
|
102
|
+
//array object
|
|
103
|
+
List<Dictionary<string, object>> arr1 = new List<Dictionary<string, object>>();
|
|
104
|
+
Dictionary<string, object> json1 = new Dictionary<string, object>();
|
|
105
|
+
json1.Add("key", "value");
|
|
106
|
+
arr1.Add(json1);
|
|
107
|
+
dic.Add("objects", arr1);
|
|
108
|
+
//Set user properties
|
|
109
|
+
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TA"}});
|
|
110
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
code: client_sdk_faq
|
|
3
|
+
name: "Client-side SDK FAQ"
|
|
4
|
+
wikiToken: YQC3wSRR2iGPkYkAHieczG6ZnJe
|
|
5
|
+
parentWikiToken: KaFCwNeV3iRxjNkpT3QcDMg3n5V
|
|
6
|
+
updateTime: 1774252003000
|
|
7
|
+
sourceUrl: https://docs-v2.thinkingdata.cn/?version=v6.0&lan=en-US&code=client_sdk_faq
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## **What is the client-side ****SDK**** tracking policy?**
|
|
11
|
+
Native client-side SDK (including Unity, Unreal, Flutter, etc. ) data would be stored in the local database firstly. Data tracking would be triggered under the following situations:
|
|
12
|
+
- App enters the background
|
|
13
|
+
- Track once every 30S (can be set in TA background)
|
|
14
|
+
- Trigger tracking when the number of cached data exceeds 30 items (can be set in TE)
|
|
15
|
+
- Call flush interface actively
|
|
16
|
+
Mini-program, mini-game SDK, and JavaScript SDK would be reported in real-time without local storage.
|
|
17
|
+
## **What is the value logic of the ****device ID****?**
|
|
18
|
+
The value logic of the device of native client-side SDK (including Unity, Unreal, Flutter, etc. ) is as follows:
|
|
19
|
+
- Android: Take Android ID as the value
|
|
20
|
+
For systems below Android 8.0, Android ID is the unique device identifier. It would only change after being re-flashed or reset. Shared by all apps. For systems of Android 8.0 or later versions, each combination of the app signature key, user, and the device has its unique ANDROID_ID value. Therefore, apps operating on the same device with different signature keys would no longer see the same Android ID (which also applies to the same user). A special condition: if the device on which the APP installed by the user is below 8.0, the APP was uninstalled later and reinstalled after the device was upgraded to 8.0, Android ID would become different. If the APP is not reinstalled, the Android ID would not change.
|
|
21
|
+
- iOS: obtain IDFV first. Use a random UUID if failed to obtain IDFV. The first device ID value would be stored in the key string and no longer change, although IDFC changes subsequently.
|
|
22
|
+
Mini-program, mini-game, and JavaScript interface could not obtain similar device numbers, with a random ID used as the device ID. If the user deletes the cache, the device ID would change.
|
|
23
|
+
## **What is the lowest system version supported by client-side ****SDK****?**
|
|
24
|
+
The lowest version supported by the client-side SDK is Android 4.0 and iOS 8.0
|
|
25
|
+
## **How to identify tracking problems?**
|
|
26
|
+
Common problems could be identified rapidly through client-side logs. We described how to enable client-side logs in various data ingestion guidance.
|
|
27
|
+
In Android, you can enable client-side logs by calling the `enableTrackLog` api. You can filter the logs of Android SDK through `ThinkingAnalytics`.
|
|
28
|
+
```java
|
|
29
|
+
ThinkingAnalyticsSDK.enableTrackLog(true);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
In iOS, you can enable log printing by calling `setLogLevel` and filter logs of iOS SDK through `THINKING`.
|
|
33
|
+
```objectivec
|
|
34
|
+
[ThinkingAnalyticsSDK setLogLevel:TDLoggingLevelDebug]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
After opening the logs, you can send the logs to our technical support engineer to help you identify the problem.
|
|
38
|
+
If you are not sure whether the receiver URL is correct, you can detect the accessibility of the receiver URL by inspecting the interface. Visit https://YOUR_RECEIVER_URL/health-check. If the page returns ok, it means the address of the receiving end is configured correctly.
|
|
39
|
+
Besides, with the functions of the [tracking management](https://thinkingdata.feishu.cn/wiki/K443wTChAiFc47kBz8ucXqVfnSf) module, you can also identify the problems related to data tracking swiftly.
|
|
40
|
+
## **What are the precautions for data tracking through Unity ****SDK****?**
|
|
41
|
+
1. The initialization of SDK is completed in Awake(). Therefore, the calling process could not be triggered in Awake
|
|
42
|
+
2. All the interfaces could only be called in the main thread by default.
|
|
43
|
+
3. We can tell whether the APP could enter the foreground or retreat to the background according to the life cycle of the components of the Android system. However, Unity could not ensure that the program could initialize SDK from the very beginning. Therefore, the first enable event could only be identified when the APP retreat to the background. Currently, we would supplement a ta_app_start (being tracked at a relatively late time) when the APP retreat to the background for the first time. However, the event time #event_time is correct and would not influence subsequent analysis)
|
|
44
|
+
## **What is the content of crash events? How to track crash events?**
|
|
45
|
+
|
|
46
|
+
The client-side SDK supports the tracking of some crash logs. It is necessary to enable auto-tracking of APP Crash after SDK initialization. The event name corresponding to the crash event is: ta_app_crash.
|
|
47
|
+
Conditions under which crash event tracking would be triggered:
|
|
48
|
+
- Android platform: no anomaly is captured in the virtual machine
|
|
49
|
+
- iOS platform:
|
|
50
|
+
- Unix signal anomalies include: SIGABRT, SIGILL, SIGSEGV, SIGFPE, SIGBUS
|
|
51
|
+
- NSException anomaly
|
|
52
|
+
- Tracking of C$ anomaly in the Unity engine
|