Skip to content

React Native Quick Start

Installation

# Core SDK
yarn add @squad-sports/core @squad-sports/react-native

# Required peer dependencies
yarn add @react-navigation/native @react-navigation/native-stack \
  react-native-screens react-native-safe-area-context \
  react-native-gesture-handler react-native-reanimated \
  @react-native-async-storage/async-storage \
  @gorhom/bottom-sheet recoil \
  expo-av expo-image expo-secure-store \
  @twilio/voice-react-native-sdk

Basic Integration

import { SquadExperience } from '@squad-sports/react-native';

export default function App() {
  return (
    <SquadExperience
      partnerId="acme-sports"
      apiKey="sqk_live_..."
      onReady={() => console.log('Squad ready')}
      onError={(err) => console.error('Squad error:', err)}
    />
  );
}

That's it. The SDK handles navigation, auth, theming, and all features.

With Partner Auth (No Login Screen)

<SquadExperience
  partnerId="acme-sports"
  apiKey="sqk_live_..."
  userData={{
    email: currentUser.email,
    displayName: currentUser.name,
    externalUserId: currentUser.id,
  }}
/>

With Ticketmaster SSO

<SquadExperience
  partnerId="acme-sports"
  apiKey="sqk_live_..."
  ssoToken={ticketmasterAccessToken}
  ssoProvider="ticketmaster"
/>

Props

Prop Type Required Description
partnerId string yes* Your partner ID
apiKey string yes* Your API key
userData PartnerUserData no User data for seamless auth
ssoToken string no External SSO token
ssoProvider string no "ticketmaster", "oauth2", "custom"
config SquadSDKConfig yes* Full config (alternative to partnerId)
onReady () => void no Called when SDK is initialized
onError (error: Error) => void no Called on init failure

*Either partnerId + apiKey or config is required.

Embedding in an Existing App

If Squad is one tab in your app (not the root):

import { SquadExperience } from '@squad-sports/react-native';

function SquadTab() {
  return (
    <SquadExperience
      partnerId="acme-sports"
      apiKey="sqk_live_..."
      userData={{ email: user.email, displayName: user.name }}
    />
  );
}

// In your tab navigator:
<Tab.Screen name="Squad" component={SquadTab} />

The SDK uses its own NavigationContainer with independent={true}, so it won't conflict with your app's navigation.