7.4 KiB
🛒 ShiroginSDK IAP System (v1.0.0)
Unity In-App Purchase Entegrasyonu + Oyun İçi Ekonomi + Ödül + Event-Driven Mimari
Bu doküman, ShiroginSDK v1.0.0 sürümüyle güncellenen IAP (In-App Purchase) altyapısını açıklar.
Yeni sistem, ShiroginServiceRegistry üzerinden başlatılan modüler servis yapısına sahiptir.
Tüm satın alma işlemleri, event tabanlı olarak SDK genelindeki diğer servislerle otomatik senkronize edilir.
🚀 1. Genel Bakış
ShiroginSDK IAP sistemi:
- ✅
ServiceBasetabanlı, modüler ve bağımsız servis yapısı - ✅
EventServiceile tam event forwarding desteği - ✅ Unity IAP, oyun içi ekonomi, sandık, bundle ve reklamla ödül sistemleri
- ✅ Otomatik
AnalyticsService&PopupServiceentegrasyonu - ✅ Tek konfigürasyon noktası:
SDKConfig.storeRepository
🧩 2. Servis Mimarisi
🔹 IAPService (Yeni Sistem)
IAPService, artık ServiceBase’ten türetilen bir servis olarak ShiroginServiceRegistry tarafından otomatik olarak başlatılır.
Kendi bağımlılıklarını ServiceLocator aracılığıyla çözer.
Başlatma:
ShiroginServiceRegistry.InitializeAll();
Bu çağrı, IAPService dahil tüm servisleri (EventService, DataService, FirebaseService, AnalyticsService) otomatik olarak oluşturur.
IAPService Görevleri:
- Unity IAP sistemini başlatır (
UnityPurchasing.Initialize()). - Satın alma işlemlerini yönetir.
- Başarılı işlemlerde ödül verir (
StoreItem.GiveReward()). - EventService üzerinden satın alma event’lerini yayınlar.
Kilit Eventler:
_eventService.Invoke(new ShiroginEvents.PurchaseCompletedEvent(product, 1)); // Analytics
_eventService.Invoke(new ShiroginEvents.Shop_UIStoreItem_Rewarded(item.GetRewards())); // Popup
🔹 DataService Entegrasyonu (v1.0.0 Güncel)
Yeni sistemde DataService, ServiceBase’ten türetilen bağımsız bir servistir.
ServiceLocator aracılığıyla erişilir ve oyun boyunca tüm veri nesnelerini (RuntimeData, EconomyData, StoreData, InventoryData vb.) yönetir.
var dataService = ServiceLocator.Get<IDataService>();
var storeData = dataService.Get<StoreData>();
storeData.MarkPurchased(productId, 1, item.category);
var runtime = dataService.Get<RuntimeData>();
runtime.UpdatePlaySessionCount();
Artık DataService.Get<T>() gibi statik çağrılar yerine, ServiceLocator üzerinden interface tabanlı erişim kullanılmalıdır.
Bu sayede her servis, kendi yaşam döngüsünde OnInitialize() içinde IDataService’i çözer ve paylaşılan state’i korur.
🔹
IDataService→Get<T>(),Save<T>(),Delete<T>()gibi tip güvenli fonksiyonlar sağlar. 🔹DataServiceruntime'daDontDestroyOnLoadolarak yaşar. 🔹 Oyun verileri JSON tabanlı olarakApplication.persistentDataPath || PlayerPrefsaltında tutulur.
🔹 EventService Entegrasyonu
Her önemli işlem event tabanlı çalışır.
IAPService, EventService üzerinden ShiroginEvents yayınlayarak SDK içindeki diğer sistemlere sinyal gönderir.
Örneğin:
PurchaseCompletedEvent→AnalyticsServicetarafından loglanırShop_UIStoreItem_Rewarded→PopupServicetarafından UI bildirimi gösterilir
💳 3. IAPService API Özeti
| Metod | Açıklama |
|---|---|
Buy(StoreItem item) |
Belirtilen ürünü satın alır. |
Buy(string productId) |
Product ID ile satın alma başlatır. |
RestorePurchases() |
Kalıcı ürünleri geri yükler (iOS/Android). |
GetLocalizedPriceString(productId) |
Cihazın mağaza diline uygun fiyat döner. |
🧠 4. Akış Diyagramı
[UIStoreItem_Consumable.OnPurchaseButton]
↓
[IAPService.Buy()]
↓
Unity IAP Purchase Flow
↓
[IAPService.ProcessPurchase()]
↓
[StoreItem.GiveReward()]
↓
[EventService.Invoke(ShiroginEvents.PurchaseCompletedEvent)]
↓
[AnalyticsService + PopupService]
Tüm veri ve event akışı tek hattan ilerler. Bu sayede loglama, ödül ve UI işlemleri birbiriyle senkronize yürür.
🧰 5. Editor & Test Özellikleri
-
FakeStore Modu: Unity Editor içinde
StandardPurchasingModuleotomatik olarak FakeStore’u açar. Test sırasında gerçek ödeme yapılmaz.module.useFakeStoreAlways = true; module.useFakeStoreUIMode = FakeStoreUIMode.StandardUser; -
Loglama: Başarılı ve başarısız tüm işlemler konsola
[IAPService]etiketiyle yazılır.
🪙 6. Ekonomi & Ödül Yönetimi
IAP sistemi, EconomyData ve RewardDefinition ile entegredir:
- Satın alma sonrası ödül →
StoreItem.GiveReward() - Sandık →
StoreItem.GiveRandomReward() - Kaldırılan reklamlar →
RewardType.RemoveAds - Currency tabanlı satın alma →
EconomyData.SpendCurrency()
🔔 7. Event Referansları
| Event | Açıklama |
|---|---|
PurchaseCompletedEvent |
Satın alma başarıyla tamamlandı. |
PurchaseFailedEvent |
Satın alma başarısız oldu. |
RewardGivenEvent |
Ödül verildi. |
Shop_UIStoreItem_Rewarded |
Mağaza ödül popup’ı tetiklendi. |
NoConnectionEvent |
İnternet bağlantısı yok. |
RewardedAdUnavailableEvent |
Reklam izlenemedi (AdsService kaynaklı). |
🧩 8. Yeni Mimarideki Geliştirmeler
| Alan | Yenilik |
|---|---|
| Lifecycle | Tüm servisler ServiceBase üstünden yönetilir. |
| Bağımlılıklar | ServiceLocator ile otomatik çözülür. |
| Otomatik EventForwarding | EventService ile doğrudan bağlı. |
| Firebase Entegrasyonu | Satın alma logları otomatik olarak FirebaseService’e akar. |
| Gelişmiş Restore Logic | Android ve iOS için unified restore desteği. |
| UI Bağımsızlık | Tüm item’ler UIStoreItemBase tabanlı. |
🧠 9. Örnek Kod: Mağaza Butonu
public void OnGemPackButton()
{
var store = ServiceLocator.Get<IIAPService>();
var item = store.StoreRepository.GetByProductId("com.shirogin.gem_pack_1");
store.Buy(item);
}
Satın alma tamamlandığında:
- Oyuncuya ödül verilir.
AnalyticsServicelog gönderir.PopupServicebaşarı mesajı gösterir.
🧾 10. Özet
ShiroginSDK IAP System v1.0.0,
tamamen event-driven, service-oriented ve UI-modüler bir yapıdadır.
Tüm işlemler ServiceRegistry tarafından kontrol edilir,
ve sonuçlar SDK genelinde otomatik olarak paylaşılır.
🔗 Tam uyumlu servisler: EventService, AnalyticsService, PopupService, EconomyData, RemoteConfigService
Prepared by: Emir Han MAMAK
Version: 1.0.0 (2025.10)
Module: ShiroginSDK.Runtime.Services.Implementations.IAP