From b04f93d3be71d563a619263623bfaeb1bfe5ce39 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Thu, 16 May 2024 15:30:16 +0800 Subject: [PATCH] feat: add traffic source parameters to global attributes --- android/app/build.gradle | 2 +- .../com/kanyideveloper/joomia/JoomiaApp.kt | 20 ++++- ios/ModerneShopping/AppDelegate.swift | 11 ++- retail-web/src/main.js | 78 +++++++++++-------- 4 files changed, 73 insertions(+), 38 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 235462c..04114ae 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -125,5 +125,5 @@ dependencies { implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" - implementation 'software.aws.solution:clickstream:0.11.0' + implementation 'software.aws.solution:clickstream:0.13.0' } \ No newline at end of file diff --git a/android/app/src/main/java/com/kanyideveloper/joomia/JoomiaApp.kt b/android/app/src/main/java/com/kanyideveloper/joomia/JoomiaApp.kt index b14338d..8c91246 100644 --- a/android/app/src/main/java/com/kanyideveloper/joomia/JoomiaApp.kt +++ b/android/app/src/main/java/com/kanyideveloper/joomia/JoomiaApp.kt @@ -8,6 +8,8 @@ import androidx.compose.ui.semantics.testTagsAsResourceId import com.amplifyframework.AmplifyException import dagger.hilt.android.HiltAndroidApp import software.aws.solution.clickstream.ClickstreamAnalytics +import software.aws.solution.clickstream.ClickstreamAttribute +import software.aws.solution.clickstream.ClickstreamConfiguration import timber.log.Timber @HiltAndroidApp @@ -18,10 +20,22 @@ class JoomiaApp : Application() { initTimber() try { Modifier.semantics { testTagsAsResourceId = true; testTagsAsResourceId = true } - ClickstreamAnalytics.init(applicationContext) - ClickstreamAnalytics.getClickStreamConfiguration() + val globalAttributes: ClickstreamAttribute = ClickstreamAttribute.builder() + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_SOURCE, "amazon") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_MEDIUM, "cpc") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN, "summer_promotion") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN_ID, "summer_promotion_01") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_TERM, "running_shoes") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CONTENT, "banner_ad_1") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID, "amazon_ad_123") + .add(ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID_PLATFORM, "amazon_ads") + .add(ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL, "Amazon Store") + .build() + val configuration = ClickstreamConfiguration() .withLogEvents(true) - .withTrackScreenViewEvents(false) + .withTrackScreenViewEvents(true) + .withInitialGlobalAttributes(globalAttributes) + ClickstreamAnalytics.init(applicationContext, configuration) Timber.i("MyApp", "Initialized ClickstreamAnalytics") } catch (error: AmplifyException) { Timber.e("MyApp", "Could not initialize ClickstreamAnalytics", error) diff --git a/ios/ModerneShopping/AppDelegate.swift b/ios/ModerneShopping/AppDelegate.swift index 20d7b03..fa80701 100644 --- a/ios/ModerneShopping/AppDelegate.swift +++ b/ios/ModerneShopping/AppDelegate.swift @@ -16,8 +16,15 @@ class AppDelegate: NSObject, UIApplicationDelegate { let configuration = ClickstreamConfiguration() .withLogEvents(true) .withInitialGlobalAttributes([ - "channel": "test", - "isOpenNotification": true, + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_SOURCE: "amazon", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_MEDIUM: "cpc", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN: "summer_promotion", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN_ID: "123", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_TERM: "running_shoes", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CONTENT: "banner_ad_1", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID: "amazon_ad_123", + ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID_PLATFORM: "amazon_ads", + ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "App Store" ]) try ClickstreamAnalytics.initSDK(configuration) } catch { diff --git a/retail-web/src/main.js b/retail-web/src/main.js index bc9bcf3..0704b26 100644 --- a/retail-web/src/main.js +++ b/retail-web/src/main.js @@ -1,69 +1,83 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 -import {createApp} from 'vue' +import { createApp } from 'vue' import App from './App.vue' -import router from './router'; -import store from '@/store/store'; +import router from './router' +import store from '@/store/store' import './styles/tokens.css' -import {ClickstreamAnalytics, SendMode} from "@aws/clickstream-web"; -import sensors from 'sa-sdk-javascript'; -import {initializeApp} from 'firebase/app'; -import {getAnalytics} from 'firebase/analytics'; -import {AnalyticsLogger} from "@/analytics/AnalyticsLogger"; +import { ClickstreamAnalytics, SendMode, Attr } from '@aws/clickstream-web' +import sensors from 'sa-sdk-javascript' +import { initializeApp } from 'firebase/app' +import { getAnalytics } from 'firebase/analytics' +import { AnalyticsLogger } from '@/analytics/AnalyticsLogger' -if (import.meta.env.VITE_CLICKSTREAM_APPID !== "" +if (import.meta.env.VITE_CLICKSTREAM_APPID !== '' && import.meta.env.VITE_CLICKSTREAM_APPID !== undefined - && import.meta.env.VITE_CLICKSTREAM_ENDPOINT !== "" - && import.meta.env.VITE_CLICKSTREAM_ENDPOINT !== undefined ) { - localStorage.setItem("clickstream_appId", import.meta.env.VITE_CLICKSTREAM_APPID) - localStorage.setItem("clickstream_endpoint", import.meta.env.VITE_CLICKSTREAM_ENDPOINT) + && import.meta.env.VITE_CLICKSTREAM_ENDPOINT !== '' + && import.meta.env.VITE_CLICKSTREAM_ENDPOINT !== undefined) { + localStorage.setItem('clickstream_appId', + import.meta.env.VITE_CLICKSTREAM_APPID) + localStorage.setItem('clickstream_endpoint', + import.meta.env.VITE_CLICKSTREAM_ENDPOINT) } -if (import.meta.env.VITE_SENSORDATA_APPID !== "" +if (import.meta.env.VITE_SENSORDATA_APPID !== '' && import.meta.env.VITE_SENSORDATA_APPID !== undefined - && import.meta.env.VITE_SENSORDATA_ENDPOINT !== "" - && import.meta.env.VITE_SENSORDATA_ENDPOINT !== undefined ) { - localStorage.setItem("sensor_appId", import.meta.env.VITE_SENSORDATA_APPID) - localStorage.setItem("sensor_endpoint", import.meta.env.VITE_SENSORDATA_ENDPOINT) + && import.meta.env.VITE_SENSORDATA_ENDPOINT !== '' + && import.meta.env.VITE_SENSORDATA_ENDPOINT !== undefined) { + localStorage.setItem('sensor_appId', import.meta.env.VITE_SENSORDATA_APPID) + localStorage.setItem('sensor_endpoint', + import.meta.env.VITE_SENSORDATA_ENDPOINT) } // Initial Clickstream Web SDK -if (localStorage.getItem("clickstream_appId") !== null) { +if (localStorage.getItem('clickstream_appId') !== null) { ClickstreamAnalytics.init({ - gtmId: localStorage.getItem("clickstream_appId"), - endpoint: localStorage.getItem("clickstream_endpoint"), + gtmId: localStorage.getItem('clickstream_appId'), + endpoint: localStorage.getItem('clickstream_endpoint'), isLogEvents: true, sendMode: SendMode.Batch, + globalAttributes: { + [Attr.TRAFFIC_SOURCE_SOURCE]: 'amazon', + [Attr.TRAFFIC_SOURCE_MEDIUM]: 'cpc', + [Attr.TRAFFIC_SOURCE_CAMPAIGN]: 'summer_promotion', + [Attr.TRAFFIC_SOURCE_CAMPAIGN_ID]: 'summer_promotion_01', + [Attr.TRAFFIC_SOURCE_TERM]: 'running_shoes', + [Attr.TRAFFIC_SOURCE_CONTENT]: 'banner_ad_1', + [Attr.TRAFFIC_SOURCE_CLID]: 'amazon_ad_123', + [Attr.TRAFFIC_SOURCE_CLID_PLATFORM]: 'amazon_ads', + }, }) } // Initial Sensor Data Analytics if (AnalyticsLogger.sensorDataAnalyticsEnabled()) { sensors.init({ - server_url: localStorage.getItem("sensor_endpoint") + '?appId=' - + localStorage.getItem("sensor_appId") + '&platform=Web&testBy=webRetailDemo', + server_url: localStorage.getItem('sensor_endpoint') + '?appId=' + + localStorage.getItem('sensor_appId') + + '&platform=Web&testBy=webRetailDemo', show_log: true, is_track_single_page: true, use_client_time: true, send_type: 'beacon', heatmap: { clickmap: 'default', - scroll_notice_map: 'default' - } - }); - sensors.quick('autoTrack'); + scroll_notice_map: 'default', + }, + }) + sensors.quick('autoTrack') } - // Initial Firebase Analytics if (AnalyticsLogger.firebaseEnabled()) { - const configString = import.meta.env.VITE_FIREBASE_CONFIG.replace(/(\w+)(?=:\s*')/g, '"$1"').replace(/'/g, '"'); + const configString = import.meta.env.VITE_FIREBASE_CONFIG.replace( + /(\w+)(?=:\s*')/g, '"$1"').replace(/'/g, '"') const firebaseConfig = JSON.parse(configString) console.log(firebaseConfig) - const firebaseApp = initializeApp(firebaseConfig); - const analytics = getAnalytics(firebaseApp); - console.log("Firebase SDK initialized:", analytics) + const firebaseApp = initializeApp(firebaseConfig) + const analytics = getAnalytics(firebaseApp) + console.log('Firebase SDK initialized:', analytics) } // Initial for Vue