React Native / Expo
newUse refirebase em projetos mobile com os mesmos imports do web.
Zero fricção — mesmo import em qualquer plataforma
Não existe mais alias separado. O mesmo import { Refirebase } from 'refirebase' funciona em Next.js, Vite, Expo e React Native bare. O Metro bundler lê a condição react-native no package.json e resolve automaticamente para o bundle nativo.
mesmo import
// ✅ Mesmo import — funciona em web E mobile sem mudar nada
import { Refirebase } from 'refirebase';
import { RefirebaseProvider, useAuth, useCollection } from 'refirebase/react';Como funciona internamente
resolução automática
// Metro (React Native / Expo) lê a condição "react-native" no package.json:
// "react-native" → ./dist/native/index.js (NativeFirebaseAuth)
// "import" → ./dist/index.js (FirebaseAuth com popup)
// O resultado: mesmos imports, implementação correta para cada bundler.ℹ
O bundle nativo usa
signInWithCredential ao invés de signInWithPopup (que não existe em React Native). Firestore, Realtime Database e Storage são idênticos.A única diferença: como você obtém o token
A única coisa específica de mobile é o passo de autenticação com o SDK nativo (Google, Facebook, etc.) para obter um token. O refirebase recebe esse token e completa o sign-in — a API é a mesma.
diferença real
// A ÚNICA diferença é como você obtém o token do provider nativo.
// O SDK nativo (ex: @react-native-google-signin) faz o OAuth,
// você só passa o token para o Refirebase:
import { GoogleSignin } from '@react-native-google-signin/google-signin';
const { user, signInWithGoogle } = useAuth();
const handleGoogleLogin = async () => {
const { idToken } = await GoogleSignin.signIn(); // ← SDK nativo
await signInWithGoogle({ idToken }); // ← refirebase
};Setup no Expo (Expo Router)
app/firebase.ts
// app/firebase.ts (Expo / React Native)
import { Refirebase } from 'refirebase'; // ← mesmo import do web!
export const firebase = new Refirebase({
apiKey: process.env.EXPO_PUBLIC_FIREBASE_API_KEY,
authDomain: process.env.EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN,
// ... demais chaves
});
export const { db, auth } = firebase;app/_layout.tsx
// app/_layout.tsx (Expo Router)
import { RefirebaseProvider } from 'refirebase/react'; // ← mesmo import do web!
import { firebase } from './firebase';
export default function RootLayout() {
return (
<RefirebaseProvider instance={firebase}>
<Stack />
</RefirebaseProvider>
);
}O que é diferente entre web e mobile?
| Param | Type | Description |
|---|---|---|
Auth de provider | handleGoogleSignIn({ idToken }) | Mobile usa signInWithCredential — você passa o token do SDK nativo. |
Auth de email | Idêntico | handleEmailSignIn, handleEmailSignUp, handlePasswordReset — zero diferença. |
Firestore | Idêntico | get, subscribe, add, set, update, delete — sem diferença. |
Realtime DB | Idêntico | set, get, push, onValue, onChildAdded — sem diferença. |
Storage upload | uriToBlob helper | Expo devolve URIs de arquivo. Use uriToBlob (de refirebase) para converter para Blob antes de upload. |
Hooks React | Idêntico | useAuth, useCollection, useDocument, useValue, usePagination, useUploadTask, usePresence. |