···11import {useEffect, useReducer, useState} from 'react'
22import {AppState, type AppStateStatus, View} from 'react-native'
33+import ReactNativeDeviceAttest from 'react-native-device-attest'
34import Animated, {FadeIn, LayoutAnimationConfig} from 'react-native-reanimated'
45import {AppBskyGraphStarterpack} from '@atproto/api'
56import {msg, Trans} from '@lingui/macro'
67import {useLingui} from '@lingui/react'
7889import {FEEDBACK_FORM_URL} from '#/lib/constants'
1010+import {logger} from '#/logger'
1111+import {isAndroid} from '#/platform/detection'
912import {useServiceQuery} from '#/state/queries/service'
1013import {useStarterPackQuery} from '#/state/queries/starter-packs'
1114import {useActiveStarterPack} from '#/state/shell/starter-pack'
···2629import {LinearGradientBackground} from '#/components/LinearGradientBackground'
2730import {InlineLinkText} from '#/components/Link'
2831import {Text} from '#/components/Typography'
3232+import {GCP_PROJECT_ID} from '#/env'
2933import * as bsky from '#/types/bsky'
30343135export function Signup({onPressBack}: {onPressBack: () => void}) {
···99103 )
100104101105 return () => subscription.remove()
106106+ }, [])
107107+108108+ // On Android, warmup the Play Integrity API on the signup screen so it is ready by the time we get to the gate screen.
109109+ useEffect(() => {
110110+ if (!isAndroid) {
111111+ return
112112+ }
113113+ ReactNativeDeviceAttest.warmupIntegrity(GCP_PROJECT_ID).catch(err =>
114114+ logger.error(err),
115115+ )
102116 }, [])
103117104118 return (