Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/init/features/dataconnect/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ export async function actuate(setup: Setup, config: Config, options: any): Promi
await actuateWithInfo(setup, config, info, options);
await sdk.actuate(setup, config);
} finally {
const sdkInfo = setup.featureInfo?.dataconnectSdk;
void trackGA4("dataconnect_init", {
flow: info.analyticsFlow,
project_status: setup.projectId
Expand All @@ -179,6 +180,7 @@ export async function actuate(setup: Setup, config: Config, options: any): Promi
: "blaze"
: "spark"
: "missing",
...(sdkInfo ? sdk.initAppCounters(sdkInfo) : {}),
});
}

Expand Down
32 changes: 22 additions & 10 deletions src/init/features/dataconnect/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,30 +155,42 @@ export async function chooseApp(): Promise<App[]> {
}

export async function actuate(setup: Setup, config: Config) {
const fdcInfo = setup.featureInfo?.dataconnect;
const sdkInfo = setup.featureInfo?.dataconnectSdk;
if (!sdkInfo) {
throw new Error("Data Connect SDK feature RequiredInfo is not provided");
}
try {
await actuateWithInfo(setup, config, sdkInfo);
} finally {
let flow = "no_app";
if (sdkInfo.apps.length) {
const platforms = sdkInfo.apps.map((a) => a.platform.toLowerCase()).sort();
flow = `${platforms.join("_")}_app`;
}
if (fdcInfo) {
fdcInfo.analyticsFlow += `_${flow}`;
} else {
// If `firebase init dataconnect:sdk` is run alone, emit GA state.
const fdcInfo = setup.featureInfo?.dataconnect;
if (!fdcInfo) {
void trackGA4("dataconnect_init", {
project_status: setup.projectId ? (setup.isBillingEnabled ? "blaze" : "spark") : "missing",
flow: `cli_sdk_${flow}`,
flow: "cli_sdk",
...initAppCounters(sdkInfo),
});
}
}
}

export function initAppCounters(info: SdkRequiredInfo): { [key: string]: number } {
const platformCounts = (info.apps ?? []).reduce(
(acc, a) => {
const platform = a.platform.toLowerCase();
acc[platform] = (acc[platform] || 0) + 1;
return acc;
},
{} as Record<string, number>,
);
return {
num_web_apps: platformCounts[Platform.WEB.toLowerCase()] || 0,
num_android_apps: platformCounts[Platform.ANDROID.toLowerCase()] || 0,
num_ios_apps: platformCounts[Platform.IOS.toLowerCase()] || 0,
num_flutter_apps: platformCounts[Platform.FLUTTER.toLowerCase()] || 0,
};
}

async function actuateWithInfo(setup: Setup, config: Config, info: SdkRequiredInfo) {
if (!info.apps.length) {
// If no apps is specified, try to detect it again.
Expand Down
Loading