在Unity/Window/PackageManager中下载 In App Purchasing 插件,然后再Services窗口中开启同意内购选项,登录账户但是没有项目的话点击刷新
代码:
PS:以下内容皆为上面为代码,下面为上一行代码的注解
using UnityEngine.Purchasing;
添加引用,通过代码继承IStoreListener接口实现接口功能完成App内购功能
private static IStoreController m_StoreController;
定义商品信息变量,这个变量控制购买商品储存着商品信息以及作为后面方法的参数传递
private static IExtensionProvider m_StoreExtensionProvider;
定义商品信息扩展变量,这个变量里储存着各个商品的购买是否成功
StandardPurchasingModule module = StandardPurchasingModule.Instance();
定义采购平台,上面赋值方法为默认设置的平台
ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
定义购买参数储存类 这个类里用来储存商品的ID和属性
bulider.AddProduct(string id, ProductType type)
在购买参数储存类里面添加一个商品,第一个参数是商品名字,第二个参数是商品的类型
public enum ProductType
{
Consumable,//可以无限购买的商品
NonConsumable,//只能购买一次的商品
Subscription,//可以周期性购买的商品,例如一个月的会员
}
第二个参数的枚举值以及含义
UnityPurchasing.Initialize(this, builder);
正式开始构建初始化APP购买方法,第一个参数为继承IStoreListener接口的类也就是自己,第二个为购买参数储存类
void OnInitialized(IStoreController controller, IExtensionProvider extensions);
接口中的方法,构建初始化成功会调用这个方法,这个方法中的两个参数赋值给之前定义的商品信息变量以及商品扩展信息变量
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
ProductCollection products = m_StoreController.products;
Product[] all = products.all;
//all[索引] 返回Product包含商品的各种信息
//all[索引].metadata 返回在应用商店中配置的商品源信息
//all[索引].metadata.localizedPriceString 获取应用商店中商品的价格
//其余包括名称 描述 以及其余商品信息待添加
卸载构建初始化成功方法中:获取在应用商店设置的商品的各种信息
void OnInitializeFailed(InitializationFailureReason error);
构建初始化失败回调的函数,参数中包含着错误信息的类型
public enum InitializationFailureReason
{
PurchasingUnavailable,//禁止付费,玩家关闭app内购功能
NoProductsAvailable,//配置问题,应用商店中未设置可购买内容
AppNotKnown,//应用程序未连接到应用商城
}
错误信息的类型
m_StoreController.InitiatePurchase(string productId);
创建购买,购买的时候调用这个方法,传入的参数是商品的名称
PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e);
//e.purchasedProduct.definition.id 返回购买物品的ID
//return PurchaseProcessingResult.Complete; 方法必须有返回值,返回购买完成
//return PurchaseProcessingResult.Pending; 返回购买处理中(通常不用)
支付成功回调的函数,其中的参数包含了购买的物品的各种信息
void OnPurchaseFailed(Product i, PurchaseFailureReason p);
购买失败回调函数,参数一用处暂不详,参数二为失败原因
public enum PurchaseFailureReason
{
PurchasingUnavailable,//购买不可用
ExistingPurchasePending,//正在处理上一个购买的商品
ProductUnavailable,//购买的商品不可用
SignatureInvalid,//签名无效
UserCancelled,//玩家关闭购买页面
PaymentDeclined,//玩家拒绝付款
DuplicateTransaction,//重复购买永久性物品
Unknown,//未知原因
}
返回的失败原因以及其含义
var apple = m_StoreExtensionProvider.GetExtension<IAppleExtensions>();
apple.RestoreTransactions((bool result)=>{//回调逻辑,参数result返回是否购买过商品})
用于判断用户删除APP重新下载后是否恢复之前购买的永久性物品,其中回调逻辑写恢复购买的永久性物品