Playvoi/Assets/ShiroginSDK/Documents/IAP/IAPService.md
2025-10-30 22:48:16 +03:00

7.4 KiB
Raw Blame History

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

  • ServiceBase tabanlı, modüler ve bağımsız servis yapısı
  • EventService ile tam event forwarding desteği
  • Unity IAP, oyun içi ekonomi, sandık, bundle ve reklamla ödül sistemleri
  • Otomatik AnalyticsService & PopupService entegrasyonu
  • Tek konfigürasyon noktası: SDKConfig.storeRepository

🧩 2. Servis Mimarisi

🔹 IAPService (Yeni Sistem)

IAPService, artık ServiceBaseten 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 eventlerini 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, ServiceBaseten 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 IDataServicei çözer ve paylaşılan statei korur.

🔹 IDataServiceGet<T>(), Save<T>(), Delete<T>() gibi tip güvenli fonksiyonlar sağlar. 🔹 DataService runtime'da DontDestroyOnLoad olarak yaşar. 🔹 Oyun verileri JSON tabanlı olarak Application.persistentDataPath || PlayerPrefs altı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:

  • PurchaseCompletedEventAnalyticsService tarafından loglanır
  • Shop_UIStoreItem_RewardedPopupService tarafından UI bildirimi gösterilir

💳 3. IAPService API Özeti

Metod ı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 StandardPurchasingModule otomatik olarak FakeStoreu 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 ı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 FirebaseServicee akar.
Gelişmiş Restore Logic Android ve iOS için unified restore desteği.
UI Bağımsızlık Tüm itemler 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.
  • AnalyticsService log gönderir.
  • PopupService baş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