RefirebaseRefirebase

React Native / Expo

new

Use 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?

ParamTypeDescription
Auth de providerhandleGoogleSignIn({ idToken })Mobile usa signInWithCredential — você passa o token do SDK nativo.
Auth de emailIdênticohandleEmailSignIn, handleEmailSignUp, handlePasswordReset — zero diferença.
FirestoreIdênticoget, subscribe, add, set, update, delete — sem diferença.
Realtime DBIdênticoset, get, push, onValue, onChildAdded — sem diferença.
Storage uploaduriToBlob helperExpo devolve URIs de arquivo. Use uriToBlob (de refirebase) para converter para Blob antes de upload.
Hooks ReactIdênticouseAuth, useCollection, useDocument, useValue, usePagination, useUploadTask, usePresence.