# 📘 ShiroginSDK Remote Config (v1.0.0) **Firebase Remote Config Integration • ServiceLocator Architecture • Local Fallback System** Bu doküman, **ShiroginSDK v1.0.0** sürümünde güncellenen Remote Config sistemini açıklar. Sistem, Firebase Remote Config verilerini dinamik olarak çeker, `RemoteConfigData` ile birleştirir ve local cache sayesinde offline durumda dahi çalışmaya devam eder. --- ## 🚀 1. Firebase Remote Config Kurulumu ### 🔹 Adım 1 — Firebase Projesini Aç 1. [https://console.firebase.google.com](https://console.firebase.google.com) adresine gidin. 2. Projenizi seçin ve sol menüden **Remote Config** sekmesini açın. --- ### 🔹 Adım 2 — Yeni Parametre veya Grup Oluştur Firebase Remote Config ekranında, SDK’daki `RemoteConfigData` değişkenlerini temsil edecek parametreleri oluşturun. #### 🖼️ Yeni Parametre Ekleme: ![Add-New-Variable](https://i.imgur.com/hgTGj6T.png) #### 🖼️ Yeni Grup Oluşturma: ![Add-New-Group](https://i.imgur.com/bPCWOGl.png) Parametrelerinizi mantıksal gruplar hâlinde düzenlemek, **ShiroginSDK**’nin `selectedRemoteGroup` seçeneğiyle eşleşmesini kolaylaştırır. --- ### 🔹 Adım 3 — JSON Formatı ile Firebase’e Aktarma `RemoteConfigDefinition` ScriptableObject üzerinden **Import from RemoteConfigData** butonu ile tüm değişkenleri otomatik olarak senkronize edebilirsiniz. Daha sonra **Copy JSON to Clipboard** diyerek aşağıdaki formatta Firebase’e yapıştırın: ![Add Remote Data](https://i.imgur.com/fG1pvw0.png) ```json { "shiroginsdk_remote_config": { "hp_scale": 100, "target_fps": 60, "rewarded_after_interstitial_time": 50 } } ```` --- ## ⚙️ 2. Sistem Mimarisi | Bileşen | Tür | Açıklama | | ----------------------- | ------------- | -------------------------------------------------------------- | | **RemoteConfigService** | `ServiceBase` | Firebase’den verileri çeker, cache’ler ve event yayınlar. | | **RemoteConfigData** | `BaseData` | Çekilen verilerin local kopyasını ve erişim API’sini tutar. | | **FirebaseService** | `ServiceBase` | Firebase bağlantı yönetimini sağlar. | | **IEventService** | `Interface` | Güncelleme event’lerini tetikler (`RemoteConfigUpdatedEvent`). | --- ## 🧠 3. Başlatma ve Yaşam Döngüsü Tüm servisler `ShiroginServiceRegistry` tarafından yönetilir: ```csharp ShiroginServiceRegistry.InitializeAll(); ``` Bu çağrı ile: * `FirebaseService` * `DataService` * `RemoteConfigService` * `EventService` otomatik olarak başlatılır ve `ServiceLocator`’a kaydedilir. --- ## 🔄 4. Çalışma Akışı ``` Firebase Remote Config ↓ RemoteConfigService (Fetch + Cache) ↓ RemoteConfigData (Merge) ↓ EventService → RemoteConfigUpdatedEvent ↓ SDK Modülleri (Economy, Ads, Gameplay) ``` --- ## 🧩 5. Kullanım ### 🔹 Verilere Erişim Artık `ServiceLocator` tabanlı erişim kullanılır: ```csharp var dataService = ServiceLocator.Get(); var config = dataService.Get(); int hpScale = config.GetInt("hp_scale", 100); float fps = config.GetFloat("target_fps", 60f); string storeJson = config.GetString("store_data"); ``` --- ### 🔹 Firebase’den Manuel Veri Yenileme ```csharp var remoteConfig = ServiceLocator.Get(); remoteConfig.ForceRefresh(); ``` Bu işlem, Firebase’den en son JSON’u çeker, cache’i günceller ve otomatik olarak `RemoteConfigUpdatedEvent` yayınlar. --- ### 🔹 Event Dinleme Güncellenmiş Remote Config verisini yakalamak için: ```csharp var eventService = ServiceLocator.Get(); eventService.Subscribe(e => { Debug.Log($"RemoteConfig updated: {e.RawJson}"); }); ``` --- ## 🪙 6. Local Fallback (Offline Çalışma) * Remote fetch başarısız olursa, `RemoteConfigService` local cache’i (`RemoteConfigData`) kullanır. * Cache 24 saatten daha yeni ise remote fetch atlanır. * Veriler `Application.persistentDataPath || PlayerPrefs` altında JSON olarak saklanır. ```csharp var data = ServiceLocator.Get().Get(); Debug.Log($"Cached HP Scale: {data.GetInt("hp_scale")}"); ``` --- ## 🧾 7. Firebase JSON Yapısı **Örnek:** ```json { "ShiroginSDK": { "hp_scale": 120, "target_fps": 60, "remove_ads_popup_active": true, "enemy_hp_multiplier": "1,1.5,2,2.5,3", "store_data": "{\"shopItems\":[{\"id\":1,\"name\":\"Starter Pack\",\"price\":100}]}" } } ``` Bu JSON, `SDKConfig.selectedRemoteGroup` alanında belirtilen grup adıyla eşleşir (örnek: `"ShiroginSDK"`). --- ## 🧩 8. RemoteConfigService API’si | Fonksiyon | Açıklama | | -------------------------------------------- | -------------------------------------- | | `ForceRefresh()` | Firebase’den manuel veri çekimi yapar. | | `GetInt(string key, int defaultValue)` | Sayısal değer döner. | | `GetFloat(string key, float defaultValue)` | Ondalık değer döner. | | `GetBool(string key, bool defaultValue)` | Mantıksal değer döner. | | `GetString(string key, string defaultValue)` | Metin döner. | --- ## 🧰 9. RemoteConfigDefinition (Editor Tool) ### Konum `Assets/ShiroginSDK/Editor/RemoteConfig/RemoteConfigDefinitionEditor.cs` Bu araç, Firebase Remote Config parametrelerini düzenlemek, senkronize etmek ve JSON oluşturmak için görsel arayüz sağlar. | Buton | İşlev | | ----------------------------------- | ---------------------------------------------- | | ✅ **Validate Keys** | Boş veya tekrarlanan anahtarları kontrol eder. | | 🔤 **Sort by Key** | Anahtarları alfabetik sıraya dizer. | | 📋 **Copy JSON to Clipboard** | Firebase’e yapıştırılabilir JSON oluşturur. | | ⬆️ **Import from RemoteConfigData** | SDK tarafındaki alanları otomatik ekler. | --- ## 🌍 10. Offline & Event Akışı **Senaryo 1 – Online:** 1. Firebase bağlantısı kurulur 2. JSON çekilir 3. Cache güncellenir 4. `RemoteConfigUpdatedEvent` tetiklenir 5. SDK modülleri (Ads, Economy vb.) yeni ayarları uygular **Senaryo 2 – Offline:** 1. Remote fetch başarısız olur 2. Local cache kullanılır 3. Oyun eski verilerle devam eder --- ## 📹 11. Kurulum Videosu 🎥 [Remote Config Setup Video](https://dl.dropboxusercontent.com/scl/fi/vm3z2wpcgudm3th15pkwb/NVIDIA_Overlay_IM0A21PVZv.mp4?rlkey=olnmi1xn4qzfp8ug04w3qfaoo&dl=0) --- ## 🧱 12. Özet | Konsept | Açıklama | | ----------------------- | --------------------------------------------------- | | **Mimari** | `ServiceLocator` tabanlı bağımsız servis yapısı | | **Firebase Bağlantısı** | `FirebaseService` event’leriyle senkronize | | **Cache Yönetimi** | 24 saatlik otomatik yenileme kontrolü | | **Event Forwarding** | `RemoteConfigUpdatedEvent` ile global bildirim | | **Offline Desteği** | Local cache fallback mekanizması | | **Tip Güvenli Erişim** | `GetInt`, `GetString`, `GetBool` yardımcı metotları | --- **Prepared by:** Emir Han MAMAK **Version:** 1.1.0 (2025.12) **Module:** ShiroginSDK.Runtime.Services.Implementations.RemoteConfig ---