缺少方法 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
我在 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