统一内购 |应用内购买 |未知错误
Unity IAP | In App Purchase | Unknown Error
我想在我的 android 游戏中实施 IAP。
这是我的代码,来自unity官网:
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.UI;
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 Text text;
public static string kProductIDConsumable = "pile_shadycoin";
void Start() {
if (m_StoreController == null) {
InitializePurchasing();
}
}
public void InitializePurchasing() {
if (IsInitialized()) {
return;
}
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(kProductIDConsumable, ProductType.Consumable);
UnityPurchasing.Initialize(this, builder);
}
private bool IsInitialized() {
return m_StoreController != null && m_StoreExtensionProvider != null;
}
public void BuyConsumable() {
BuyProductID(kProductIDConsumable);
}
void BuyProductID(string productId) {
if (IsInitialized()) {
Product product = m_StoreController.products.WithID(productId);
if (product != null && product.availableToPurchase) {
text.text = "Purchasing product asychronously: '{0}'";
m_StoreController.InitiatePurchase(product);
} else {
text.text = "BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase";
}
} else {
text.text = "BuyProductID FAIL. Not initialized.";
}
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
text.text = "OnInitialized: PASS";
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
}
public void OnInitializeFailed(InitializationFailureReason error) {
text.text = "OnInitializeFailed InitializationFailureReason:" + error;
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
if (String.Equals(args.purchasedProduct.definition.id, kProductIDConsumable, StringComparison.Ordinal)) {
text.text = "ProcessPurchase: PASS. Product: '{0}'";
} else {
text.text = "ProcessPurchase: FAIL. Unrecognized product: '{0}'";
}
return PurchaseProcessingResult.Complete;
}
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) {
text.text = failureReason + "";
}
}
我正在使用消耗品pile_shadycoin。
在图片中你可以看到 id 并且它是活动的(它是德语)
Picture of Google Play
如果我构建我的项目并将其放在我的智能手机上并按下链接到 BuyConsumable() 的按钮,它会打开菜单并显示:
Fehler Der angeforderte Artikel kann nicht gekauft werden
英文:
Error The requested item cannot be purchased
我发现了我的错误。我没有发布 alpha 或 beta 版本。
我直接把 APK 拉到我的 phone。
我想在我的 android 游戏中实施 IAP。
这是我的代码,来自unity官网:
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.UI;
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 Text text;
public static string kProductIDConsumable = "pile_shadycoin";
void Start() {
if (m_StoreController == null) {
InitializePurchasing();
}
}
public void InitializePurchasing() {
if (IsInitialized()) {
return;
}
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(kProductIDConsumable, ProductType.Consumable);
UnityPurchasing.Initialize(this, builder);
}
private bool IsInitialized() {
return m_StoreController != null && m_StoreExtensionProvider != null;
}
public void BuyConsumable() {
BuyProductID(kProductIDConsumable);
}
void BuyProductID(string productId) {
if (IsInitialized()) {
Product product = m_StoreController.products.WithID(productId);
if (product != null && product.availableToPurchase) {
text.text = "Purchasing product asychronously: '{0}'";
m_StoreController.InitiatePurchase(product);
} else {
text.text = "BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase";
}
} else {
text.text = "BuyProductID FAIL. Not initialized.";
}
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
text.text = "OnInitialized: PASS";
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
}
public void OnInitializeFailed(InitializationFailureReason error) {
text.text = "OnInitializeFailed InitializationFailureReason:" + error;
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
if (String.Equals(args.purchasedProduct.definition.id, kProductIDConsumable, StringComparison.Ordinal)) {
text.text = "ProcessPurchase: PASS. Product: '{0}'";
} else {
text.text = "ProcessPurchase: FAIL. Unrecognized product: '{0}'";
}
return PurchaseProcessingResult.Complete;
}
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) {
text.text = failureReason + "";
}
}
我正在使用消耗品pile_shadycoin。 在图片中你可以看到 id 并且它是活动的(它是德语)
Picture of Google Play
如果我构建我的项目并将其放在我的智能手机上并按下链接到 BuyConsumable() 的按钮,它会打开菜单并显示:
Fehler Der angeforderte Artikel kann nicht gekauft werden
英文:
Error The requested item cannot be purchased
我发现了我的错误。我没有发布 alpha 或 beta 版本。
我直接把 APK 拉到我的 phone。