【发布时间】:2018-12-19 14:06:18
【问题描述】:
unity IAP 在导入 google play 游戏服务后无法使用,在我安装 google play 游戏服务之前可以使用。初始化成功,失败时没有触发“OnPurchaseFailed”,为什么?
代码如下:
using System;
using UnityEngine;
using UnityEngine.Purchasing;
public class Purchaser : MonoBehaviour, IStoreListener
{
private static IStoreController m_StoreController; // The Unity Purchasing system.
private static IExtensionProvider m_StoreExtensionProvider; // The store-specific Purchasing subsystems.
public static string NO_ADS = "no_ads";
public static string MORE_COIN = "more_coin";
void Start()
{
if (m_StoreController == null)
InitializePurchasing();
}
public void InitializePurchasing()
{
if (IsInitialized())
return;
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(NO_ADS, ProductType.NonConsumable);
builder.AddProduct(MORE_COIN, ProductType.NonConsumable);
UnityPurchasing.Initialize(this, builder);
}
bool IsInitialized()
{
return m_StoreController != null && m_StoreExtensionProvider != null;
}
public void RemoveAds()
{
BuyProductID(NO_ADS);
}
public void MoreCoin()
{
BuyProductID(MORE_COIN);
}
void BuyProductID(string productId)
{
if (IsInitialized())
{
Product product = m_StoreController.products.WithID(productId);
if (product != null && product.availableToPurchase)
m_StoreController.InitiatePurchase(product);
}
}
//IStoreListener
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
//m_StoreController.products.WithID(NO_ADS).metadata.localizedPriceString;
//m_StoreController.products.WithID(NO_ADS).metadata.isoCurrencyCode;
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
// A consumable product has been purchased by this user.
if (String.Equals(args.purchasedProduct.definition.id, NO_ADS, StringComparison.Ordinal))
AdManager.instance.RemoveADS();
else if (String.Equals(args.purchasedProduct.definition.id, MORE_COIN, StringComparison.Ordinal))
{
PlayerPrefs.SetInt("MoreCoin", 1);
Menu.instance.UpdateStore();
}
return PurchaseProcessingResult.Complete;
}
public void OnInitializeFailed(InitializationFailureReason error)
{
// Purchasing set-up has not succeeded. Check error for reason. Consider sharing this reason with the user.
Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
}
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
{
// A product purchase attempt did not succeed. Check failureReason for more detail. Consider sharing
// this reason with the user to guide their troubleshooting actions.
Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
}
}
【问题讨论】:
-
能否请您发布您的Minimal, Complete, and Verifiable example 代码以便我们重现您的问题?
-
感谢您提供代码。如果您可以将代码最小化到问题仍然发生的位置,然后将其放在您的问题中,那会更容易。 Pastebin 链接可能会过期。
-
m_StoreController.InitiatePurchase(product);调用时这条线没有任何反应
-
Unity IAP 演示也无法运行
标签: unity3d google-play in-app-purchase