Click here to Skip to main content
15,881,709 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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)'

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:

I tried creating a class with the names and initialize component function but it didn't work
Posted
Updated 19-Feb-20 4:42am

1 solution

Because your close curly bracket is in the wrong place. There is one immediately above this line:
Java
public bool IsInitialized()
Which terminates the class definition.
As a result, the methods below that close curly bracket are not a part of the class, so the class doesn't implement the methods required by the interface definition.
 
Share this answer
 
v2
Comments
Richard MacCutchan 19-Feb-20 10:52am    
Well spotted, especially as those error messages are somewhat confusing referring to line 10 ...
OriginalGriff 19-Feb-20 10:56am    
Line 10 is the first line inside the class definition.
Richard MacCutchan 19-Feb-20 11:00am    
It would make more sense for it to refer to the line containing the closing brace.
OriginalGriff 19-Feb-20 11:13am    
Or the class definition line containing the interface would make sense.

Heck what do we know? We don't write these compilers ... :laugh:

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