grab referrer before loading
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
import {GooglePlayReferrerModule} from './src/ExpoGooglePlayReferrerModule'
|
import {GooglePlayReferrer} from './src/ExpoGooglePlayReferrerModule'
|
||||||
|
|
||||||
export default GooglePlayReferrerModule
|
export default GooglePlayReferrer
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
export type GooglePlayReferrerInfo = {
|
export type GooglePlayReferrerInfo =
|
||||||
installReferrer: string
|
| {
|
||||||
clickTimestamp: number
|
installReferrer?: string
|
||||||
installTimestamp: number
|
clickTimestamp?: number
|
||||||
}
|
installTimestamp?: number
|
||||||
|
}
|
||||||
|
| undefined
|
||||||
|
|
||||||
export type ExpoGooglePlayReferrerModule = {
|
export type ExpoGooglePlayReferrerModule = {
|
||||||
getReferrerInfoAsync(): Promise<GooglePlayReferrerInfo>
|
getReferrerInfoAsync(): Promise<GooglePlayReferrerInfo>
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ import {requireNativeModule} from 'expo-modules-core'
|
|||||||
|
|
||||||
import {ExpoGooglePlayReferrerModule} from './ExpoGooglePlayReferrer.types'
|
import {ExpoGooglePlayReferrerModule} from './ExpoGooglePlayReferrer.types'
|
||||||
|
|
||||||
export const BackgroundNotificationHandler =
|
export const GooglePlayReferrer =
|
||||||
requireNativeModule<ExpoGooglePlayReferrerModule>('ExpoGooglePlayReferrer')
|
requireNativeModule<ExpoGooglePlayReferrerModule>('ExpoGooglePlayReferrer')
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
GooglePlayReferrerInfo,
|
GooglePlayReferrerInfo,
|
||||||
} from './ExpoGooglePlayReferrer.types'
|
} from './ExpoGooglePlayReferrer.types'
|
||||||
|
|
||||||
export const GooglePlayReferrerModule = {
|
export const GooglePlayReferrer = {
|
||||||
getReferrerInfoAsync(): Promise<GooglePlayReferrerInfo> {
|
getReferrerInfoAsync(): Promise<GooglePlayReferrerInfo> {
|
||||||
console.error('getReferrerInfoAsync is only available on Android')
|
console.error('getReferrerInfoAsync is only available on Android')
|
||||||
return Promise.reject('getReferrerInfoAsync is only available on Android')
|
return Promise.reject('getReferrerInfoAsync is only available on Android')
|
||||||
|
|||||||
+3
-1
@@ -46,6 +46,7 @@ import * as Toast from 'view/com/util/Toast'
|
|||||||
import {Shell} from 'view/shell'
|
import {Shell} from 'view/shell'
|
||||||
import {ThemeProvider as Alf} from '#/alf'
|
import {ThemeProvider as Alf} from '#/alf'
|
||||||
import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
|
import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
|
||||||
|
import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry'
|
||||||
import {Provider as PortalProvider} from '#/components/Portal'
|
import {Provider as PortalProvider} from '#/components/Portal'
|
||||||
import {Splash} from '#/Splash'
|
import {Splash} from '#/Splash'
|
||||||
import {BackgroundNotificationPreferencesProvider} from '../modules/expo-background-notification-handler/src/BackgroundNotificationHandlerProvider'
|
import {BackgroundNotificationPreferencesProvider} from '../modules/expo-background-notification-handler/src/BackgroundNotificationHandlerProvider'
|
||||||
@@ -62,6 +63,7 @@ function InnerApp() {
|
|||||||
const {_} = useLingui()
|
const {_} = useLingui()
|
||||||
|
|
||||||
useIntentHandler()
|
useIntentHandler()
|
||||||
|
const hasCheckedReferrer = useStarterPackEntry()
|
||||||
|
|
||||||
// init
|
// init
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -90,7 +92,7 @@ function InnerApp() {
|
|||||||
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
|
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
|
||||||
<Alf theme={theme}>
|
<Alf theme={theme}>
|
||||||
<ThemeProvider theme={theme}>
|
<ThemeProvider theme={theme}>
|
||||||
<Splash isReady={isReady}>
|
<Splash isReady={isReady && hasCheckedReferrer}>
|
||||||
<RootSiblingParent>
|
<RootSiblingParent>
|
||||||
<React.Fragment
|
<React.Fragment
|
||||||
// Resets the entire tree below when it changes:
|
// Resets the entire tree below when it changes:
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
import {useSetUsedStarterPack} from 'state/preferences/starter-pack'
|
||||||
|
import GooglePlayReferrer from '../../../modules/expo-google-play-referrer'
|
||||||
|
|
||||||
|
export function useStarterPackEntry() {
|
||||||
|
const [ready, setReady] = React.useState(false)
|
||||||
|
const setUsedStarterPack = useSetUsedStarterPack()
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
;(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
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
export function useStarterPackEntry() {
|
||||||
|
const [ready, setReady] = React.useState(false)
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
;(async () => {
|
||||||
|
setReady(true)
|
||||||
|
})()
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return ready
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export function useStarterPackEntry() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user