diff --git a/HACKS.md b/HACKS.md index 83952d1d45d..56e47e025db 100644 --- a/HACKS.md +++ b/HACKS.md @@ -378,3 +378,16 @@ Once we have removed the `palette` directory from eigen. #### Explanation/Context: Look at the tech plan here: https://www.notion.so/artsy/palette-mobile-in-eigen-c5e3396302734f0a921aed3978f5dbeb + +## Patch-package for sift-react-native + +#### When can we remove this: + +Just adds a type, so likely doesn't need to be removed. But if they officially add it +([see this issue](https://github.com/SiftScience/sift-react-native/issues/6)), we could drop this +patch. + +#### Explanation/Context: + +This package includes a `setPageName` method on `SiftReactNative`, but no corresponding type. +I patched it to add the type. diff --git a/patches/sift-react-native+0.1.8.patch b/patches/sift-react-native+0.1.8.patch new file mode 100644 index 00000000000..21364bc53fc --- /dev/null +++ b/patches/sift-react-native+0.1.8.patch @@ -0,0 +1,12 @@ +diff --git a/node_modules/sift-react-native/lib/typescript/src/index.d.ts b/node_modules/sift-react-native/lib/typescript/src/index.d.ts +index e6bcb83..6582ec8 100644 +--- a/node_modules/sift-react-native/lib/typescript/src/index.d.ts ++++ b/node_modules/sift-react-native/lib/typescript/src/index.d.ts +@@ -1,6 +1,7 @@ + declare type SiftReactNativeType = { + setSiftConfig(accountId: string, beaconKey: string, disallowCollectingLocationData: boolean, serverUrlFormat: string): void; + setUserId(userId: string): void; ++ setPageName(pageName: String): void; + unsetUserId(): void; + upload(): void; + }; diff --git a/src/app/store/config/features.ts b/src/app/store/config/features.ts index 713c6bd01cd..75058ff742b 100644 --- a/src/app/store/config/features.ts +++ b/src/app/store/config/features.ts @@ -260,6 +260,12 @@ export const features: { [key: string]: FeatureDescriptor } = { readyForRelease: false, showInDevMenu: true, }, + AREnableAdditionalSiftAndroidTracking: { + description: "Send additional events to Sift on Android", + readyForRelease: true, + showInDevMenu: true, + echoFlagKey: "AREnableAdditionalSiftAndroidTracking", + }, } export interface DevToggleDescriptor { diff --git a/src/app/system/navigation/ModalStack.tsx b/src/app/system/navigation/ModalStack.tsx index 4e0a640fbaf..ef2f8387e87 100644 --- a/src/app/system/navigation/ModalStack.tsx +++ b/src/app/system/navigation/ModalStack.tsx @@ -8,8 +8,10 @@ import { Severity, addBreadcrumb } from "@sentry/react-native" import { AppModule, modules } from "app/AppRegistry" import { __unsafe_mainModalStackRef } from "app/NativeModules/ARScreenPresenterModule" import { GlobalStore } from "app/store/GlobalStore" +import { useFeatureFlag } from "app/utils/hooks/useFeatureFlag" import { logNavigation } from "app/utils/loggers" import { Platform } from "react-native" +import SiftReactNative from "sift-react-native" import { NavStack } from "./NavStack" import { useReloadedDevNavigationState } from "./useReloadedDevNavigationState" @@ -24,12 +26,26 @@ const Stack = createStackNavigator() export const ModalStack: React.FC = ({ children }) => { const initialState = useReloadedDevNavigationState("main_modal_stack", __unsafe_mainModalStackRef) const { setSessionState: setNavigationReady } = GlobalStore.actions + + // Code for Sift tracking; needs to be manually fired on Android + // See https://github.com/SiftScience/sift-react-native/pull/23#issuecomment-1630984250 + const enableAdditionalSiftAndroidTracking = useFeatureFlag( + "AREnableAdditionalSiftAndroidTracking" + ) + const trackSiftAndroid = Platform.OS === "android" && enableAdditionalSiftAndroidTracking + return ( { setNavigationReady({ isNavigationReady: true }) + + if (trackSiftAndroid) { + const initialRouteName = __unsafe_mainModalStackRef.current?.getCurrentRoute()?.name + SiftReactNative.setPageName(`screen_${initialRouteName}`) + SiftReactNative.upload() + } }} onStateChange={() => { const currentRoute = __unsafe_mainModalStackRef.current?.getCurrentRoute() @@ -51,6 +67,11 @@ export const ModalStack: React.FC = ({ children }) => { data: { ...params }, level: Severity.Info, }) + + if (trackSiftAndroid) { + SiftReactNative.setPageName(`screen_${currentRoute.name}`) + SiftReactNative.upload() + } } }} >