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

244 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📘 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, SDKdaki `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 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](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 | ı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:
```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<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
```csharp
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:
```csharp
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.
```csharp
var data = ServiceLocator.Get<IDataService>().Get<RemoteConfigData>();
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 APIsi
| Fonksiyon | Açı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](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` 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
---