244 lines
7.6 KiB
Markdown
244 lines
7.6 KiB
Markdown
# 📘 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:
|
||

|
||
|
||
#### 🖼️ Yeni Grup Oluşturma:
|
||

|
||
|
||
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:
|
||

|
||
|
||
|
||
|
||
```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<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");
|
||
```
|
||
|
||
---
|
||
|
||
### 🔹 Firebase’den Manuel Veri Yenileme
|
||
|
||
```csharp
|
||
var remoteConfig = ServiceLocator.Get<IRemoteConfigService>();
|
||
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<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 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<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 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
|
||
|
||
---
|
||
|