示例#1
0
    /// <summary>
    /// Initialize store products, Call this method once at the beginning of your game
    /// </summary>
    /// <param name="InitComplete">callback method, returns a list of all store products, use this method for initializations</param>
    public void InitializeIAPManager(UnityAction <IAPOperationStatus, string, List <StoreProduct> > InitComplete)
    {
        if (IsInitialized())
        {
            return;
        }

        IAPSettings settings = Resources.Load <IAPSettings>("IAPData");

        if (settings == null)
        {
            Debug.LogError("No products available -> Go to Window->Gley->Easy IAP and define your products");
            return;
        }
        shopProducts = settings.shopProducts;
        debug        = settings.debug;
        if (debug)
        {
            Debug.Log(this + "Initialization Started");
            ScreenWriter.Write(this + "Initialization Started");
        }

        if (m_StoreController == null)
        {
            OnInitComplete = InitComplete;
            InitializePurchasing();
        }
    }
示例#2
0
 /// <summary>
 /// IStoreListener event handler called when initialization fails
 /// </summary>
 /// <param name="error"></param>
 public void OnInitializeFailed(InitializationFailureReason error)
 {
     if (debug)
     {
         Debug.Log("OnInitializeFailed");
         ScreenWriter.Write("OnInitializeFailed");
     }
     OnInitComplete(IAPOperationStatus.Fail, error.ToString(), null);
 }
示例#3
0
    /// <summary>
    /// IStoreListener event handler called after initialization is done
    /// </summary>
    /// <param name="controller"></param>
    /// <param name="extensions"></param>
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        if (debug)
        {
            Debug.Log("OnInitialized");
            ScreenWriter.Write("OnInitialized");
        }
        m_StoreController        = controller;
        m_StoreExtensionProvider = extensions;
        for (int i = 0; i < shopProducts.Count; i++)
        {
            Product product = m_StoreController.products.WithID(shopProducts[i].GetStoreID());

            if (debug)
            {
                Debug.Log(this + product.metadata.localizedTitle + " is available " + product.availableToPurchase);
                ScreenWriter.Write(this + product.metadata.localizedTitle + " is available " + product.availableToPurchase);
            }

            if (shopProducts[i].productType == ProductType.Subscription)
            {
                if (product != null && product.hasReceipt)
                {
                    IAPSecurityException exception;
                    if (ReceiptIsValid(shopProducts[i].productName, product.receipt, out exception))
                    {
                        shopProducts[i].active = true;
                        string introJson      = null;
                        SubscriptionManager p = new SubscriptionManager(product, introJson);
                        shopProducts[i].subscriptionInfo = p.getSubscriptionInfo();
                    }
                }
            }

            if (shopProducts[i].productType == ProductType.NonConsumable)
            {
                if (product != null && product.hasReceipt)
                {
                    IAPSecurityException exception;
                    if (ReceiptIsValid(shopProducts[i].productName, product.receipt, out exception))
                    {
                        shopProducts[i].active = true;
                    }
                }
            }

            if (product != null && product.availableToPurchase)
            {
                shopProducts[i].localizedPriceString = product.metadata.localizedPriceString;
                shopProducts[i].price                = System.Decimal.ToInt32(product.metadata.localizedPrice);
                shopProducts[i].isoCurrencyCode      = product.metadata.isoCurrencyCode;
                shopProducts[i].localizedDescription = product.metadata.localizedDescription;
                shopProducts[i].localizedTitle       = product.metadata.localizedTitle;
            }
        }
        OnInitComplete(IAPOperationStatus.Success, "Success", shopProducts);
    }
示例#4
0
    /// <summary>
    /// IStoreListener event  handler called when a purchase fails
    /// </summary>
    /// <param name="product"></param>
    /// <param name="reason"></param>
    public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)
    {
        if (debug)
        {
            Debug.Log(this + "Buy Product failed for " + product.metadata.localizedTitle + " Failed. Reason: " + reason);
            ScreenWriter.Write(this + "Buy Product failed for " + product.metadata.localizedTitle + " Failed. Reason: " + reason);
        }

        if (OnCompleteMethod != null)
        {
            OnCompleteMethod(IAPOperationStatus.Fail, product.metadata.localizedTitle + " Failed. Reason: " + reason, null);
        }
    }
示例#5
0
    /// <summary>
    /// initializes the buy product process
    /// </summary>
    /// <param name="productId"></param>
    private void BuyProductID(string productId)
    {
        if (debug)
        {
            Debug.Log(this + "Buy product with id: " + productId);
            ScreenWriter.Write(this + "Buy product with id: " + productId);
        }

        if (IsInitialized())
        {
            Product product = m_StoreController.products.WithID(productId);
            if (product != null && product.availableToPurchase)
            {
                m_StoreController.InitiatePurchase(product);
            }
            else
            {
                if (debug)
                {
                    Debug.Log(this + "BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
                    ScreenWriter.Write(this + "BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
                }

                if (OnCompleteMethod != null)
                {
                    OnCompleteMethod(IAPOperationStatus.Fail, "Not purchasing product, either is not found or is not available for purchase", null);
                }
            }
        }
        else
        {
            if (debug)
            {
                Debug.Log(this + "BuyProductID FAIL. Store not initialized.");
                ScreenWriter.Write(this + "BuyProductID FAIL. Store not initialized.");
            }

            if (OnCompleteMethod != null)
            {
                OnCompleteMethod(IAPOperationStatus.Fail, "Store not initialized.", null);
            }
        }
    }
示例#6
0
    /// <summary>
    /// Restore previously bought products (Only required on iOS)
    /// </summary>
    /// <param name="OnCompleteMethod">called when the restore process is done</param>
    public void RestorePurchases(UnityAction <IAPOperationStatus, string, StoreProduct> OnCompleteMethod)
    {
        if (!IsInitialized())
        {
            if (debug)
            {
                Debug.Log(this + "RestorePurchases FAIL. Not initialized.");
                ScreenWriter.Write(this + "RestorePurchases FAIL. Not initialized.");
            }
            return;
        }

        if (Application.platform == RuntimePlatform.IPhonePlayer ||
            Application.platform == RuntimePlatform.OSXPlayer)
        {
            if (debug)
            {
                Debug.Log(this + "RestorePurchases started ...");
                ScreenWriter.Write(this + "RestorePurchases started ...");
            }

            this.OnCompleteMethod = OnCompleteMethod;
            var apple = m_StoreExtensionProvider.GetExtension <IAppleExtensions>();
            apple.RestoreTransactions((result) =>
            {
                if (debug)
                {
                    Debug.Log(this + "RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");
                    ScreenWriter.Write(this + "RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");
                }
            });
        }
        else
        {
            if (debug)
            {
                Debug.Log(this + "RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform);
                ScreenWriter.Write(this + "RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform);
            }
        }
    }
示例#7
0
    /// <summary>
    /// Initializes Unity IAP
    /// </summary>
    private void InitializePurchasing()
    {
        if (IsInitialized())
        {
            OnInitComplete(IAPOperationStatus.Success, "Already initialized", null);
            return;
        }

        builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

        for (int i = 0; i < shopProducts.Count; i++)
        {
            builder.AddProduct(shopProducts[i].GetStoreID(), shopProducts[i].GetProductType());
        }

        if (debug)
        {
            Debug.Log("InitializePurchasing");
            ScreenWriter.Write("InitializePurchasing");
        }

        UnityPurchasing.Initialize(this, builder);
    }