From 3f87e899fc758d18f8239a26a3d9759a183b5ba1 Mon Sep 17 00:00:00 2001 From: Hailey Date: Wed, 12 Jun 2024 09:39:38 -0700 Subject: [PATCH] grab referrer before loading --- modules/expo-google-play-referrer/index.ts | 4 +-- .../src/ExpoGooglePlayReferrer.types.ts | 12 ++++--- .../ExpoGooglePlayReferrerModule.android.ts | 2 +- .../src/ExpoGooglePlayReferrerModule.ts | 2 +- src/App.native.tsx | 4 ++- .../hooks/useStarterPackEntry.android.ts | 35 +++++++++++++++++++ .../hooks/useStarterPackEntry.ios.ts | 13 +++++++ src/components/hooks/useStarterPackEntry.ts | 3 ++ 8 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 src/components/hooks/useStarterPackEntry.android.ts create mode 100644 src/components/hooks/useStarterPackEntry.ios.ts create mode 100644 src/components/hooks/useStarterPackEntry.ts diff --git a/modules/expo-google-play-referrer/index.ts b/modules/expo-google-play-referrer/index.ts index b7f2b366ab..ad9717eae2 100644 --- a/modules/expo-google-play-referrer/index.ts +++ b/modules/expo-google-play-referrer/index.ts @@ -1,3 +1,3 @@ -import {GooglePlayReferrerModule} from './src/ExpoGooglePlayReferrerModule' +import {GooglePlayReferrer} from './src/ExpoGooglePlayReferrerModule' -export default GooglePlayReferrerModule +export default GooglePlayReferrer diff --git a/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrer.types.ts b/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrer.types.ts index 7e86e3c877..0cd3135d6d 100644 --- a/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrer.types.ts +++ b/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrer.types.ts @@ -1,8 +1,10 @@ -export type GooglePlayReferrerInfo = { - installReferrer: string - clickTimestamp: number - installTimestamp: number -} +export type GooglePlayReferrerInfo = + | { + installReferrer?: string + clickTimestamp?: number + installTimestamp?: number + } + | undefined export type ExpoGooglePlayReferrerModule = { getReferrerInfoAsync(): Promise diff --git a/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.android.ts b/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.android.ts index ec9e0bbe3b..1706eadf32 100644 --- a/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.android.ts +++ b/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.android.ts @@ -2,5 +2,5 @@ import {requireNativeModule} from 'expo-modules-core' import {ExpoGooglePlayReferrerModule} from './ExpoGooglePlayReferrer.types' -export const BackgroundNotificationHandler = +export const GooglePlayReferrer = requireNativeModule('ExpoGooglePlayReferrer') diff --git a/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.ts b/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.ts index e2f5ed1f05..82f01c0400 100644 --- a/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.ts +++ b/modules/expo-google-play-referrer/src/ExpoGooglePlayReferrerModule.ts @@ -3,7 +3,7 @@ import { GooglePlayReferrerInfo, } from './ExpoGooglePlayReferrer.types' -export const GooglePlayReferrerModule = { +export const GooglePlayReferrer = { getReferrerInfoAsync(): Promise { console.error('getReferrerInfoAsync is only available on Android') return Promise.reject('getReferrerInfoAsync is only available on Android') diff --git a/src/App.native.tsx b/src/App.native.tsx index 5b2071e102..34d5e9f723 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -46,6 +46,7 @@ import * as Toast from 'view/com/util/Toast' import {Shell} from 'view/shell' import {ThemeProvider as Alf} from '#/alf' import {useColorModeTheme} from '#/alf/util/useColorModeTheme' +import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry' import {Provider as PortalProvider} from '#/components/Portal' import {Splash} from '#/Splash' import {BackgroundNotificationPreferencesProvider} from '../modules/expo-background-notification-handler/src/BackgroundNotificationHandlerProvider' @@ -62,6 +63,7 @@ function InnerApp() { const {_} = useLingui() useIntentHandler() + const hasCheckedReferrer = useStarterPackEntry() // init useEffect(() => { @@ -90,7 +92,7 @@ function InnerApp() { - + { + ;(async () => { + const res = await GooglePlayReferrer.getReferrerInfoAsync() + + if ( + res && + res.installReferrer && + res.installReferrer.startsWith('https://bsky.app/start/') + ) { + const [_, _start, name, rkey] = new URL( + res.installReferrer, + ).pathname.split('/') + + if (name && rkey) { + setUsedStarterPack({ + uri: res.installReferrer, + }) + } + } + + setReady(true) + })() + }, [setUsedStarterPack]) + + return ready +} diff --git a/src/components/hooks/useStarterPackEntry.ios.ts b/src/components/hooks/useStarterPackEntry.ios.ts new file mode 100644 index 0000000000..5ac77efddb --- /dev/null +++ b/src/components/hooks/useStarterPackEntry.ios.ts @@ -0,0 +1,13 @@ +import React from 'react' + +export function useStarterPackEntry() { + const [ready, setReady] = React.useState(false) + + React.useEffect(() => { + ;(async () => { + setReady(true) + })() + }, []) + + return ready +} diff --git a/src/components/hooks/useStarterPackEntry.ts b/src/components/hooks/useStarterPackEntry.ts new file mode 100644 index 0000000000..2934679c33 --- /dev/null +++ b/src/components/hooks/useStarterPackEntry.ts @@ -0,0 +1,3 @@ +export function useStarterPackEntry() { + return true +}