Health-Score

STORE_RELEASE.md — App Store & Play Store Çıkış Rehberi

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.


0. Yapıldı (kod tarafı, bu PR)


0.1 ⚠️ YAYIN ÖNCESİ: 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.


0.2 AI modeli (Gemini ↔ Claude) — Admin panelden değiştirilebilir

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).


1. ÖNCE: Güvenlik — Gemini anahtarını döndür (ACİL)

eas.json içinde commit edilmiş olan Gemini API anahtarı (AIzaSyB3U_...) git geçmişinde ve eski build’lerde sızmış durumda. Mutlaka:

  1. Google AI Studio → eski anahtarı sil/iptal et, yeni anahtar oluştur.
  2. Yeni anahtarı Firebase Functions secret’ı olarak gir:
    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.)


2. Hesaplar & SDK kurulumları

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.

3. Ürün (IAP) tanımları — RevenueCat + Store

src/services/revenuecat.ts içindeki ürün kimlikleriyle birebir aynı olmalı:

Adımlar:

  1. App Store Connect ve Play Console’da bu ürünleri oluştur (fiyat, açıklama).
  2. RevenueCat’te premium adında bir entitlement ve default offering oluştur; ürünleri ekle.
  3. default offering paketleri: $rc_monthly, $rc_annual, ve token paketi.

⚠ Token paketleri (consumable): Şu an grantTokenPack callable 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 REST subscribers doğrulaması). Doğrulama eklenene kadar prod’da token paketi satışını açma. Abonelik (premium) bu sorundan etkilenmez — premium RevenueCat entitlement’ından okunur.


4. Ortam değişkenleri (EAS secrets / .env)

.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

5. app.json — gerçek ID’leri doldur


6. Zorunlu yasal & mağaza gereksinimleri


7. Build & Submit (EAS)

# İ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.


8. Çıkış öncesi son kontrol (QA — gerçek cihaz)