Apple Authentication for React Native: Now with Android Support
If you've built a React Native app that uses "Sign in with Apple," you've probably been stuck on iOS only. That was the reality for a long time. But the folks at Invertase just shipped a major update to their react-native-apple-authentication library, and it finally brings Apple Authentication to Android.
This isn't just a port. It's a full implementation that respects Apple's design guidelines, handles edge cases, and works with your existing iOS setup. If you're building a cross-platform app and need to offer Apple sign-in on both platforms, this is the library you've been waiting for.
What It Does
react-native-apple-authentication provides a native React Native module for Apple Sign-In. It handles the full OAuth 2.0 flow, including credential state management, user detection, and error handling. The library wraps Apple's native APIs on iOS and uses a web-based flow on Android in a way that feels native.
Key capabilities:
- Sign in with Apple (full name, email, user ID)
- Credential state changes (signed in, revoked, authorized)
- User detection (is the user still signed in?)
- Custom button styling (Apple's guidelines)
- Works offline (cached credentials on iOS)
On Android, it uses a secure webview to complete the authentication, then returns the same data structure you'd get from iOS. No extra backend needed.
Why It's Cool
The most impressive part is how seamlessly it bridges the platform gap. On iOS, you get the native dialog with Touch ID/Face ID. On Android, users see a clean, Apple-branded web flow that feels just as smooth. The library handles all the OAuth redirects, state management, and token parsing for you.
But here's the real win: you write one authentication hook, and it works on both platforms. The API surface is identical. You don't need platform-specific code or conditionals. If you already have iOS auth set up, adding Android support is basically npm install and a config change.
The library also handles the tricky parts:
- Apple's private email relay (they generate a unique email per app per user)
- Credential sharing across your apps (if you use the same Apple developer team)
- Graceful degradation if the user cancels or rejects the flow
For a team shipping a cross-platform app that needs Apple Sign-In for compliance (like apps with social login that must also offer Apple sign-in), this is a massive time saver.
How to Try It
Getting started is straightforward. Assuming you already have a React Native project:
npm install @invertase/react-native-apple-authentication
For iOS, add the "Sign In with Apple" capability in Xcode (or use your Expo config plugin). For Android, you'll need to add your Apple developer credentials to the Android manifest (full docs in the repo).
Basic usage looks like this:
import appleAuth, {
AppleAuthRequestScope,
AppleAuthRequestOperation,
} from '@invertase/react-native-apple-authentication';
async function handleAppleSignIn() {
try {
const appleAuthRequestResponse = await appleAuth.performRequest({
requestedOperation: AppleAuthRequestOperation.LOGIN,
requestedScopes: [AppleAuthRequestScope.EMAIL, AppleAuthRequestScope.FULL_NAME],
});
const credentialState = await appleAuth.getCredentialStateForUser(appleAuthRequestResponse.user);
if (credentialState === appleAuth.State.AUTHORIZED) {
// User is authenticated
console.log('Apple ID:', appleAuthRequestResponse.user);
console.log('Email:', appleAuthRequestResponse.email);
console.log('Full Name:', appleAuthRequestResponse.fullName);
}
} catch (error) {
console.error('Apple Sign-In error:', error);
}
}
The repo has excellent TypeScript types, examples for both iOS and Android, and a demo app you can clone and run immediately.
Final Thoughts
This library is a perfect example of how a well-maintained open-source project can solve a genuinely annoying cross-platform problem. Apple Authentication on Android has been a missing piece for years, and the Invertase team delivered it without cutting corners. The flow feels right on both platforms, the API is clean, and the docs are solid.
If you're shipping a React Native app that needs Apple Sign-In, especially if you're targeting both iOS and Android users in a region like Japan or the EU where Apple's sign-in is practically required, this is the best solution I've seen. No hacky webview wrappers or custom backend. Just install, configure, and go.
Give it a shot. Your Android users will thank you.