缺少方法 UnityEngine.VR.VRSettings.get_enabled |未处理 Unity IAP 购买 | Android

Missing method UnityEngine.VR.VRSettings.get_enabled | Unity IAP purchase not being processed | Android

我在 google Play 商店上有一个应用程序内购买的应用程序。

我正在遵循 Unity 网站上的 IAP 指南...但是在调用 BuyProductID() 之后,我在使用 ProcessPurchase 方法而不是 运行 时遇到了问题。

我发布了我的应用程序的 alpha 版本进行测试,并在我的应用程序中制作了一个调试标签以供反馈。

我的代码的相关部分如下所示:

public class PurchasingManager : MonoBehaviour, IStoreListener
{

private static IStoreController m_StoreController;
private static IExtensionProvider m_StoreExtensionProvider;

public Text debugLabel;

public static string product_noAds =        "noads";
public static string product_pts1000 =      "pts1000";

void Start() {...}
void IsInitialized() {...}

public void InitializePurchasing() {
    if (IsInitialized())
        return;

    debugLabel.text = "Initializing...";

    var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

    builder.AddProduct(product_noAds, ProductType.NonConsumable);
    builder.AddProduct(product_pts1000, ProductType.Consumable);

    UnityPurchasing.Initialize(this, builder);
}


public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
    debugLabel.text = "OnInitialized: PASS";
    m_StoreController = controller;
    m_StoreExtensionProvider = extensions;
}

public void OnInitializeFailed(InitializationFailureReason error) {
    dt.text = "OnInitializeFailed InitializationFailureReason:" + error;
}


public void Buy_noads() {
    debugLabel.text = "BUYING noads";
    BuyProductID(product_noAds);
}

public void Buy_pts1000() {
    debugLabel.text = "BUYING 1000";
    BuyProductID(product_pts1000);
}

private void BuyProductID(string productId) {
    if (IsInitialized()) {
        Product product = m_StoreController.products.WithID(productId);
        if (product != null && product.availableToPurchase)
        {
            debugLabel.text = "intializing the purchase";
            m_StoreController.InitiatePurchase(product);
        }
    }
}

public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) 
{

    debugLabel.text = "Processing Purchase now...";

    if (String.Equals(args.purchasedProduct.definition.id, product_noAds, StringComparison.Ordinal)) {
        debugLabel.text = "PURCAHSE noads";
        shop.Purchase(500);
        PlayerPrefs.SetInt("noads", 1);
    }
    else if (String.Equals(args.purchasedProduct.definition.id, product_pts1000, StringComparison.Ordinal)) {
        shop.Purchase(1000);
        debugLabel.text = "PURCAHSE 1000";
    }
    else {
        debugLabel.text = string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id);
    }

    return PurchaseProcessingResult.Complete;

}

public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) {
    debugLabel.text = string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason);
}

}

所以在我启动我的应用程序后,调试标签显示:"Initializing..." 后跟 "OnInitialized: PASS"。

如果我点击按钮购买两种产品中的任何一种,标签上写着:"intializing the purchase",但它停在那里,没有任何反应。

ProcessPurchase 从未被调用,因为标签没有改变...为什么不被调用?我知道没有错误,只是什么也没发生。

任何帮助将不胜感激,谢谢。

我应该补充一点,我遵循了这个 YouTube 教程:https://www.youtube.com/watch?v=3IQ-CvBQz0o&t=73s

编辑:

使用 adb logcat 我看到 unity 打印了这个错误...

这是什么意思?

看来您需要更新 Unity 或 IAP API。在这里你可以找到如何Remove and Reinstall Unity IAP。此解决方案帮助了与您有类似问题的人。

更改 Unity 安装文件夹的位置。新的位置路径不应包含任何 spaces,并且应如下所示:C:\Unity19.1.5f1\Editor...

而不是:C:\Program Files\Unity\Hub\Editor19.1.5f1\Editor...

"Program Files" 包含 space 并且由于这个原因,AssemblyUpdater 静默失败。

有关此特定问题的更多详细信息,请访问 https://issuetracker.unity3d.com/issues/assemblyupdater-silently-fails-if-its-path-contains-spaces