Ошибки покупки в приложении Unity in-app
Ошибка: не удалось загрузить сигнатуру UnityEngine.Совершение покупок.UIFakeStore:GetOkayButton из-за: не удалось загрузить файл или сборку 'UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' или одна из его зависимостей. сборка:UnityEngine.Интерфейс, версия=1.0.0.0, культуры=нейтральный, значения PublicKeyToken=null тип:&ЛТ;неизвестного типа&ГТ; члены:(нуль) подпись:<нет&ГТ;
Assets\IAP\IAPManager.cs(68,21): ошибка CS0116: пространство имен не может непосредственно содержать элементы, такие как поля или методы
Assets\IAP\IAPManager.cs(10,54): ошибка CS0535: 'IAPManager' не реализует элемент интерфейса 'IStoreListener.OnInitializeFailed(InitializationFailureReason)'
Assets\IAP\IAPManager.cs(10,54): ошибка CS0535: 'IAPManager' не реализует элемент интерфейса 'IStoreListener.ProcessPurchase(PurchaseEventArgs)'
Assets\IAP\IAPManager.cs(10,54): ошибка CS0535: 'IAPManager' не реализует элемент интерфейса 'IStoreListener.OnPurchaseFailed(Продукт, PurchaseFailureReason)'
Assets\IAP\IAPManager.cs(10,54): ошибка CS0535: 'IAPManager' не реализует элемент интерфейса 'IStoreListener.OnInitialized(IStoreController, IExtensionProvider)'
Assets\IAP\BuyButton.cs(49,9): ошибка CS0305: использование универсального типа 'IEnumerator<T>' требует аргументов типа 1
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)); } }
Что я уже пробовал:
public void Awake() { DontDestroyOnLoad(gameObject); Start(); }
Richard MacCutchan
1. Система не может найти библиотеку сборок, которую вы пытаетесь использовать.
2. сообщения об ошибках компилятора достаточно ясны. Ваш код должен находиться внутри класса, а не только в пространстве имен.