Error: Could not load signature of UnityEngine.Purchasing.UIFakeStore:GetOkayButton due to: Could not load file or assembly 'UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. assembly:UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null type:<unknown type> member:(null) signature:<none>
Assets\IAP\IAPManager.cs(68,21): error CS0116: A namespace cannot directly contain members such as fields or methods
Assets\IAP\IAPManager.cs(10,54): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnInitializeFailed(InitializationFailureReason)'
Assets\IAP\IAPManager.cs(10,54): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.ProcessPurchase(PurchaseEventArgs)'
Assets\IAP\IAPManager.cs(10,54): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnPurchaseFailed(Product, PurchaseFailureReason)'
Assets\IAP\IAPManager.cs(10,54): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnInitialized(IStoreController, IExtensionProvider)'
Assets\IAP\BuyButton.cs(49,9): error CS0305: Using the generic type 'IEnumerator<T>' requires 1 type arguments
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
namespace CompleteProject
{
public class IAPManager : Singleton<IAPManager>, IStoreListener
{
private static IStoreController m_StoreController;
private static IExtensionProvider m_StoreExtensionProvider;
public string seeds_10 = "seeds_10";
public string seeds_35 = "seeds_35";
public string seeds_200 = "seeds_200";
public string seeds_1000 = "seeds_1000";
public string kProductIDNonConsumable = "nonconsumable";
public void Awake() {
DontDestroyOnLoad(gameObject);
Start();
}
void Start()
{
if (m_StoreController == null)
{
InitializePurchasing();
}
}
public void InitializePurchasing()
{
if (IsInitialized())
{
return;
}
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(seeds_10, ProductType.Consumable);
builder.AddProduct(seeds_35, ProductType.Consumable);
builder.AddProduct(seeds_200, ProductType.Consumable);
builder.AddProduct(seeds_1000, ProductType.Consumable);
builder.AddProduct(kProductIDNonConsumable, ProductType.NonConsumable);
}
}
public bool IsInitialized()
{
return m_StoreController != null && m_StoreExtensionProvider != null;
}
public void Buy10seeds()
{
BuyProductID(seeds_10);
}
public void Buy35seeds()
{
BuyProductID(seeds_35);
}
public void Buy200seeds()
{
BuyProductID(seeds_200);
}
public void Buy1000seeds()
{
BuyProductID(seeds_1000);
}
public void BuyNonConsumable()
{
BuyProductID(kProductIDNonConsumable);
}
public string GetProducePriceFromStore(string id){
if(m_StoreController != null && m_StoreController.products != null)
return m_StoreController.products.WithID(id).metadata.localizedPriceString;
else
return "";
}
void BuyProductID(string productId)
{
if (IsInitialized())
{
Product product = m_StoreController.products.WithID(productId);
if (product != null && product.availableToPurchase)
{
Debug.Log(string.Format("Purchasing product asychronously: '{0}'", product.definition.id));
m_StoreController.InitiatePurchase(product);
}
else
{
Debug.Log("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
}
}
else
{
Debug.Log("BuyProductID FAIL. Not initialized.");
}
}
public void RestorePurchases()
{
if (!IsInitialized())
{
Debug.Log("RestorePurchases FAIL. Not initialized.");
return;
}
if (Application.platform == RuntimePlatform.IPhonePlayer ||
Application.platform == RuntimePlatform.OSXPlayer)
{
Debug.Log("RestorePurchases started ...");
var apple = m_StoreExtensionProvider.GetExtension<IAppleExtensions>();
apple.RestoreTransactions((result) => {
Debug.Log("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");
});
}
else
{
Debug.Log("RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform);
}
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
Debug.Log("OnInitialized: PASS");
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
}
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
if (String.Equals(args.purchasedProduct.definition.id, seeds_10, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
DataManager.Instance.AddGold(10);
}
else if (String.Equals(args.purchasedProduct.definition.id, seeds_35, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
DataManager.Instance.AddGold(35);
}
else if (String.Equals(args.purchasedProduct.definition.id, seeds_200, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
DataManager.Instance.AddGold(200);
}
else if (String.Equals(args.purchasedProduct.definition.id, seeds_1000, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
DataManager.Instance.AddGold(1000);
}
else if (String.Equals(args.purchasedProduct.definition.id, kProductIDNonConsumable, StringComparison.Ordinal))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
DataManager.Instance.RemoveAds();
}
else
{
Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
}
return PurchaseProcessingResult.Complete;
}
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
{
Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
}
}
What I have tried:
public void Awake() {
DontDestroyOnLoad(gameObject);
Start();
}