Click here to Skip to main content
15,886,799 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
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

C#
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();

}
Posted
Updated 10-Feb-20 1:58am
v2
Comments
Richard MacCutchan 10-Feb-20 3:50am    
1. The system cannot find the assembly library that you are trying to use.
2. The compiler error messages are quite clear. Your code must be inside a class, not just in the namespace.

1 solution

I edited your question so that it had indentation. When I did that, the issue became immediately apparent - after the InitializePurchasing method, you close the class off. You need to remove the extra } from there and move it to the end of the file.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900