Bu doküman, Sağlık Skoru‘nu Apple App Store ve Google Play’e çıkarmak için gereken adımları sıralar. Kod tarafı (bu PR ile) hazırlanmıştır; aşağıdaki maddeler senin hesaplarınla yapman gereken işlerdir.
bundleIdentifier, kamera/foto/tracking izin metinleri, usesNonExemptEncryption: false.EXPO_PUBLIC_IAP_SIMULATION env’ine bağlandı (prod’da kapalı).deleteAccount callable) eklendi (Apple & Google zorunlu).EXPO_PUBLIC_ADMOB_REWARDED).EXPO_PUBLIC_GEMINI_API_KEY eas.json‘dan kaldırıldı.functions/.env içindeki IAP_SIMULATION=1‘i KAPATŞu an test için functions/.env dosyasında IAP_SIMULATION=1 var — bu, simülasyon
satın almalarının token/premium kredilemesini sağlıyor. Gerçek yayından önce 0 yap
(veya satırı sil) ve firebase deploy --only functions çalıştır. Aksi halde kullanıcı bu
callable’ları çağırıp bedava token/premium üretebilir. Gerçek premium, RevenueCat
entitlement + webhook’tan gelir.
Admin Paneli → Yapay Zekâ Modeli kartından sağlayıcıyı (Gemini/Claude) ve modeli canlıda değiştirebilirsin (yeniden deploy gerekmez, ~1 dk içinde etkinleşir).
GEMINI_API_KEY secret’ı yeterli (mevcut).ANTHROPIC_API_KEY secret’ını gerçek anahtarınla ayarla, sonra deploy et:
firebase functions:secrets:set ANTHROPIC_API_KEY # $5'lık Claude anahtarını gir
firebase deploy --only functions:analyzeProduct
(Şu an placeholder ayarlı; Claude’a geçmeden gerçek anahtarı girmezsen Claude çağrıları hata verir, Gemini çalışmaya devam eder.)
eas.json içinde commit edilmiş olan Gemini API anahtarı (AIzaSyB3U_...) git geçmişinde
ve eski build’lerde sızmış durumda. Mutlaka:
firebase functions:secrets:set GEMINI_API_KEY
firebase deploy --only functions
(Backend analyzeProduct artık bu secret’ı kullanıyor; istemciye anahtar GÖNDERİLMİYOR.)
| Servis | Yapılacak |
|---|---|
| Apple Developer | Hesap (99$/yıl). App Store Connect’te uygulama kaydı (com.wyclaew.saglikskoru). |
| Google Play Console | Hesap (tek seferlik 25$). Uygulama kaydı (com.wyclaew.saglikskoru). |
| RevenueCat | Proje aç, Apple/Google app’lerini bağla, API anahtarlarını al. |
| AdMob | Uygulama + “Rewarded” reklam birimi oluştur, App ID + Unit ID al. |
| Firebase | google-services.json (Android) zaten var. iOS için GoogleService-Info.plist indir/ekle. |
src/services/revenuecat.ts içindeki ürün kimlikleriyle birebir aynı olmalı:
healthscore_premium_monthly (auto-renewable subscription)healthscore_premium_yearly (auto-renewable subscription)healthscore_100_tokens (consumable)Adımlar:
premium adında bir entitlement ve default offering oluştur; ürünleri ekle.default offering paketleri: $rc_monthly, $rc_annual, ve token paketi.⚠ Token paketleri (consumable): Şu an
grantTokenPackcallable yalnızca simülasyon/admin’de token verir. Gerçek parayla token satışından önce, satın almayı sunucuda doğrulamak gerekir (RevenueCat webhook → Firestore, veya RevenueCat RESTsubscribersdoğrulaması). Doğrulama eklenene kadar prod’da token paketi satışını açma. Abonelik (premium) bu sorundan etkilenmez — premium RevenueCat entitlement’ından okunur.
.env (gitignore) ve EAS’te ayarla:
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=...
EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID=...
EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=...
EXPO_PUBLIC_REVENUECAT_GOOGLE_KEY=...
EXPO_PUBLIC_REVENUECAT_APPLE_KEY=...
EXPO_PUBLIC_ADMOB_REWARDED=ca-app-pub-XXXX/YYYY # gerçek rewarded unit id
eas.json: production profilinde EXPO_PUBLIC_IAP_SIMULATION=0 (gerçek IAP) ayarlı.IAP_SIMULATION secret’ını üretimde ayarlama (varsayılan kapalı = gerçek mod).plugins → react-native-google-mobile-ads → androidAppId / iosAppId: gerçek AdMob App ID‘leri
(ca-app-pub-...~...). Şu an placeholder.infoPlist izin metinlerini istersen yerelleştir.LoginScreen ve store metadata’sına ekle. App içinde kamera, AI analizi, reklam (AdMob), satın alma,
hesap verisi kullanıldığı belirtilmeli.# İlk kez kimlik bilgileri (sertifika/keystore) — EAS yönetir
eas credentials
# Test build (internal)
eas build --profile preview --platform android # APK
eas build --profile preview --platform ios # internal/TestFlight
# Üretim
eas build --profile production --platform all
eas submit --profile production --platform ios
eas submit --profile production --platform android
appVersionSource: remote + production autoIncrement ile sürüm/build numaraları EAS tarafından yönetilir.
tokens yazma denemesi reddediliyor (güvenlik).