M2DAI Ответов: 1

Как исправить эту проблему реализации кода


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


Что я уже пробовал:

Я попытался создать класс с именами и инициализировать функцию компонента, но это не сработало

1 Ответов

Рейтинг:
0

OriginalGriff

Потому что ваша близкая фигурная скобка находится в неправильном месте. Есть один непосредственно над этой линией:

public bool IsInitialized()
Что завершает определение класса.
В результате методы ниже этой замкнутой фигурной скобки не являются частью класса, поэтому класс не реализует методы, требуемые определением интерфейса.


Richard MacCutchan

Хорошо замечено, тем более что эти сообщения об ошибках несколько сбивают с толку, ссылаясь на строку 10 ...

OriginalGriff

Строка 10 - это первая строка внутри определения класса.

Richard MacCutchan

Было бы более разумно, если бы он ссылался на строку, содержащую закрывающую скобку.

OriginalGriff

Или строка определения класса, содержащая интерфейс, будет иметь смысл.

Черт возьми, что мы знаем? Мы не пишем эти компиляторы ... :смеяться: