Playvoi/Assets/ShiroginSDK/Documents/RemoteConfig/RemoteConfigService.md

7.6 KiB
Raw Blame History

📘 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 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, SDKdaki RemoteConfigData değişkenlerini temsil edecek parametreleri oluşturun.

🖼️ Yeni Parametre Ekleme:

Add-New-Variable

🖼️ Yeni Grup Oluşturma:

Add-New-Group

Parametrelerinizi mantıksal gruplar hâlinde düzenlemek, ShiroginSDKnin selectedRemoteGroup seçeneğiyle eşleşmesini kolaylaştırır.


🔹 Adım 3 — JSON Formatı ile Firebasee 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 Firebasee yapıştırın: Add Remote Data

{
  "shiroginsdk_remote_config": {
    "hp_scale": 100,
    "target_fps": 60,
    "rewarded_after_interstitial_time": 50
  }
}

⚙️ 2. Sistem Mimarisi

Bileşen Tür ıklama
RemoteConfigService ServiceBase Firebaseden verileri çeker, cacheler ve event yayınlar.
RemoteConfigData BaseData Çekilen verilerin local kopyasını ve erişim APIsini tutar.
FirebaseService ServiceBase Firebase bağlantı yönetimini sağlar.
IEventService Interface Güncelleme eventlerini tetikler (RemoteConfigUpdatedEvent).

🧠 3. Başlatma ve Yaşam Döngüsü

Tüm servisler ShiroginServiceRegistry tarafından yönetilir:

ShiroginServiceRegistry.InitializeAll();

Bu çağrı ile:

  • FirebaseService
  • DataService
  • RemoteConfigService
  • EventService otomatik olarak başlatılır ve ServiceLocatora 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:

var dataService = ServiceLocator.Get<IDataService>();
var config = dataService.Get<RemoteConfigData>();

int hpScale = config.GetInt("hp_scale", 100);
float fps = config.GetFloat("target_fps", 60f);
string storeJson = config.GetString("store_data");

🔹 Firebaseden Manuel Veri Yenileme

var remoteConfig = ServiceLocator.Get<IRemoteConfigService>();
remoteConfig.ForceRefresh();

Bu işlem, Firebaseden en son JSONu çeker, cachei günceller ve otomatik olarak RemoteConfigUpdatedEvent yayınlar.


🔹 Event Dinleme

Güncellenmiş Remote Config verisini yakalamak için:

var eventService = ServiceLocator.Get<IEventService>();
eventService.Subscribe<ShiroginEvents.RemoteConfigUpdatedEvent>(e =>
{
    Debug.Log($"RemoteConfig updated: {e.RawJson}");
});

🪙 6. Local Fallback (Offline Çalışma)

  • Remote fetch başarısız olursa, RemoteConfigService local cachei (RemoteConfigData) kullanır.
  • Cache 24 saatten daha yeni ise remote fetch atlanır.
  • Veriler Application.persistentDataPath || PlayerPrefs altında JSON olarak saklanır.
var data = ServiceLocator.Get<IDataService>().Get<RemoteConfigData>();
Debug.Log($"Cached HP Scale: {data.GetInt("hp_scale")}");

🧾 7. Firebase JSON Yapısı

Örnek:

{
  "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 APIsi

Fonksiyon ıklama
ForceRefresh() Firebaseden 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 Firebasee 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


🧱 12. Özet

Konsept ıklama
Mimari ServiceLocator tabanlı bağımsız servis yapısı
Firebase Bağlantısı FirebaseService eventleriyle 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