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
        }
Example #2
0
 void Awake()
 {
     if (instance == null)
     {
         instance = new StoreListener();
         instance.InitializeIAP();
     }
 }
Example #3
0
        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);
                }
            }
        }