One API on three platforms
AppleAuth.signIn(), the useAppleAuth hook and AppleButton have the same API on iOS, Android and web, and every platform returns the same credential shape.
EXPO SDK 58 · MODULES 2.0
One API and one Apple-style button for iOS, Android and web, with adapters for Supabase, Clerk and Firebase.
Requires Expo SDK 58. expo-apple-sign-in is built on Expo Modules 2.0, which earlier SDKs do not support, and Expo Go cannot load it, so iOS and Android need a development build.
Add "expo-apple-sign-in" to the plugins in app.json, build a development client, and render AppleButton. iOS signs in with your App ID; Android and web use the Services ID and redirect URI passed to AppleAuth.configure. The Quick start walks through each step.
import { useState, type ReactElement } from 'react'
import { Text, View } from 'react-native'
import { AppleAuth, AppleButton } from 'expo-apple-sign-in'
AppleAuth.configure({
clientId: 'com.example.app.web',
redirectUri: 'https://app.example.com/auth/callback',
})
export default function App(): ReactElement {
const [userId, setUserId] = useState<string | null>(null)
return (
<View style={{ flex: 1, justifyContent: 'center', gap: 16, padding: 24 }}>
<AppleButton onSuccess={(credential) => setUserId(credential.user.id)} />
<Text>{userId ? `Apple user ${userId}` : 'Signed out'}</Text>
</View>
)
}