From b19d5aca35d06a5e9f55e257baa4de623dd258dd Mon Sep 17 00:00:00 2001 From: Junyoung Choi Date: Wed, 15 Apr 2020 13:22:59 +0900 Subject: [PATCH 1/2] Fix analytics --- src/lib/analytics.ts | 54 ++++++++++++++++++++++--------------- src/mobile/lib/analytics.ts | 53 +++++++++++++++++++++--------------- 2 files changed, 63 insertions(+), 44 deletions(-) diff --git a/src/lib/analytics.ts b/src/lib/analytics.ts index 741ff84725..1a70b04841 100644 --- a/src/lib/analytics.ts +++ b/src/lib/analytics.ts @@ -1,10 +1,11 @@ -import { useCallback, useRef } from 'react' +import { useCallback, useEffect, useMemo } from 'react' import Analytics from '@aws-amplify/analytics' import Auth from '@aws-amplify/auth' -import { usePreferences } from './preferences' +import { usePreferences, useFirstUser } from './preferences' import { DbStore } from './db' import { useEffectOnce } from 'react-use' import { osName } from './platform' +import isElectron from 'is-electron' const amplifyConfig = { Auth: { @@ -20,38 +21,47 @@ const analyticsConfig = { mandatorySignIn: false, }, } +Auth.configure(amplifyConfig) +Analytics.configure(analyticsConfig) + +function reportViaPinpoint(name: string, attributes: any) { + if (process.env.NODE_ENV === 'production') { + Analytics.record({ name, attributes }) + } +} export function useAnalytics() { - const configured = useRef(false) const { preferences } = usePreferences() const analyticsEnabled = preferences['general.enableAnalytics'] - const user = preferences['general.accounts'][0] + const user = useFirstUser() useEffectOnce(() => { - Auth.configure(amplifyConfig) - Analytics.configure(analyticsConfig) - configured.current = true - const initilalized = (window as any).initilalized - if (!initilalized) { - ;(window as any).initilalized = true - Analytics.record('init') - } - Analytics.updateEndpoint({ + Analytics.record('init') + }) + + const userId = useMemo(() => { + return user != null ? user.id.toString() : null + }, [user]) + + useEffect(() => { + const endpointConfig: any = { attributes: { - userId: user == null ? [] : [user.id.toString()], target: [osName], + target2: [`${isElectron() ? 'electron' : 'web'}:${osName}`], }, - }) - }) + } + + if (userId != null) { + endpointConfig.userId = userId + endpointConfig.attributes.userId = [userId] + } + Analytics.updateEndpoint(endpointConfig) + }, [userId]) const report = useCallback( - (name: string, attributes?: { [key: string]: string }) => { + (name: string, attributes?: any) => { if (analyticsEnabled) { - if (attributes == null) { - Analytics.record({ name: name }) - } else { - Analytics.record({ name, attributes }) - } + reportViaPinpoint(name, attributes) } }, [analyticsEnabled] diff --git a/src/mobile/lib/analytics.ts b/src/mobile/lib/analytics.ts index 839489cdcf..d2876911ce 100644 --- a/src/mobile/lib/analytics.ts +++ b/src/mobile/lib/analytics.ts @@ -1,7 +1,7 @@ -import { useCallback, useRef } from 'react' +import { useCallback, useMemo, useEffect } from 'react' import Analytics from '@aws-amplify/analytics' import Auth from '@aws-amplify/auth' -import { usePreferences } from '../../lib/preferences' +import { usePreferences, useFirstUser } from '../../lib/preferences' import { DbStore } from '../../lib/db' import { useEffectOnce } from 'react-use' @@ -20,37 +20,46 @@ const analyticsConfig = { }, } +Auth.configure(amplifyConfig) +Analytics.configure(analyticsConfig) + +function reportViaPinpoint(name: string, attributes: any) { + if (process.env.NODE_ENV === 'production') { + Analytics.record({ name, attributes }) + } +} + export function useAnalytics() { - const configured = useRef(false) const { preferences } = usePreferences() const analyticsEnabled = preferences['general.enableAnalytics'] - const user = preferences['general.accounts'][0] + const user = useFirstUser() useEffectOnce(() => { - Auth.configure(amplifyConfig) - Analytics.configure(analyticsConfig) - configured.current = true - const initilalized = (window as any).initilalized - if (!initilalized) { - ;(window as any).initilalized = true - Analytics.record('init') - } - Analytics.updateEndpoint({ + Analytics.record('init') + }) + + const userId = useMemo(() => { + return user != null ? user.id.toString() : null + }, [user]) + + useEffect(() => { + const endpointConfig: any = { attributes: { - userId: user == null ? [] : [user.id.toString()], target: [process.env.TARGET == null ? 'dev' : process.env.TARGET], }, - }) - }) + } + + if (userId == null) { + endpointConfig.userId = userId + endpointConfig.attributes.userId = [userId] + } + Analytics.updateEndpoint(endpointConfig) + }, [userId]) const report = useCallback( - (name: string, attributes?: { [key: string]: string }) => { + (name: string, attributes?: any) => { if (analyticsEnabled) { - if (attributes == null) { - Analytics.record({ name: name }) - } else { - Analytics.record({ name, attributes }) - } + reportViaPinpoint(name, attributes) } }, [analyticsEnabled] From 371a4e23e3b53b2694f66d5dcf3a4df6cfc9a089 Mon Sep 17 00:00:00 2001 From: Junyoung Choi Date: Wed, 15 Apr 2020 13:37:08 +0900 Subject: [PATCH 2/2] Record on production only --- src/lib/analytics.ts | 4 ++-- src/mobile/lib/analytics.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/analytics.ts b/src/lib/analytics.ts index 1a70b04841..5fb6f45108 100644 --- a/src/lib/analytics.ts +++ b/src/lib/analytics.ts @@ -24,7 +24,7 @@ const analyticsConfig = { Auth.configure(amplifyConfig) Analytics.configure(analyticsConfig) -function reportViaPinpoint(name: string, attributes: any) { +function reportViaPinpoint(name: string, attributes?: any) { if (process.env.NODE_ENV === 'production') { Analytics.record({ name, attributes }) } @@ -36,7 +36,7 @@ export function useAnalytics() { const user = useFirstUser() useEffectOnce(() => { - Analytics.record('init') + reportViaPinpoint('init') }) const userId = useMemo(() => { diff --git a/src/mobile/lib/analytics.ts b/src/mobile/lib/analytics.ts index d2876911ce..c83039cd9c 100644 --- a/src/mobile/lib/analytics.ts +++ b/src/mobile/lib/analytics.ts @@ -23,7 +23,7 @@ const analyticsConfig = { Auth.configure(amplifyConfig) Analytics.configure(analyticsConfig) -function reportViaPinpoint(name: string, attributes: any) { +function reportViaPinpoint(name: string, attributes?: any) { if (process.env.NODE_ENV === 'production') { Analytics.record({ name, attributes }) } @@ -35,7 +35,7 @@ export function useAnalytics() { const user = useFirstUser() useEffectOnce(() => { - Analytics.record('init') + reportViaPinpoint('init') }) const userId = useMemo(() => {