public void InitializePurchasing() { if (IsInitialized()) { return; } #if UNITY_PURCHASING m_StoreListener = new StoreListener(); m_StoreListener.storeManager = this; var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); foreach (StoreItem item in products) { builder.AddProduct(item.id, item.GetProductType(), new IDs() { { item.appleAppStore, AppleAppStore.Name }, { item.googlePlayStore, GooglePlay.Name }, { item.macAppStore, MacAppStore.Name }, { item.amazonAppStore, AmazonApps.Name }, }); } UnityPurchasing.Initialize(m_StoreListener, builder); #endif }
void Awake() { if (instance == null) { instance = new StoreListener(); instance.InitializeIAP(); } }
void IRefreshable.Refresh(Action onComplete, Action onFailure) { var configurationBuilder = CreateConfigurationBuilder(); _storeListener = new StoreListener(); _storeListener.Initialized += OnInitialized; _storeListener.InitializeFailed += OnInitializeFailed; UnityPurchasing.Initialize(_storeListener, configurationBuilder); void OnInitialized(object sender, InitializedEventArgs eventArgs) { _storeListener.Initialized -= OnInitialized; _storeListener.InitializeFailed -= OnInitializeFailed; ExtensionProvider = eventArgs.ExtensionProvider; StoreController = eventArgs.StoreController; UpdateProducts(); UpdateSubscriptions(); onComplete(); } void OnInitializeFailed(object sender, InitializeFailedEventArgs eventArgs) { _storeListener.Initialized -= OnInitialized; _storeListener.InitializeFailed -= OnInitializeFailed; var exception = new Exception($"Initialize failed! {nameof(eventArgs.InitializationFailureReason)}: \"{eventArgs.InitializationFailureReason}\""); ExceptionHandler.Process(exception); onFailure(); } }
void IStore.LoadProducts(Action onComplete, Action onFailure) { var purchasingModule = StandardPurchasingModule.Instance(); var builder = ConfigurationBuilder.Instance(purchasingModule); var appleConfiguration = builder.Configure <IAppleConfiguration>(); if (!appleConfiguration.canMakePayments) { var exception = new NotSupportedException($"\"{nameof(IAppleConfiguration)}.{nameof(IAppleConfiguration.canMakePayments)}\" is false!"); ExceptionHandler.Process(exception); onFailure(); return; } foreach (var(ProductId, ProductType) in ProductMap) { builder.AddProduct(ProductId, ProductType); } _storeListener = new StoreListener(); _storeListener.Initialized += OnInitialized; _storeListener.InitializeFailed += OnInitializeFailed; UnityPurchasing.Initialize(_storeListener, builder); void OnInitialized(object sender, InitializedEventArgs eventArgs) { _storeListener.Initialized -= OnInitialized; _storeListener.InitializeFailed -= OnInitializeFailed; _appleExtensions = eventArgs.AppleExtensions; _storeController = eventArgs.StoreController; PlayFabStore.LoadProducts( () => { ModifyProducts(); onComplete(); }, onFailure); } void OnInitializeFailed(object sender, InitializeFailedEventArgs eventArgs) { _storeListener.Initialized -= OnInitialized; _storeListener.InitializeFailed -= OnInitializeFailed; var exception = new Exception($"UnityPurchasing initialization failure! InitializationFailureReason: \"{eventArgs.InitializationFailureReason}\""); ExceptionHandler.Process(exception); onFailure(); } void ModifyProducts() { foreach (PlayFabProduct product in PlayFabStore.Products) { product.Purchase = Purchase; var itemId = PlayFabStore.GetItemId(((IProduct)product).Id); if (string.IsNullOrWhiteSpace(itemId)) { continue; } var uProduct = FindProduct(itemId); if (uProduct == null) { continue; } var currencyId = PlayFabStore.GetCurrencyId("RM"); var metadata = uProduct.metadata; var price = Convert.ToUInt32(metadata.localizedPrice * 100m); product.SetPrice(currencyId, price, metadata.isoCurrencyCode); } } }