您的位置:首页 > 移动开发 > Unity3D

Unity IAP的简单使用

2017-06-09 16:53 295 查看
这里我只贴出如何用代码进行购买和恢复购买并拿出订单号的方法(AppStore需要先去iTunes Connect设置商品id)

代码的使用方法如下,其实官方手册上有详细的示例代码

官方使用教程 : https://unity3d.com/cn/learn/tutorials/topics/ads-analytics/integrating-unity-iap-your-game

回执单的验证:https://docs.unity3d.com/Manual/UnityIAPValidatingReceipts.html

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Security;

public class Test : MonoBehaviour, IStoreListener
{

private IStoreController mStoreController;
private IExtensionProvider mExtensionProvider;
ConfigurationBuilder builder;

private string consumeable = "product1";

void Start()
{
if (mStoreController == null)
{
InitPurchasing();
}
}

//初始化
public void InitPurchasing()
{
if (IsInitialized())
{
return;
}

builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(consumeable, ProductType.NonConsumable);
UnityPurchasing.Initialize(this, builder);
}

//购买
public void BuyProduct()
{
if (IsInitialized())
{
Product produdt = mStoreController.products.WithID(consumeable);
if (produdt != null && produdt.availableToPurchase)
{
mStoreController.InitiatePurchase(produdt);

Debug.Log(produdt.metadata.localizedPrice);
}
else
{
Debug.Log("fail");
}
}
}

//恢复购买
public void ReSotre()
{
if (!IsInitialized())
{
return;
}

if (mExtensionProvider != null
&& (Application.platform == RuntimePlatform.IPhonePlayer
|| Application.platform == RuntimePlatform.OSXPlayer)) {
var apple = mExtensionProvider.GetExtension<IAppleExtensions>();
apple.RestoreTransactions((result) => {
// Restore purchases initiated. See ProcessPurchase for any restored transacitons.
});
}
}

private bool IsInitialized()
{
return mStoreController != null && mExtensionProvider != null;
}

//---------------IStoreListener的四个接口的实现-----------

//初始化成功
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
mStoreController = controller;
mExtensionProvider = extensions;

}

//初始化失败
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.Log("初始化失败了:" + error);
}

//购买失败
public void OnPurchaseFailed(Product i, PurchaseFailureReason p)
{
Debug.Log(i.definition.id + "\n" + p);
}

//购买成功和恢复成功的回调,可以根据id的不同进行不同的操作
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
if (string.Equals(e.purchasedProduct.definition.id, consumeable, System.StringComparison.Ordinal))
{
//获取商品的描述信息,标题,价格,带单位的(¥,$等等)
//这一步一般可以放在初始化完成的回调里,用于刷新你的相关UI
Debug.Log("price:" + e.purchasedProduct.metadata.localizedPriceString);
Debug.Log(e.purchasedProduct.metadata.localizedTitle + e.purchasedProduct.metadata.localizedDescription);

//交易号
Debug.Log("storeSpecificId:" + e.purchasedProduct.definition.storeSpecificId);

//回执单
Debug.Log("receipt:" + e.purchasedProduct.receipt);

//商品的id号
Debug.Log("transactionID:" + e.purchasedProduct.transactionID);

Debug.Log("成功了!!!!");

//这里是获取订单号,用于存储到自己的服务器,以及恢复购买时的对比
#if UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX
// Get a reference to IAppleConfiguration during IAP initialization.
var appleConfig = builder.Configure<IAppleConfiguration>();
var receiptData = System.Convert.FromBase64String(appleConfig.appReceipt);
AppleReceipt receipt = new AppleValidator(AppleTangle.Data()).Validate(receiptData);

Debug.Log(receipt.bundleID);
Debug.Log(receipt.receiptCreationDate);
foreach (AppleInAppPurchaseReceipt productReceipt in receipt.inAppPurchaseReceipts)
{
Debug.Log("订单号:" +  productReceipt.originalTransactionIdentifier);
}
#endif

}
return PurchaseProcessingResult.Complete;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: