@thinkingai/ae-cli 1.0.30 → 6.0.16-1
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/dist/{auth-U25QJU5D.js → auth-DYC2BGLM.js} +2 -3
- package/dist/{auth-H3GJD55A.js → auth-GHBMJ5ZR.js} +33 -17
- package/dist/{chunk-CLJF7MQA.js → chunk-2DUEAXV3.js} +1 -1
- package/dist/{chunk-SF3KTPIC.js → chunk-5OC7CYCG.js} +2 -2
- package/dist/{chunk-SRJIAOBN.js → chunk-6W4QOZAL.js} +10 -0
- package/dist/{chunk-I42JGQ2J.js → chunk-BJX3GXWC.js} +3 -5
- package/dist/{chunk-GLNZSDKO.js → chunk-DMMEPCST.js} +4 -6
- package/dist/{chunk-VJFUB3H3.js → chunk-I5CRVM2S.js} +3 -3
- package/dist/{chunk-GSJGPNKK.js → chunk-PN3OS34E.js} +1 -1
- package/dist/{chunk-JM34JPCO.js → chunk-RSHMZ3LG.js} +178 -4
- package/dist/{client-IN42F223.js → client-2UJ63MVQ.js} +3 -4
- package/dist/{config-64G36TJL.js → config-NCUGK6NS.js} +3 -3
- package/dist/index.js +2530 -28
- package/dist/{model-VZCYNIOG.js → model-SJSOZTRS.js} +2 -2
- package/dist/{raw-WJIWC6YP.js → raw-7NVWSVJP.js} +5 -7
- package/dist/{sync-NVASAISS.js → sync-GRVO4K3U.js} +3 -3
- package/dist/{te-agent-YV4DXEXK.js → te-agent-KZRIEN4N.js} +468 -46
- package/dist/{te-analysis-CB3DA5I5.js → te-analysis-VAR4KUOK.js} +144 -29
- package/dist/{te-audience-W7SCQFC7.js → te-audience-KMKYI2YJ.js} +22 -15
- package/dist/{te-common-FBXVWBSI.js → te-common-WNCZB7R7.js} +4 -5
- package/dist/{te-community-LNVDZSGW.js → te-community-JEEFXPB3.js} +10 -11
- package/dist/{te-dataops-IPCSSWYH.js → te-dataops-GD3XBYCS.js} +11 -12
- package/dist/{te-engage-KARARMIR.js → te-engage-4XHCTS6I.js} +4 -5
- package/dist/{te-kb-2Z2CARN3.js → te-kb-B62KFP2A.js} +96 -8
- package/dist/{te-meta-PDKLMWXN.js → te-meta-EPZGQN56.js} +9 -10
- package/dist/{te-team-SW5B7DHO.js → te-team-YY24VORI.js} +6 -7
- 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 +65 -25
- 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-U6TKB3IV.js +0 -171
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Android SDK FAQ"
|
|
3
|
+
code: "android_sdk_faq"
|
|
4
|
+
source: "Feishu MCP"
|
|
5
|
+
doc_id: "wikcnVrL8nNo5bwytvIVde3MT8e"
|
|
6
|
+
fetched_at: "2026-04-20T17:29:37Z"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 集成 SDK
|
|
10
|
+
## 集成方式
|
|
11
|
+
- Android SDK 支持自动集成 gradle 和 手动集成 aar 两种接入方式。
|
|
12
|
+
### gradle 方式导入
|
|
13
|
+
- 在 `Project` 级别的 `build.gradle` 文件中添加如下配置依赖
|
|
14
|
+
```json
|
|
15
|
+
buildscript {
|
|
16
|
+
repositories {
|
|
17
|
+
jcenter()
|
|
18
|
+
mavenCentral()
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- 在 `Module` 工程目录下的 `build.gradle`文件中添加依赖项:
|
|
24
|
+
```java
|
|
25
|
+
dependencies {
|
|
26
|
+
implementation 'cn.thinkingdata.android:ThinkingAnalyticsSDK:2.8.3'
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 本地 aar 导入
|
|
31
|
+
参见官方文档。
|
|
32
|
+
|
|
33
|
+
## 兼容性说明
|
|
34
|
+
- Android SDK 兼容最低版本 Android 4.0
|
|
35
|
+
- `minSdkVersion 14`
|
|
36
|
+
|
|
37
|
+
# 初始化
|
|
38
|
+
## 推荐初始化位置
|
|
39
|
+
- 建议在用户同意隐私协议后再进行 SDK 初始化,详见 ThinkingData 官方文档中的《合规指南》部分。
|
|
40
|
+
```json
|
|
41
|
+
// 根据隐私协议判断是否开启数据采集
|
|
42
|
+
if (授权隐私政策) {
|
|
43
|
+
TDAnalytics.init(this, APPID, SERVER_URL);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 初始化方式一:其它配置默认,只需要传入 APPID 和 SERVER_URL 就可以
|
|
48
|
+
```java
|
|
49
|
+
// 在主线程中初始化 SDK
|
|
50
|
+
TDAnalytics.init(this, APPID, SERVER_URL);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 初始化方式二:根据 config 自定义一些参数配置
|
|
54
|
+
- 模式设置
|
|
55
|
+
- config.setMode(TDConfig.TDMode.NORMAL);
|
|
56
|
+
- config.setMode(TDConfig.TDMode.DEBUG);
|
|
57
|
+
- config.setMode(TDConfig.TDMode.DEBUG_ONLY);
|
|
58
|
+
- 模式时区设置
|
|
59
|
+
- config.setDefaultTimeZone(TimeZone.getDefault());
|
|
60
|
+
- 是否开启多进程
|
|
61
|
+
- config.setMutiprocess(true);
|
|
62
|
+
- 是否开启加密
|
|
63
|
+
- config.enableEncrypt(true)
|
|
64
|
+
```java
|
|
65
|
+
TDConfig config = TDConfig.getInstance(this, APPID, TE_SERVER_URL);
|
|
66
|
+
TDAnalytics.init(config);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
# 上报模式
|
|
70
|
+
## NORMAL
|
|
71
|
+
- 在 Normal 模式下,数据会首先进入缓存,之后根据配置的上报规则进行批量上报,上报成功后数据会入库。
|
|
72
|
+
|
|
73
|
+
## DEBUG
|
|
74
|
+
- 在 Debug 模式下,数据会立即逐条上报。上报成功后数据会入库。
|
|
75
|
+
- 如果上报失败,SDK 会采取降级处理,将 Debug 模式降级为 Normal 模式并且将失败数据缓存到本地。
|
|
76
|
+
- 需要在应用程序中配置设备白名单。
|
|
77
|
+
|
|
78
|
+
## DEBUG_ONLY
|
|
79
|
+
- 在 DebugOnly 模式下,数据会立即逐条上报并且数据不会入库,如果上报失败,数据就会丢失。
|
|
80
|
+
- 没有配置白名单不会自动切换到 NORMAL 模式。
|
|
81
|
+
|
|
82
|
+
> 注意:
|
|
83
|
+
> - 在正式上线时,建议避免使用 debug 或 debug_only 模式
|
|
84
|
+
> - debug 模式下如果没有 TE 后台配置白名单会切换成 NORMAL 模式
|
|
85
|
+
> - debug_only 不会自动切换成 NORMAL 模式
|
|
86
|
+
|
|
87
|
+
# 上报策略
|
|
88
|
+
- normal 模式默认 30 秒或者 30 条满足上报一次,TE 项目管理可以设置修改
|
|
89
|
+
- debug / debug_only 模式事件会立即上报
|
|
90
|
+
- 手动调用 flush() 接口,会立即上报缓存数据
|
|
91
|
+
- 自动采集事件会立刻上报
|
|
92
|
+
- 每个请求上限为 50 条数据
|
|
93
|
+
|
|
94
|
+
# 缓存机制
|
|
95
|
+
- 非 debug、debug_only 模式,数据会先缓存本地数据库,然后按策略发送
|
|
96
|
+
- 默认本地缓存条数 1 万条,超过就会开始丢弃前面的数据
|
|
97
|
+
- SDK 2.8.2 版本之前默认缓存 15 天,2.8.2 开始默认缓存 10 天
|
|
98
|
+
- 可通过 ta_public_config.xml 配置缓存天数和条数
|
|
99
|
+
|
|
100
|
+
# 自动采集
|
|
101
|
+
## ta_app_install
|
|
102
|
+
### 触发条件以及时机
|
|
103
|
+
- 开启了 install 事件自动采集
|
|
104
|
+
- 初始化 SDK 时判断 firstInstallTime
|
|
105
|
+
|
|
106
|
+
## ta_app_start
|
|
107
|
+
### 触发条件以及时机
|
|
108
|
+
- 开启了 ta_app_start 事件自动采集
|
|
109
|
+
- App 启动或者 App 从后台回到前台
|
|
110
|
+
|
|
111
|
+
## ta_app_end
|
|
112
|
+
### 触发条件以及时机
|
|
113
|
+
- 开启了 end 事件自动采集
|
|
114
|
+
- App 退出或者切换到后台,或者闪退
|
|
115
|
+
|
|
116
|
+
## ta_app_crash
|
|
117
|
+
### 触发条件以及时机
|
|
118
|
+
- 开启了 crash 事件的自动采集
|
|
119
|
+
- App 闪退的时候触发
|
|
120
|
+
|
|
121
|
+
## ta_app_view
|
|
122
|
+
### 触发条件以及时机
|
|
123
|
+
- 开启了 view 事件的自动采集
|
|
124
|
+
- Activity 或者 fragment 的页面显示的时候
|
|
125
|
+
|
|
126
|
+
## ta_app_click
|
|
127
|
+
### 触发条件以及时机
|
|
128
|
+
- 开启了 click 事件的自动采集
|
|
129
|
+
- 点击页面的控件
|
|
130
|
+
- 需要接入全埋点插件
|
|
131
|
+
|
|
132
|
+
# 预置属性
|
|
133
|
+
## 设备 ID #device_id
|
|
134
|
+
- 获取 AndroidID 或者随机生成的
|
|
135
|
+
- 什么情况下会变:应用多开、拿不到 androidId 并卸载重装、刷机或更换包名
|
|
136
|
+
|
|
137
|
+
## 模拟器 #simulator
|
|
138
|
+
- 根据 Android 的 SystemProperties 来判断
|
|
139
|
+
|
|
140
|
+
## 内存 #ram
|
|
141
|
+
- 获取的是可用内存和总内存大小
|
|
142
|
+
|
|
143
|
+
## 运营商 #carrier
|
|
144
|
+
- 部分应用市场反馈安全检测存在未申请权限获取运营商的情况,可屏蔽该字段
|
|
145
|
+
|
|
146
|
+
## 网络类型 #network_type
|
|
147
|
+
- 事件发生时无网络则为 NULL
|
|
148
|
+
|
|
149
|
+
## 访客 ID #distinct_id
|
|
150
|
+
- 默认系统 UUID 方式生成,存本地
|
|
151
|
+
- 卸载重装会变
|
|
152
|
+
|
|
153
|
+
# 公共属性
|
|
154
|
+
## 静态公共属性
|
|
155
|
+
- 方法名 setSuperProperties
|
|
156
|
+
- 把设置的属性存在本地 SharedPreferences
|
|
157
|
+
|
|
158
|
+
## 动态公共属性
|
|
159
|
+
- 方法名 setDynamicSuperPropertiesTracker
|
|
160
|
+
- 每次 track 的时候会带上这个回调回来的属性
|
|
161
|
+
|
|
162
|
+
# 数据加密
|
|
163
|
+
- 默认是先 gzip 然后 base64 处理
|
|
164
|
+
- 2.8.0 开始也可以选择开启非对称加密
|
|
165
|
+
- 加密只对 normal 模式生效
|
|
166
|
+
|
|
167
|
+
# 通用问题
|
|
168
|
+
## 数据上报失败
|
|
169
|
+
- 检查上报地址和 appid 是否正确
|
|
170
|
+
- {上报地址}/check_appid?appid={appid} 返回 0 表示正常
|
|
171
|
+
- 服务异常
|
|
172
|
+
- {上报地址}/health_check 返回 ok 表示正常
|
|
173
|
+
|
|
174
|
+
## 部分用户没有事件上报
|
|
175
|
+
- 查看上报地址是否使用 https 协议,安卓 9.0 以上默认不支持 http
|
|
176
|
+
- 初始化 SDK 是否有逻辑判断,有情况没有初始化
|
|
177
|
+
|
|
178
|
+
# 已知问题
|
|
179
|
+
详见文档完整内容。
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
项目编译需要安装 `cmake`、`make`,建议使用较新的稳定版本。静态库编译时的目标架构必须和项目编译时采用的架构保持一致,例如 `ARM` 或 `x86_64`。当前仓库 `master` 分支默认要求 `CMake 3.12` 及以上版本。需要特别注意:SDK 对 C 标准的兼容性是按 Consumer 区分的,不是所有模式都统一兼容同一个 C 标准。
|
|
2
|
+
|
|
3
|
+
## 一、源码编译
|
|
4
|
+
|
|
5
|
+
本次源码编译环境采用:CentOS 9.7(x86_64)Make 4.3(x86_64)CMake 3.26.5(x86_64)
|
|
6
|
+
|
|
7
|
+
### 下载项目
|
|
8
|
+
|
|
9
|
+
```shell
|
|
10
|
+
git clone https://github.com/ThinkingDataAnalytics/c-sdk.git
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### 修改 CMakeLists.txt 文件
|
|
14
|
+
|
|
15
|
+
进入项目文件夹后,按实际需要修改 `CMakeLists.txt`。当前仓库中包含四种 Consumer 的编译配置,但默认只启用了 `logging_consumer`;其他 Consumer 配置块默认是注释状态。
|
|
16
|
+
|
|
17
|
+
生产环境建议一次只保留一种 Consumer 配置,避免生成多个模式的库文件后在接入时发生混淆。
|
|
18
|
+
|
|
19
|
+
当前 `master` 分支中各 Consumer 对应的 C 标准和依赖如下:
|
|
20
|
+
|
|
21
|
+
| Consumer | 当前脚本中的 C 标准 | 额外依赖 | 说明 |
|
|
22
|
+
|----------|---------------------|----------|------|
|
|
23
|
+
| `logging_consumer` | Windows/非 Windows 都是 `C89` | Windows 需要 `pcre` | 默认启用,正式环境推荐 |
|
|
24
|
+
| `batch_consumer` | Windows/非 Windows 都是 `C99` | `curl` | 适合中小流量场景 |
|
|
25
|
+
| `debug_consumer` | Windows/非 Windows 都是 `C99` | `curl` | 仅用于调试,不建议生产使用 |
|
|
26
|
+
| `async_batch_consumer` | Windows 是 `C99`;非 Windows 是 `C89` | `curl`,非 Windows 还需要 `pthread` | 历史异步直传模式 |
|
|
27
|
+
|
|
28
|
+
因此,"最新版 SDK 兼容 `C89`"这句话只适用于默认的 `logging_consumer`,不能直接推广到所有 Consumer。
|
|
29
|
+
|
|
30
|
+
### 生成 Makefile 文件
|
|
31
|
+
|
|
32
|
+
`CMakeLists.txt` 修改完成后,在项目根目录执行如下命令。命令成功后会生成 `Makefile`。
|
|
33
|
+
|
|
34
|
+
```shell
|
|
35
|
+
cmake CMakeLists.txt
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 生成静态库文件
|
|
39
|
+
|
|
40
|
+
在 `Makefile` 同级目录执行如下命令:
|
|
41
|
+
|
|
42
|
+
```shell
|
|
43
|
+
make
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
需要注意:
|
|
47
|
+
|
|
48
|
+
- 默认情况下,只会生成当前启用的 Consumer 对应静态库。
|
|
49
|
+
- 如果手动把四段 Consumer 配置全部打开,理论上会生成四个静态库文件,但生产环境不建议这样做。
|
|
50
|
+
- 当前仓库中的典型库文件命名如下:
|
|
51
|
+
- `libthinkingdata.a`:写日志文件模式,对应 `logging_consumer`
|
|
52
|
+
- `libthinkingDataAsyncBatch.a`:异步上报模式,对应 `async_batch_consumer`
|
|
53
|
+
- `libthinkingDataBatch.a`:批量上报模式,对应 `batch_consumer`
|
|
54
|
+
- `libthinkingDataDebug.a`:调试上报模式,对应 `debug_consumer`
|
|
55
|
+
|
|
56
|
+
## 二、常见问题
|
|
57
|
+
|
|
58
|
+
### 编译 c-sdk 源码报错:curl/curl.h: No such file or directory
|
|
59
|
+
|
|
60
|
+
原因:除 `logging_consumer` 之外,其余直传类 Consumer 都依赖第三方库 `curl`;如果系统中未安装 curl 开发库,就会报这个错误。
|
|
61
|
+
|
|
62
|
+
解决:CentOS 系统安装 curl 开发库:`sudo yum install libcurl-devel`
|
|
63
|
+
|
|
64
|
+
### 项目链接静态库报错:lib/libthinkingDataBatch.a(http_client.c.o): In function `ta_http_post`:
|
|
65
|
+
|
|
66
|
+
原因:`batch_consumer`、`debug_consumer`、`async_batch_consumer` 都会链接 `curl`;如果业务项目链接阶段没有显式带上 `curl`,就会出现相关符号找不到的问题。
|
|
67
|
+
|
|
68
|
+
解决:项目编译时用 `-l` 指定链接 `curl`,例如:`gcc demo.c -o demo -lcurl`
|
|
69
|
+
|
|
70
|
+
### 使用 AsyncBatchConsumer 模式项目编译报错:/usr/bin/ld: lib/libthinkingDataAsyncBatch.a(async_batch_consumer.c.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
|
|
71
|
+
|
|
72
|
+
原因:`AsyncBatchConsumer` 为异步上报模式,非 Windows 环境下除了 `curl` 之外还依赖 `pthread`。如果业务项目链接时没有显式链接线程库,就会报这个错误。
|
|
73
|
+
|
|
74
|
+
解决:项目编译时同时指定 `curl` 和 `pthread`,例如:`gcc demo.c -o demo -lcurl -lpthread`
|
|
75
|
+
|
|
76
|
+
### 到底该如何理解 C 标准兼容性?
|
|
77
|
+
|
|
78
|
+
如果你是新项目接入方,可以按下面的方式理解:
|
|
79
|
+
|
|
80
|
+
1. 如果使用默认推荐的 `logging_consumer`,当前仓库脚本按 `C89` 编译。
|
|
81
|
+
2. 如果使用 `batch_consumer` 或 `debug_consumer`,当前仓库脚本按 `C99` 编译。
|
|
82
|
+
3. 如果使用 `async_batch_consumer`,当前仓库脚本在不同平台上的 C 标准配置并不完全一致,不能简单概括为统一兼容 `C89` 或统一兼容 `C99`。
|
|
83
|
+
4. 所以在文档、FAQ 或客户答复中,更准确的表述应当是"兼容性与所选 Consumer 有关",不要直接笼统写成"整个 SDK 统一兼容 `C89`"。
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
本文按 C SDK v2.0.0 正式版整理,示例统一使用 `td_` 前缀 API。旧版 `ta_*` 接口、`ta_user_del()` 等命名仅适用于 1.x 历史项目;新项目请不要继续使用旧接口名。
|
|
2
|
+
|
|
3
|
+
推荐方案为 `logging_consumer + LogBus`。`batch_consumer` 仍可用于特定场景,但存在内存缓存丢数风险;`debug_consumer` 仅用于接入调试;`async_batch_consumer` 属于历史兼容方案,新项目不再推荐。
|
|
4
|
+
|
|
5
|
+
# 一、环境配置
|
|
6
|
+
|
|
7
|
+
当前正式版为 `v2.0.0`,源码下载地址:[源代码](https://github.com/ThinkingDataAnalytics/c-sdk)。如需从源码编译,请参考服务端C-SDK编译流程。新建 C 项目后,将 SDK 头文件和编译产物引入工程。
|
|
8
|
+
|
|
9
|
+
```c
|
|
10
|
+
#include <thinkingdata.h>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
#### logging_consumer样例代码
|
|
14
|
+
|
|
15
|
+
```c
|
|
16
|
+
#include <stdio.h>
|
|
17
|
+
#include <string.h>
|
|
18
|
+
#include <time.h>
|
|
19
|
+
|
|
20
|
+
#include <thinkingdata.h>
|
|
21
|
+
|
|
22
|
+
int main(void) {
|
|
23
|
+
struct TDAnalytics *ta = NULL;
|
|
24
|
+
struct TDConsumer *consumer = NULL;
|
|
25
|
+
TDConfig *config = td_init_config();
|
|
26
|
+
TDProperties *properties = NULL;
|
|
27
|
+
const char *log_directory = "./log";
|
|
28
|
+
const char *account_id = "user_10001";
|
|
29
|
+
const char *distinct_id = "device_10001";
|
|
30
|
+
|
|
31
|
+
if (config == NULL) {
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
TD_ASSERT(TD_OK == td_add_string("file_path", log_directory, strlen(log_directory), config));
|
|
36
|
+
TD_ASSERT(TD_OK == td_add_int("rotate_mode", HOURLY, config));
|
|
37
|
+
TD_ASSERT(TD_OK == td_add_int("file_size", 1024, config));
|
|
38
|
+
|
|
39
|
+
if (TD_OK != td_init_consumer(&consumer, config)) {
|
|
40
|
+
td_free_properties(config);
|
|
41
|
+
fprintf(stderr, "Failed to initialize consumer.\n");
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
td_free_properties(config);
|
|
45
|
+
|
|
46
|
+
if (TD_OK != td_init(consumer, &ta)) {
|
|
47
|
+
td_consumer_free(consumer);
|
|
48
|
+
fprintf(stderr, "Failed to initialize SDK.\n");
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
properties = td_init_properties();
|
|
53
|
+
if (properties == NULL) {
|
|
54
|
+
td_free(ta);
|
|
55
|
+
td_consumer_free(consumer);
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
TD_ASSERT(TD_OK == td_add_string("#ip", "192.168.1.1", strlen("192.168.1.1"), properties));
|
|
60
|
+
TD_ASSERT(TD_OK == td_add_string("channel", "logbus", strlen("logbus"), properties));
|
|
61
|
+
TD_ASSERT(TD_OK == td_add_int("amount", 30, properties));
|
|
62
|
+
TD_ASSERT(TD_OK == td_add_bool("is_success", TD_TRUE, properties));
|
|
63
|
+
TD_ASSERT(TD_OK == td_add_date("pay_time", time(NULL), 0, properties));
|
|
64
|
+
|
|
65
|
+
TD_ASSERT(TD_OK == td_track(account_id, distinct_id, "order_paid", properties, ta));
|
|
66
|
+
|
|
67
|
+
td_free_properties(properties);
|
|
68
|
+
td_free(ta);
|
|
69
|
+
td_consumer_free(consumer);
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### batch_consumer样例代码
|
|
75
|
+
|
|
76
|
+
> `batch_consumer` 适用于中小数据量、链路稳定且可以接受内存缓存的场景。新项目仍然优先推荐 `logging_consumer + LogBus`。
|
|
77
|
+
|
|
78
|
+
```c
|
|
79
|
+
#include <stdio.h>
|
|
80
|
+
#include <string.h>
|
|
81
|
+
#include <time.h>
|
|
82
|
+
|
|
83
|
+
#include <thinkingdata.h>
|
|
84
|
+
|
|
85
|
+
int main(void) {
|
|
86
|
+
struct TDAnalytics *ta = NULL;
|
|
87
|
+
struct TDConsumer *consumer = NULL;
|
|
88
|
+
TDConfig *config = td_init_config();
|
|
89
|
+
TDProperties *properties = NULL;
|
|
90
|
+
const char *appid = "APPID";
|
|
91
|
+
const char *server_url = "https://receiver.example.com";
|
|
92
|
+
|
|
93
|
+
if (config == NULL) {
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
TD_ASSERT(TD_OK == td_add_string("push_url", server_url, strlen(server_url), config));
|
|
98
|
+
TD_ASSERT(TD_OK == td_add_string("appid", appid, strlen(appid), config));
|
|
99
|
+
TD_ASSERT(TD_OK == td_add_int("batch_size", 20, config));
|
|
100
|
+
TD_ASSERT(TD_OK == td_add_int("max_cache_size", 50, config));
|
|
101
|
+
|
|
102
|
+
if (TD_OK != td_init_consumer(&consumer, config)) {
|
|
103
|
+
td_free_properties(config);
|
|
104
|
+
fprintf(stderr, "Failed to initialize consumer.\n");
|
|
105
|
+
return 1;
|
|
106
|
+
}
|
|
107
|
+
td_free_properties(config);
|
|
108
|
+
|
|
109
|
+
if (TD_OK != td_init(consumer, &ta)) {
|
|
110
|
+
td_consumer_free(consumer);
|
|
111
|
+
fprintf(stderr, "Failed to initialize SDK.\n");
|
|
112
|
+
return 1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
properties = td_init_properties();
|
|
116
|
+
if (properties == NULL) {
|
|
117
|
+
td_free(ta);
|
|
118
|
+
td_consumer_free(consumer);
|
|
119
|
+
return 1;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
TD_ASSERT(TD_OK == td_add_int("amount", 30, properties));
|
|
123
|
+
TD_ASSERT(TD_OK == td_add_date("pay_time", time(NULL), 0, properties));
|
|
124
|
+
TD_ASSERT(TD_OK == td_track("account_id", "distinct_id", "order_paid", properties, ta));
|
|
125
|
+
|
|
126
|
+
td_free_properties(properties);
|
|
127
|
+
td_flush(ta);
|
|
128
|
+
td_free(ta);
|
|
129
|
+
td_consumer_free(consumer);
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### debug_consumer样例代码
|
|
135
|
+
|
|
136
|
+
> `debug_consumer` 只用于接入联调。严禁在生产环境使用。
|
|
137
|
+
|
|
138
|
+
```c
|
|
139
|
+
#include <stdio.h>
|
|
140
|
+
#include <string.h>
|
|
141
|
+
|
|
142
|
+
#include <thinkingdata.h>
|
|
143
|
+
|
|
144
|
+
int main(void) {
|
|
145
|
+
struct TDAnalytics *ta = NULL;
|
|
146
|
+
struct TDConsumer *consumer = NULL;
|
|
147
|
+
TDConfig *config = td_init_config();
|
|
148
|
+
TDProperties *properties = NULL;
|
|
149
|
+
const char *appid = "APPID";
|
|
150
|
+
const char *server_url = "https://receiver.example.com";
|
|
151
|
+
|
|
152
|
+
td_enableLog(1);
|
|
153
|
+
|
|
154
|
+
if (config == NULL) {
|
|
155
|
+
return 1;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
TD_ASSERT(TD_OK == td_add_int("debug_mode", 0, config));
|
|
159
|
+
TD_ASSERT(TD_OK == td_add_string("device_id", "123456789", strlen("123456789"), config));
|
|
160
|
+
TD_ASSERT(TD_OK == td_add_string("push_url", server_url, strlen(server_url), config));
|
|
161
|
+
TD_ASSERT(TD_OK == td_add_string("appid", appid, strlen(appid), config));
|
|
162
|
+
|
|
163
|
+
if (TD_OK != td_init_consumer(&consumer, config)) {
|
|
164
|
+
td_free_properties(config);
|
|
165
|
+
fprintf(stderr, "Failed to initialize consumer.\n");
|
|
166
|
+
return 1;
|
|
167
|
+
}
|
|
168
|
+
td_free_properties(config);
|
|
169
|
+
|
|
170
|
+
if (TD_OK != td_init(consumer, &ta)) {
|
|
171
|
+
td_consumer_free(consumer);
|
|
172
|
+
fprintf(stderr, "Failed to initialize SDK.\n");
|
|
173
|
+
return 1;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
properties = td_init_properties();
|
|
177
|
+
if (properties == NULL) {
|
|
178
|
+
td_free(ta);
|
|
179
|
+
td_consumer_free(consumer);
|
|
180
|
+
return 1;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
TD_ASSERT(TD_OK == td_add_string("#device_id", "123456789", strlen("123456789"), properties));
|
|
184
|
+
TD_ASSERT(TD_OK == td_track("account_id", "distinct_id", "debug_test", properties, ta));
|
|
185
|
+
|
|
186
|
+
td_free_properties(properties);
|
|
187
|
+
td_free(ta);
|
|
188
|
+
td_consumer_free(consumer);
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
# 二、工作原理
|
|
194
|
+
|
|
195
|
+
#### **C SDK支持几种工作模式?分别适用于什么场景?**
|
|
196
|
+
|
|
197
|
+
当前面向新项目时,可以按"推荐模式"和"历史兼容模式"理解:
|
|
198
|
+
|
|
199
|
+
1. `logging_consumer`:正式环境推荐模式。数据先落本地文件,再由 LogBus 传输,可靠性最高。
|
|
200
|
+
2. `batch_consumer`:受限可用模式。适合中小流量、网络稳定、可接受内存缓存风险的场景。
|
|
201
|
+
3. `debug_consumer`:调试模式。只用于接入联调,不用于生产环境。
|
|
202
|
+
4. `async_batch_consumer`:历史兼容模式。仅旧项目维护时参考,新项目不再推荐。
|
|
203
|
+
|
|
204
|
+
#### **如何获取上报地址和APP_ID?**
|
|
205
|
+
|
|
206
|
+
项目管理者可以在 TE 后台进入"项目管理 > 项目配置 > 接入配置"获取 `APPID` 与上报地址。
|
|
207
|
+
|
|
208
|
+
- 云服务环境:使用平台提供的 HTTPS 上报地址。
|
|
209
|
+
- 私有化环境:建议为数据接入地址绑定域名并配置 HTTPS 证书。
|
|
210
|
+
- 内网联调场景:请直接使用运维确认后的内网地址,不要把公网地址硬编码进生产配置。
|
|
211
|
+
|
|
212
|
+
#### **logging_consumer的工作原理是什么?有哪些配置参数?**
|
|
213
|
+
|
|
214
|
+
`logging_consumer` 在 SDK 侧负责把数据可靠写入本地文件,LogBus 负责监听目录并完成上传。业务线程与网络传输解耦,因此正式环境更稳健。
|
|
215
|
+
|
|
216
|
+
| 参数 | 描述 | 默认值 | 取值范围 | 备注 |
|
|
217
|
+
|------|------|--------|----------|------|
|
|
218
|
+
| `file_path` | 日志文件写入目录 | 无 | 字符串 | 必填,建议映射到持久化磁盘 |
|
|
219
|
+
| `rotate_mode` | 日志切分模式 | `HOURLY` | `HOURLY` / `DAILY` | 配合日志量选择 |
|
|
220
|
+
| `file_prefix` | 日志文件名前缀 | 无 | 字符串 | 用于区分业务或实例 |
|
|
221
|
+
| `file_size` | 按文件大小切分阈值 | `0` | 整数 | 单位 MB,`0` 表示不按大小切分 |
|
|
222
|
+
|
|
223
|
+
#### **batch_consumer的工作原理是什么?有哪些配置参数?**
|
|
224
|
+
|
|
225
|
+
`batch_consumer` 在内存中聚合数据,达到阈值后再发起网络请求。若网络失败,数据会先留在内存缓存中;当缓存超过上限时,最旧批次会被丢弃。
|
|
226
|
+
|
|
227
|
+
| 参数 | 描述 | 默认值 | 取值范围 | 备注 |
|
|
228
|
+
|------|------|--------|----------|------|
|
|
229
|
+
| `batch_size` | 单批次上报条数 | `20` | 整数 | 批次越大,单次请求耗时越高 |
|
|
230
|
+
| `timeout` | 请求超时时长 | `30` | 整数 | 单位秒 |
|
|
231
|
+
| `max_cache_size` | 最大缓存批次数 | `50` | 整数 | 达到上限后会淘汰最旧批次 |
|
|
232
|
+
| `appid` | 项目 APPID | 无 | 字符串 | 必填 |
|
|
233
|
+
| `push_url` | 数据上报地址 | 无 | 字符串 | 必填,建议 HTTPS |
|
|
234
|
+
|
|
235
|
+
#### **debug_consumer的工作原理是什么?有哪些配置参数?**
|
|
236
|
+
|
|
237
|
+
`debug_consumer` 逐条发起请求,并对数据格式做更严格的校验。由于每条数据都会走网络请求,因此只能在联调阶段使用。
|
|
238
|
+
|
|
239
|
+
| 参数 | 描述 | 默认值 | 取值范围 | 备注 |
|
|
240
|
+
|------|------|--------|----------|------|
|
|
241
|
+
| `push_url` | 数据上报地址 | 无 | 字符串 | 必填 |
|
|
242
|
+
| `appid` | 项目 APPID | 无 | 字符串 | 必填 |
|
|
243
|
+
| `timeout` | 请求超时时长 | `30` | 整数 | 单位秒 |
|
|
244
|
+
| `device_id` | Debug 设备标识 | 无 | 字符串 | 需在 TE 后台配置同一设备 ID |
|
|
245
|
+
| `debug_mode` | 是否入库 | `0` | `0` / `1` | `0` 表示入库,`1` 表示仅校验不入库 |
|
|
246
|
+
|
|
247
|
+
# 三、常见问题
|
|
248
|
+
|
|
249
|
+
#### **使用 logging_consumer 有哪些注意事项?**
|
|
250
|
+
|
|
251
|
+
- 推荐和 LogBus 配合使用,这是服务端正式环境的标准方案。
|
|
252
|
+
- `file_path` 应指向具备写权限且可持久化的目录,容器环境建议挂载外部卷。
|
|
253
|
+
- 磁盘容量需要有监控和清理策略,避免写满后无法继续落盘。
|
|
254
|
+
- 不同进程不要写同一个日志文件;多进程场景请拆分目录或文件前缀。
|
|
255
|
+
- 网络文件系统(如 NFS)需要重点评估写入时延和抖动,避免成为瓶颈。
|
|
256
|
+
|
|
257
|
+
#### **logging_consumer 是否支持多线程?是否支持多进程?**
|
|
258
|
+
|
|
259
|
+
支持多线程。SDK 内部会保证单进程内的线程安全。不支持多个进程同时写入同一个日志文件。多进程场景请为每个进程分配独立文件或目录。
|
|
260
|
+
|
|
261
|
+
#### **logging_consumer 是否存在丢数风险?如何避免?**
|
|
262
|
+
|
|
263
|
+
存在边界风险,主要来自磁盘写满、宿主机异常退出、容器未挂载持久化卷等情况。建议:
|
|
264
|
+
|
|
265
|
+
1. 监控日志目录容量并设置归档或清理策略。
|
|
266
|
+
2. 根据写入量设置合理的切分策略,避免单文件过大。
|
|
267
|
+
3. 容器部署时把日志目录映射到宿主机或持久化存储。
|
|
268
|
+
4. 关闭进程前调用 `td_free()` 和 `td_consumer_free()`,确保资源正常释放。
|
|
269
|
+
|
|
270
|
+
#### **batch_consumer 为什么会存在丢数风险?如何避免?**
|
|
271
|
+
|
|
272
|
+
因为 `batch_consumer` 依赖内存缓存,进程崩溃、宿主机异常退出或持续网络失败都可能导致未发送数据丢失。建议:
|
|
273
|
+
|
|
274
|
+
1. 正式环境优先使用 `logging_consumer + LogBus`。
|
|
275
|
+
2. 如果必须使用 `batch_consumer`,适度提高 `max_cache_size`,但要同步评估内存占用。
|
|
276
|
+
3. 不要把 `batch_size` 调得过大,避免单次发送时间过长。
|
|
277
|
+
4. 在进程退出前显式调用 `td_flush()`。
|
|
278
|
+
|
|
279
|
+
#### **batch_consumer 适合在什么场景下使用?**
|
|
280
|
+
|
|
281
|
+
它更适合中小数据量、部署链路简单、网络稳定且可接受少量缓存风险的场景。
|
|
282
|
+
|
|
283
|
+
#### **debug_consumer 为什么在生产环境禁用?**
|
|
284
|
+
|
|
285
|
+
因为它会逐条发送并做严格校验,连接开销高、吞吐低,还可能放大线上日志噪音,只适合开发联调。
|
|
286
|
+
|
|
287
|
+
#### **什么时候需要调用 `ta_free()` 方法?**
|
|
288
|
+
|
|
289
|
+
`ta_free()` 是 1.x 的旧函数名,v2 对应为 `td_free()`。在程序正常结束前调用 `td_free()`,随后调用 `td_consumer_free()`,确保 SDK 内部资源与缓存被正确释放。
|
|
290
|
+
|
|
291
|
+
#### **在程序中调用了 `ta_track()` 或者 `ta_user_set()` 方法, 为什么在 TE 后台没有看到数据?**
|
|
292
|
+
|
|
293
|
+
`ta_track()` / `ta_user_set()` 为旧版命名,v2 对应 `td_track()` / `td_user_set()`。排查顺序建议如下:
|
|
294
|
+
|
|
295
|
+
- 检查 `push_url` 和 `appid` 是否匹配。
|
|
296
|
+
- 如果使用 `batch_consumer`,确认是否达到 `batch_size`,或是否已经手动调用 `td_flush()`。
|
|
297
|
+
- 检查错误数据和校验日志。
|
|
298
|
+
- 检查事件时间是否超出服务端接收范围。
|
|
299
|
+
- 检查项目是否启用了埋点方案限制、历史通道或 IP 白名单。
|
|
300
|
+
|
|
301
|
+
#### **上报数据中为什么没有 "#ip"?**
|
|
302
|
+
|
|
303
|
+
服务端 SDK 不会自动采集客户端 IP。若需要地理位置解析,请在事件属性中显式设置 `#ip`:
|
|
304
|
+
|
|
305
|
+
```c
|
|
306
|
+
TDProperties *properties = td_init_properties();
|
|
307
|
+
TD_ASSERT(TD_OK == td_add_string("#ip", "192.168.1.1", strlen("192.168.1.1"), properties));
|
|
308
|
+
TD_ASSERT(TD_OK == td_track("account_id", "distinct_id", "order_paid", properties, ta));
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
# 四、预置属性、特殊类型上报
|
|
312
|
+
|
|
313
|
+
以下预置属性会出现在 C SDK 事件中,其中 `#ip` 需要业务侧手动设置,其余地理信息由平台根据 IP 衍生。
|
|
314
|
+
|
|
315
|
+
| 属性名 | 中文名 | 类型 | 说明 |
|
|
316
|
+
|--------|--------|------|------|
|
|
317
|
+
| `#ip` | IP 地址 | 文本 | 需要业务手动设置 |
|
|
318
|
+
| `#country` | 国家 | 文本 | 根据 IP 解析 |
|
|
319
|
+
| `#country_code` | 国家代码 | 文本 | 根据 IP 解析 |
|
|
320
|
+
| `#province` | 省份 | 文本 | 根据 IP 解析 |
|
|
321
|
+
| `#city` | 城市 | 文本 | 根据 IP 解析 |
|
|
322
|
+
| `#lib` | SDK 类型 | 文本 | 平台自动补充 |
|
|
323
|
+
| `#lib_version` | SDK 版本 | 文本 | 平台自动补充 |
|
|
324
|
+
|
|
325
|
+
#### **C SDK 如何上报对象和对象组类型?**
|
|
326
|
+
|
|
327
|
+
复杂类型的完整说明可参考服务端 SDK 复杂类型上报。基本示例如下:
|
|
328
|
+
|
|
329
|
+
```c
|
|
330
|
+
TDProperties *properties = td_init_properties();
|
|
331
|
+
TDProperties *object = td_init_custom_properties("object");
|
|
332
|
+
TDProperties *group_item = td_init_custom_properties("group_item");
|
|
333
|
+
|
|
334
|
+
TD_ASSERT(TD_OK == td_add_string("key", "value", strlen("value"), object));
|
|
335
|
+
TD_ASSERT(TD_OK == td_add_property(object, properties));
|
|
336
|
+
|
|
337
|
+
TD_ASSERT(TD_OK == td_add_string("name", "item_1", strlen("item_1"), group_item));
|
|
338
|
+
TD_ASSERT(TD_OK == td_append_properties("object_arr", group_item, properties));
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
#### **某属性首次上报为空值,应该如何上报?**
|
|
342
|
+
|
|
343
|
+
对象组可以通过"空对象"方式上报,数组可以通过"空数组"方式上报:
|
|
344
|
+
|
|
345
|
+
对象组:
|
|
346
|
+
|
|
347
|
+
```c
|
|
348
|
+
TDProperties *properties = td_init_properties();
|
|
349
|
+
TDProperties *obj = td_init_custom_properties("obj");
|
|
350
|
+
TD_ASSERT(TD_OK == td_append_properties("obj_array", obj, properties));
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
列表:
|
|
354
|
+
|
|
355
|
+
```c
|
|
356
|
+
TDProperties *properties = td_init_properties();
|
|
357
|
+
TD_ASSERT(TD_OK == td_append_array("array", NULL, 0, properties));
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
对象、数值、文本、时间、布尔类型不支持直接上报 `NULL`。如需表达空值,请不要传该属性,让数据表中保持空值状态。
|
|
361
|
+
|
|
362
|
+
#### **公共属性**
|
|
363
|
+
|
|
364
|
+
服务端公共属性不适合承载用户级强变更字段。多线程或多用户并发场景下,建议只在公共属性中放置区服、渠道、部署环境等相对稳定的信息,其余内容放入事件属性或用户属性。
|
|
365
|
+
|
|
366
|
+
#### **时区**
|
|
367
|
+
|
|
368
|
+
如事件时间不是 UTC+8 且需要显式携带时区偏移,可在属性中增加 `#zone_offset`,其值为数值类型的小时偏移量。例如 UTC+0 可传 `0`。
|
|
369
|
+
|
|
370
|
+
#### **可更新事件**
|
|
371
|
+
|
|
372
|
+
集群环境下,可更新事件可能出现近时间戳乱序。若业务强依赖顺序,建议在属性中增加一个数值型顺序字段,例如 `order`,并结合事务属性做幂等控制:
|
|
373
|
+
|
|
374
|
+
```c
|
|
375
|
+
TDProperties *properties = td_init_properties();
|
|
376
|
+
TD_ASSERT(TD_OK == td_add_int("order", 2, properties));
|
|
377
|
+
TD_ASSERT(TD_OK == td_add_int("status", 5, properties));
|
|
378
|
+
TD_ASSERT(TD_OK == td_track_update("account_id", "distinct_id", "UPDATABLE_EVENT", "event_id", properties, ta));
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
# 五、异常报错
|
|
382
|
+
|
|
383
|
+
#### **batch_consumer 能否获取上报失败的数据?**
|
|
384
|
+
|
|
385
|
+
SDK 不直接暴露失败缓存队列。失败数据会先留在内存缓存中,达到上限后最旧批次会被淘汰。因此更稳妥的做法仍然是使用 `logging_consumer + LogBus`,把持久化和传输解耦。
|
|
386
|
+
|
|
387
|
+
#### **由于客户服务器环境不一致,C SDK工程中的 curl 和 pcre 两个库文件编译报错,如何处理?**
|
|
388
|
+
|
|
389
|
+
`curl` 和 `pcre` 都是独立的开源依赖。遇到平台兼容问题时,建议按目标环境重新下载源码并编译:
|
|
390
|
+
|
|
391
|
+
- `curl`:https://curl.se
|
|
392
|
+
- `pcre`:http://www.pcre.org
|
|
393
|
+
|
|
394
|
+
#### **sdk编译windows版本也依赖pthread库吗?**
|
|
395
|
+
|
|
396
|
+
如果当前工程要求兼容 `c89` / `c90`,请避免继续依赖需要更高线程支持的历史方案,优先改用 `logging_consumer`;如果必须保留直传能力,再评估 `batch_consumer` 的兼容性。
|
|
397
|
+
|
|
398
|
+
#### **C SDK 中使用的 libcurl 库是否会导致死锁或崩溃?**
|
|
399
|
+
|
|
400
|
+
在网络较差的环境下,`libcurl` 超时配置不当可能引发异常信号问题。建议显式设置超时并关闭超时信号:
|
|
401
|
+
|
|
402
|
+
```c
|
|
403
|
+
if (timeout_seconds > 0) {
|
|
404
|
+
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout_seconds);
|
|
405
|
+
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
#### **CentOS 上报https地址报错:curl_easy_perform() failed: SSL connect error,如何处理?**
|
|
410
|
+
|
|
411
|
+
这通常是 `curl` 侧的 SSL 环境问题,常见处理方式包括:
|
|
412
|
+
|
|
413
|
+
1. 升级系统中的 `nss` / OpenSSL 相关依赖。
|
|
414
|
+
2. 更新 CA 证书链。
|
|
415
|
+
3. 确认服务端证书与域名绑定是否正确。
|
|
416
|
+
4. 在内网排障阶段,可先用 `curl` 单独验证目标地址的 TLS 握手是否正常。
|