Adobe analytics plugin
Overview
The adobe analytics plugin is a standardised plugin that allows feature teams to integrate adobe analytics into their applications. This plugin is designed to provide a seamless integration experience, enabling teams to track user interactions and generate valuable insights for data-driven decision-making. The plugin is used in the WPaaS platform and located in the adobe-analytics service. The plugin has a dependency on the Data teams Adobe Analytics library, which is a wrapper around the Adobe Analytics SDK. This library is responsible for initialising the Adobe Analytics SDK and providing a set of functions to track user interactions.
npm install --save @investec/plugins-adobe-analyticsImplementation Guide
The plugin exports a class with a set of functions that can be used in the platform and exposed in the invsy SDK. The functions are as follows:
import { IAnalyticsClickEventPayload, IAnalyticsDownloadClickEventPayload, IAnalyticsInitPayload,
IAnalyticsPageLoadEventPayload, IAnalyticsRoadblockLoadEventPayload,
IAnalyticsSearchClickEventPayload, IAnalyticsFormClickEventPayload, IAnalyticsRoadblockClickEventPayload,
IAnalyticsMiscClickEventPayload} from './types/adobe-analytics.interface';
import { AnalyticsBuilders, AnalyticsInterfaces } from '@investec/cadi-core';
declare global {
interface Window {
adobeDataLayer: any;
}
}
function pushToDataLayer(data: any) {
try
{
window.adobeDataLayer.push(data);
}
catch(e)
{
// Fail silently to avoid noise in console
}
}
export class AdobeAnalytics {
private eventBuilder : AnalyticsBuilders.EventBuilder<AnalyticsInterfaces.Identity.IWebPlatformUser> | undefined = undefined;
initAnalytics(payload : IAnalyticsInitPayload) : void {
this.eventBuilder = new AnalyticsBuilders.EventBuilder<AnalyticsInterfaces.Identity.IWebPlatformUser>(
payload.user,
payload.env,
payload.digitalChannel
);
}
setUserInfo(user : AnalyticsInterfaces.Identity.IWebPlatformUser) {
this.eventBuilder?.updateUser(user);
}
getUserInfo() : AnalyticsInterfaces.Identity.IWebPlatformUser | undefined {
return this.eventBuilder?.user;
}
adobeStandardizePageLoad(payload: IAnalyticsPageLoadEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildLoadEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeRoadblockLoad(payload: IAnalyticsRoadblockLoadEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildLoadEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
roadblockInfo: payload.roadblockInfo,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeGeneralClickEvent(payload: IAnalyticsClickEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildClickEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
clickInfo: payload.clickInfo,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeSearchClickEvent(payload : IAnalyticsSearchClickEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildClickEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
clickInfo: payload.clickInfo,
searchInfo: payload.searchInfo,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeDownloadClickEvent(payload : IAnalyticsDownloadClickEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildClickEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
clickInfo: payload.clickInfo,
downloadInfo: payload.downloadInfo,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeFormClickEvent(payload : IAnalyticsFormClickEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildClickEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
clickInfo: payload.clickInfo,
formInfo: payload.formInfo,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeRoadblockClickEvent(payload : IAnalyticsRoadblockClickEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildClickEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
clickInfo: payload.clickInfo,
roadblockInfo: payload.roadblockInfo,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
adobeStandardizeOpenClickEvent(payload : IAnalyticsMiscClickEventPayload) {
const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
eventName: payload.eventName,
featureName: payload.featureName
};
const data = this.eventBuilder?.buildClickEvent({
eventInfo: eventInfo,
pageInfo: payload.pageInfo ?? undefined,
clickInfo: payload.clickInfo,
searchInfo: payload.searchInfo ?? undefined,
downloadInfo: payload.downloadInfo ?? undefined,
formInfo: payload.formInfo ?? undefined,
roadblockInfo: payload.roadblockInfo ?? undefined,
digitalChannel: payload.digitalChannel ?? undefined
});
pushToDataLayer(data);
}
}