eduardweb.
Expo & EASAvansat#react-native#expo#revenuecat#eas-build#monetization

RevenueCat + Expo: Cum am configurat IAP și abonamente fără să-mi pierd mințile

De Teodor Pascu, 22 iul. 2026 · 11 vizualizări · 3 like-uri

Postat 22 iul. 2026
typescript
import Purchases, { PurchasesPackage } from 'react-native-purchases';
import { Platform } from 'react-native';

const API_KEYS = {
  apple: 'appl_xxxxxxxxxxxxxxxxx',
  google: 'goog_xxxxxxxxxxxxxxxxx',
};

export const setupPurchases = async (userId?: string) => {
  Purchases.setLogLevel(Purchases.LOG_LEVEL.DEBUG);
  
  const apiKey = Platform.select({
    ios: API_KEYS.apple,
    android: API_KEYS.google,
  });

  if (!apiKey) return;

  await Purchases.configure({ apiKey, appUserID: userId });
};

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

Am integrat recent abonamente in-app pe o aplicație de fitness scrisă în Expo, având în jur de 12k utilizatori activi lunar. Dacă ai încercat vreodată să gestionezi validate de chitanțe, webhook-uri de expirare și grace periods separat pentru StoreKit 2 și Google Play Billing, știi deja că e o groapă fără fund. Am economisit lejer 2-3 săptămâni de muncă pe backend folosind RevenueCat.

Trebuie să știi de la început trade-off-ul: RevenueCat e moca până faci $2.5k MWR, după care îți ia cota parte (1%). Pentru majoritatea proiectelor la început, scorul ăsta e mai mult decât cinstit la câtă durere de cap îți ia de pe cap.

Configurarea în Expo (Bye Expo Go)

Evident, chestia asta nu merge în Expo Go. Va trebui să folosești un Development Client creat cu EAS Build (eas build --profile development).

Instalezi SDK-ul oficial react-native-purchases și pui plugin-ul în app.json. Atenție mare la permisiuni pe Android — SDK-ul își adaugă singur permisiunea de BILLING, dar trebuie să te asiguri că nu ai versiuni vechi de librării care să creeze conflicte la build-ul nativ.

{
  "expo": {
    "plugins": [
      [
        "react-native-purchases",
        {
          "apiKey": "YOUR_REVENUECAT_PUBLIC_API_KEY"
        }
      ]
    ]
  }
}

Capcane pe Apple Store Connect

Pe iOS, 80% din probleme vin din hârțogăria Apple, nu din cod. Prima chestie peste care am dat de gard: dacă nu ai semnat acordul de Paid Apps în App Store Connect (secțiunea Agreements, Tax, and Banking), SDK-ul va arunca erori kryptice de genul SKErrorDomain Code=0 sau nu va returna niciun produs.

În RevenueCat creezi un Entitlement (ex: pro_access) și legi de el produsul creat în Apple Store Connect (ex: com.app.monthly_pro).

Mizeria din Google Play Console

Android e și mai pretențios la prima configurare. Trebuie să creezi un Service Account în Google Cloud Console, să-i dai acces de Admin în Play Console și să legi cheia JSON în dashboard-ul RevenueCat.

Partea unde am pierdut jumătate de zi: abonamentele noi create în Google Play nu pot fi cumpărate dacă aplicația nu are cel puțin un build urcat într-un track de test (Internal Testing) și aprobat de Google. Până nu pui un APK/AAB acolo, API-ul de Billing va returna listă goală de produse.

Cum testezi fără să-ți falimentezi cardul

Pentru iOS, folosește conturi de Sandbox Testers din App Store Connect. Trucul fain la sandbox pe iOS e că un abonament lunar expiră în 5 minute și se reînnoiește de maxim 5 ori, deci poți testa retenția și churn-ul super rapid.

Pe Android, adaugi adresa de email a testerului în License Testing în Play Console. La fel, cumpărăturile sunt simulate și abonamentele expiră la fiecare câteva minute.

Nu uita să apelezi Purchases.restorePurchases() pe un buton dedicat din UI. Apple te va respinge garantat la Review dacă nu ai opțiune vizibilă de "Restore Purchases".

Voi ce folosiți pentru IAP în React Native? Ați rămas pe variante custom cu webhook-uri proprii sau ați trecut toți pe RevenueCat / Adapty?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

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