eduardweb.
Expo & EASAvansat#react-native#android#revenuecat#ios#expo-eas

In-app purchases cu RevenueCat în Expo: Ghid practic pentru EAS și Sandbox

De Ioana Marinescu, 4 iul. 2026 · 12 vizualizări · 3 like-uri

Postat 4 iul. 2026
typescript
import { useEffect } from 'react';
import { Platform } from 'react-native';
import Purchases from 'react-native-purchases';

const API_KEYS = {
  apple: "appl_api_key_here",
  google: "goog_api_key_here"
};

export const useRevenueCat = () => {
  useEffect(() => {
    const init = async () => {
      // Activează logurile doar în dev pentru debugging
      if (__DEV__) {
        await Purchases.setLogLevel(Purchases.LOG_LEVEL.DEBUG);
      }
      
      if (Platform.OS === 'ios') {
        await Purchases.configure({ apiKey: API_KEYS.apple });
      } else if (Platform.OS === 'android') {
        await Purchases.configure({ apiKey: API_KEYS.google });
      }
    };
    init().catch(console.error);
  }, []);

  const purchasePackage = async (pack: any) => {
    try {
      const { customerInfo } = await Purchases.purchasePackage(pack);
      return customerInfo.entitlements.active['premium_access'] !== undefined;
    } catch (e: any) {
      if (!e.userCancelled) {
        console.error("Eroare la achiziție:", e);
      }
      return false;
    }
  };

  return { purchasePackage };
};

Am integrat de curând abonamentele într-o aplicație Expo cu peste 15.000 de utilizatori activi și am vrut să-mi smulg părul din cap. Dacă ai încercat vreodată să gestionezi manual storekit-ul de la Apple și billing-ul de la Google în același timp, știi exact despre ce vorbesc. Salvarea mea a fost RevenueCat, dar chiar și așa, setup-ul în Expo EAS are câteva chichițe care te pot bloca zile întregi dacă nu ești atent.

De ce moare Expo Go și cum te salvează EAS Build

Primul lucru pe care trebuie să-l înțelegi e că nu poți testa in-app purchases în Expo Go. Pur și simplu nu are cum să comunice cu sandbox-ul de la Google Play sau App Store direct dintr-un client generic. Trebuie să treci pe un Development Build personalizat folosind EAS.

Am adăugat react-native-purchases în proiect și am configurat plugin-ul în app.json. Atenție mare aici: dacă uiți să rulezi eas build --profile development după ce adaugi plugin-ul, o să primești erori criptice de tipul "Purchases is undefined". Practic, EAS compilează nativ SDK-ul de la RevenueCat în build-ul tău de test, lucru pe care Expo Go nu îl poate face nativ.

Configurarea Apple și Google (Partea unde chiar pierzi timp)

Aici e durerea cea mai mare și locul unde se pierd cele mai multe ore de debug. În Apple App Store Connect, trebuie să creezi un App-Specific Shared Secret și să-l pui în dashboard-ul RevenueCat. Fără el, Apple nu va valida tranzacțiile în sandbox.

Pe Google Play Store, treaba e și mai birocratică. Ai nevoie de un Service Account Key în Google Cloud, căruia trebuie să-i dai drepturi de "Financial data" în Google Play Console. Mie mi-a luat vreo 3 ore doar să se propage permisiunile acelea de la Google, așa că nu te panica dacă primești erori de autentificare în primele ore. E doar latența lor clasică.

În RevenueCat, creezi "Entitlements" (de exemplu, premium_access) și le legi de "Offerings" și "Packages". Asta îți permite să schimbi prețurile sau structura de paywall direct din dashboard-ul lor, fără să mai urci o nouă versiune de aplicație în store-uri. Am economisit cam 30% din timpul de deploy doar din chestia asta.

Cum testezi sandbox corect

Pentru iOS, folosește un cont de Sandbox Tester creat în App Store Connect. Pe un device fizic (nu simulator, că dă rateuri la storekit), te loghezi cu acel cont doar în secțiunea "Sandbox Account" din setările telefonului, nu ca Apple ID principal.

Pe Android, adaugă adresa ta de email în lista de "License Testers" din Google Play Console. Asigură-te că folosești o versiune de build care are același applicationId și versiune de cod cu ce ai urcat în Internal Testing pe Google Play, altfel Google îți va bloca cumpărăturile cu erori generice.

Trade-off-ul sincer

RevenueCat e genial pentru că abstractizează toată mizeria de validare a chitanțelor pe server-side și îți dă webhook-uri curate. Totuși, ai un cost: e gratuit doar până la 10.000 de dolari venituri lunare (MVR). După aceea, încep să-ți ia comision. Pentru startup-uri la început e un no-brainer, dar dacă ai volum mare, s-ar putea să vrei să-ți scrii propriul backend de validare ca să nu le plătești taxa.

Voi cum gestionați abonamentele în Expo? Ați rămas pe RevenueCat sau ați trecut pe o soluție custom după ce a crescut aplicația?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.