/// <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(); } }
/// <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); }
/// <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); }
/// <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); } }
/// <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); } } }
/// <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); } } }
/// <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); }