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

Setup-ul de In-App Purchases în Expo cu RevenueCat nu trebuie să fie un coșmar

De Liliana Ghiță, 29 mai 2026 · 6 vizualizări · 3 like-uri

Postat 29 mai 2026
typescript
import Purchases, { CustomerInfo } from 'react-native-purchases';
import { Platform } from 'react-native';

const API_KEYS = {
  apple: "appl_your_apple_api_key",
  google: "goog_your_google_api_key"
};

export const initializeBilling = async (): Promise<void> => {
  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 });
  }
};

export const checkSubscriptionStatus = async (): Promise<boolean> => {
  try {
    const customerInfo: CustomerInfo = await Purchases.getCustomerInfo();
    return customerInfo.entitlements.active["pro_tier"] !== undefined;
  } catch (e) {
    console.error("Eroare la verificarea abonamentului:", e);
    return false;
  }
};

Am integrat plăți in-app în vreo 5 aplicații Expo până acum și, dacă e un lucru pe care l-am învățat, e că nu vrei să-ți scrii propriul backend pentru asta. StoreKit și Google Play Billing au atât de multe edge-case-uri (refunds, grace periods, family sharing) încât îți mănâncă jumătate din timpul de developpement. De asta am mers pe RevenueCat la ultimele proiecte, inclusiv la un app cu peste 10k useri activi unde am redus timpul de implementare cu cel puțin 70%.

Dar în Expo lucrurile sunt puțin mai nuanțate din cauza build-urilor native. Nu poți testa plăți în Expo Go, așa că primul pas e să te împrietenești cu EAS Build și cu dev clients.

Configurația în Expo și Config Plugins

Deoarece SDK-ul de la RevenueCat (react-native-purchases) conține cod nativ, ai nevoie de un Custom Dev Client. Nu te speria, cu EAS Build e destul de simplu. Adaugi librăria și o configurezi ca plugin în app.json.

Marea șmecherie aici e să te asiguri că ai configurat corect schemele de URL și permisiunile, mai ales pe Android unde Google e foarte strict cu permisiunea de BILLING. Totul se rezolvă prin config plugin-ul nativ pe care RevenueCat îl oferă direct out-of-the-box.

Coșmarul numit "Sandbox Testing"

Dacă setup-ul de cod îți ia două ore, testarea o să-ți ia două zile. Am pățit-o pe propria piele. Pe iOS, sandbox-ul Apple are momente când pur și simplu refuză să valideze tranzacțiile fără niciun motiv logic. Sfatul meu: creează-ți mereu 2-3 conturi de sandbox tester în App Store Connect și nu folosi niciodată contul tău personal de iCloud pentru teste.

Pe Android, procesul e și mai ciudat. Ca să testezi în Google Play Console, trebuie să uploadezi un build de tip .aab în Internal Testing track, să adaugi adresa de mail a testerului în listă, să accepți invitația de pe telefonul fizic și abia apoi poți face achiziții de test. Dacă sari un singur pas, Google o să-ți dea o eroare generică de tipul "Item not found" care te va trimite pe piste greșite ore întregi.

Trade-off-urile RevenueCat

Să fim sinceri. RevenueCat e genial până la un punct. Îți oferă dashboard, grafice de conversie, webhook-uri gata făcute și îți salvează săptămâni de muncă pe backend.

Dar există și dezavantaje. Modelul lor de pricing s-a schimbat recent. E gratuit până la 10.000 USD încasări lunare (ceea ce e super pentru bootstrapping), dar apoi te taxează cu un procent destul de piperat din tranzacții. În plus, ești blocat în ecosistemul lor. Dacă vrei vreodată să pleci de la ei, migrarea tuturor token-urilor de achiziție către propriul server este un proces birocratic și tehnic destul de dureros.

Voi ce folosiți pentru IAP în React Native? Ați rămas pe RevenueCat sau ați trecut la alternative gen Adapty sau chiar integrări custom pe serverul vostru?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

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