RevenueCat credit packages yapılandırma
Dashboard ve ürün kimliği yapılandırması
RevenueCat ve Credit Packages Konfigürasyon Rehberi
Bu dokümantasyon, Allmine API projesinde RevenueCat ile kredi paketleri sisteminin konfigürasyonunu adım adım açıklar.
İçindekiler
- Genel Bakış
- RevenueCat Konfigürasyonu
- Credit Packages Konfigürasyonu
- Environment Variables Referansı
- Store Type Eşleştirmesi
- Product ID vs Store Identifier
- Konfigürasyon Kontrol Listesi
- Sorun Giderme
Genel Bakış
Sistem, RevenueCat API v2 üzerinden satın alma işlemlerini yönetir ve webhook ile gelen purchase event'lerini işleyerek kullanıcılara otomatik kredi ekler.
[Mobil Uygulama] → [App Store / Play Store] → [RevenueCat] → [Webhook] → [Allmine API] → [MongoDB]Mimari Özeti
| Bileşen | Açıklama |
|---|---|
| RevenueCat | Çoklu platform satın alma yönetimi (Apple, Google, Test Store, Web) |
| Credit Package | Veritabanındaki kredi paketi tanımı (revenuecatProductId, storeIdentifier, creditAmount) |
| Webhook | RevenueCat'ten gelen satın alma event'lerinin işlenmesi |
RevenueCat Konfigürasyonu
1. RevenueCat Hesap ve Proje Kurulumu
- RevenueCat üzerinden hesap oluşturun
- Yeni proje oluşturun
- Project Settings → Project ID'yi kopyalayın (
proj_xxxxxxxxxxxxxformatında)
2. API Key Oluşturma
- RevenueCat Dashboard → Project Settings → API Keys
- "New" butonuna tıklayın
- Version: V2 seçin
- Gerekli izinler:
project_configuration:products:read_writeproject_configuration:apps:readcustomer_information:customers:read
- Secret Key'i kopyalayın ve güvenli saklayın (sadece bir kez gösterilir)
3. App ID'leri Alma
Her store tipi için ayrı App ID gerekir:
| Store | Dashboard Yolu | Format |
|---|---|---|
| Test Store | Apps → Test Store | appae0e1f5439 veya app_xxx |
| Apple | Apps → iOS App | appd24d573b8b veya app_xxx |
| Apps → Android App | app_xxx (opsiyonel) | |
| Web | Apps → Web App | app_xxx (opsiyonel) |
4. Webhook Konfigürasyonu
- Project Settings → Webhooks → Add Webhook
- URL:
https://your-domain.com/api/revenuecat/webhook - Authentication: Bearer token ile
REVENUECAT_WEBHOOK_SECRETkullanılır - Events: En azından şunları seçin:
INITIAL_PURCHASE(zorunlu)NON_RENEWING_PURCHASE(kredi paketleri için)
Not: RevenueCat webhook isteklerinde
Authorization: Bearer <REVENUECAT_WEBHOOK_SECRET>header'ı beklenir.
Credit Packages Konfigürasyonu
Veritabanı Şeması
Credit Package şeması (credit-package.schema.ts):
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
creditAmount | number | ✓ | Kredi miktarı (örn: 100, 500, 1000) |
revenuecatProductId | string | ✓ | RevenueCat Product ID (örn: prod1a2b3c4d5) |
storeIdentifier | string | ✓ | Store'daki ürün tanımlayıcı (örn: credit100) |
storeType | string | - | apple, google, test, web |
Store'a Göre Store Identifier Formatları
| Store | Örnek Format | Açıklama |
|---|---|---|
| Apple | com.allmine.credits.100 veya credit100 | App Store Connect'te tanımlı product ID |
credits_100 veya credit100 | Play Console'da tanımlı product ID | |
| Test | test_credits_100 veya credit100 | Test Store için |
| Web | web_credits_100 | Web satın alma için |
Kredi Paketi Oluşturma Akışı
- RevenueCat Dashboard'da veya store'da ürünü oluşturun
revenuecatProductIddeğerini RevenueCat'ten alın (genellikleprodile başlar)- API üzerinden paketi oluşturun:
curl -X POST https://your-domain.com/api/credit-packages \
-H "Authorization: Bearer <ADMIN_JWT>" \
-H "Content-Type: multipart/form-data" \
-F "creditAmount=100" \
-F "storeIdentifier=credit100" \
-F "storeType=apple" \
-F "revenuecatProductId=prode52bdad1dc"Environment Variables Referansı
Zorunlu Değişkenler
# RevenueCat temel konfigürasyon
REVENUECAT_SECRET_KEY=sk_xxxxxxxxxxxxx
REVENUECAT_PROJECT_ID=proj_xxxxxxxxxxxxx
# Store App ID'leri (Test ve Apple zorunlu)
REVENUECAT_APP_ID_TEST=appae0e1f5439
REVENUECAT_APP_ID_APPLE=appd24d573b8bOpsiyonel Değişkenler
# Webhook doğrulama (Production'da önerilir)
REVENUECAT_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxx
# API base URL (varsayılan: https://api.revenuecat.com/v2)
REVENUECAT_BASE_URL=https://api.revenuecat.com/v2
# Opsiyonel store App ID'leri
REVENUECAT_APP_ID_GOOGLE=app_xxxxxxxxxxxxx
REVENUECAT_APP_ID_WEB=app_xxxxxxxxxxxxxValidation Kuralları (Joi)
| Değişken | Validation |
|---|---|
REVENUECAT_SECRET_KEY | string, required |
REVENUECAT_PROJECT_ID | string, required |
REVENUECAT_WEBHOOK_SECRET | string, optional |
REVENUECAT_BASE_URL | URI, default: https://api.revenuecat.com/v2 |
REVENUECAT_APP_ID_TEST | string, required |
REVENUECAT_APP_ID_APPLE | string, required |
REVENUECAT_APP_ID_GOOGLE | string, optional |
REVENUECAT_APP_ID_WEB | string, optional |
Store Type Eşleştirmesi
RevenueCat webhook'unda gelen store değeri ile sistemin storeType değeri eşleştirilir:
| RevenueCat (Webhook) | Allmine (storeType) |
|---|---|
APP_STORE | apple |
PLAY_STORE | google |
TEST_STORE | test |
WEB | web |
App ID Seçimi
Kredi paketi oluşturulurken storeType'a göre otomatik App ID seçilir:
| storeType | Environment Variable |
|---|---|
test | REVENUECAT_APP_ID_TEST |
apple | REVENUECAT_APP_ID_APPLE |
google | REVENUECAT_APP_ID_GOOGLE |
web | REVENUECAT_APP_ID_WEB |
Product ID vs Store Identifier
Sistemde iki farklı product tanımlayıcı kullanılır:
| Terim | Açıklama | Örnek | Kullanım Yeri |
|---|---|---|---|
| storeIdentifier | App Store / Play Store'daki ürün ID'si | credit100 | Webhook'taki product_id ile eşleşir; veritabanında CreditPackage.storeIdentifier |
| revenuecatProductId | RevenueCat Dashboard'daki Product ID | prode52bdad1dc | API yanıtlarında; RevenueCat entegrasyonu için |
Önemli: RevenueCat webhook'unun
product_idalanı genellikle storeIdentifier değerine karşılık gelir. Credit package lookup bu değer üzerinden yapılır.
Konfigürasyon Kontrol Listesi
Başlamadan Önce
- RevenueCat hesabı oluşturuldu
- Proje oluşturuldu ve Project ID alındı
- API Key (V2) oluşturuldu ve Secret Key kaydedildi
Environment Ayarları
-
REVENUECAT_SECRET_KEY.env'e eklendi -
REVENUECAT_PROJECT_ID.env'e eklendi -
REVENUECAT_APP_ID_TEST.env'e eklendi -
REVENUECAT_APP_ID_APPLE.env'e eklendi -
REVENUECAT_WEBHOOK_SECRET.env'e eklendi (Production için)
RevenueCat Dashboard
- Test Store app eklendi
- Apple app eklendi (App Store Connect ile bağlandı)
- Webhook oluşturuldu ve URL ayarlandı
- Webhook secret kopyalandı
Store Ürünleri
- App Store Connect'te consumable ürünler oluşturuldu
- RevenueCat'te ürünler eşleştirildi veya Virtual Currency olarak tanımlandı
- Kredi paketleri Allmine API ile oluşturuldu
Test
-
GET /api/credit-packagespaketleri listeliyor - Webhook test event'i başarılı yanıt veriyor
- Gerçek test satın alma kredileri ekliyor
Sorun Giderme
"RevenueCat configuration is missing"
Sebep: Config validation başarısız (eksik veya hatalı env değişkenleri).
Çözüm:
.envdosyasını kontrol edin- Zorunlu değişkenlerin hepsinin tanımlı olduğundan emin olun
- Uygulamayı yeniden başlatın
"Webhook secret not configured" / "Invalid RevenueCat webhook"
Sebep: REVENUECAT_WEBHOOK_SECRET tanımlı değil veya RevenueCat Dashboard'daki secret ile eşleşmiyor.
Çözüm:
REVENUECAT_WEBHOOK_SECRETenv'e ekleyin- Webhook endpoint'i
Authorization: Bearer <secret>bekler; RevenueCat bu header'ı otomatik ekler - Dashboard'dan webhook secret'ı tekrar kopyalayın
"Credit package not found for product ID"
Sebep: Webhook'taki product_id, veritabanındaki herhangi bir storeIdentifier ile eşleşmiyor.
Çözüm:
- RevenueCat'ten gelen
product_iddeğerini loglayın - Credit package oluştururken
storeIdentifierolarak bu değeri kullanın - Aynı storeType ile eşleşen paket olup olmadığını kontrol edin
"Google Play Store app ID is not configured"
Sebep: storeType: google ile paket oluşturuluyor ancak REVENUECAT_APP_ID_GOOGLE tanımlı değil.
Çözüm:
.env'eREVENUECAT_APP_ID_GOOGLE=app_xxxekleyin- Veya sadece Apple/Test store kullanıyorsanız, Google paketi oluşturmayın
Transaction duplicate / idempotency
Sistem event.id ile duplicate event'leri filtreler. Aynı event tekrar gelirse işlenmez.
Ek Kaynaklar
- Entegrasyon Rehberi - API endpoint'leri, kullanım örnekleri
- RevenueCat API v2
- RevenueCat Webhooks