Unity 接 iOS 内购(Unity内置IAP)
Author :JerryYangCreate by 2021.03.24
环境:
Unity:2020.3.0f1c1
一、后台商品配置
进入苹果开发者后台,填写税务信息,银行信息(不填会出现购买失败);选择你要添加内购的应用,找到 In-App Purchases 选项,点击 Manage;
选择你要添加内购的应用
点击添加商品,然后完善商品信息;
注意:这里要填写所以信息,包括截图,直到状态为 Ready to Submit为止,不然也会出现购买失败
添加商品
二、unity API接入
点击 manage service 打开services面板;
Services
选择一个组织,没有的话创建一个;
根据提示打开Purchasing,导入包,如果需要更新,请点击update;
导入
购买功能可以通过unity提供的组件实现,也可以用代码实现,我们选择用代码实现。
Unity IAP
三、代码部分
using UnityEngine;using UnityEngine.Purchasing;using System;public class PurchasingManager : IStoreListener{ public static readonly PurchasingManager Instance = new PurchasingManager(); private IStoreController storeController; private static IExtensionProvider extensionProvider; private static IAppleExtensions appleExtension; //private static IGooglePlayStoreExtensions googleExtension; private Action<string> failedCallback; private Action<Product> successedCallback; PurchasingManager() { } /// <summary> /// 初始化商品 /// 建议在游戏初始化完成的时候就去初始化商品 /// </summary> public void InitProduct() { if (IsInitialized()) return; var module = StandardPurchasingModule.Instance(); ConfigurationBuilder builder = ConfigurationBuilder.Instance(module); builder.AddProduct("goods_coins100", ProductType.Consumable); builder.AddProduct("goods_vip7days", ProductType.NonConsumable); UnityPurchasing.Initialize(this, builder); } /// <summary> /// 发起内购 /// </summary> /// <param name="_productId">要购买的商品ID</param> /// <param name="_successedCallback">购买成功回调</param> /// <param name="_failedCallback">购买失败回调</param> public void Purchase(string _productId, Action<Product> _successedCallback, Action<string> _failedCallback) { failedCallback = _failedCallback; successedCallback = _successedCallback; if (!IsInitialized()) { OnFailedCallback("Not initialized."); return; } var product = storeController.products.WithID(_productId); if (product == null || !product.availableToPurchase) { OnFailedCallback("Either is not found or is not available for purchase"); return; } Debug.Log($"Inicializando compra del producto {product.metadata.localizedTitle} en la tienda."); storeController.InitiatePurchase(product); } /// <summary> /// IOS恢复内购 /// Google会在删除应用后,第一次安装是自动恢复 /// </summary> /// <param name="restoreCallback">恢复回调</param> public void IosRestore(Action<bool> restoreCallback) { if (appleExtension != null) { appleExtension.RestoreTransactions(restoreCallback); } else { Debug.LogWarning("IAppleExtensions is null"); restoreCallback(false); } } //======================================分割线========================================= public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { storeController = controller; extensionProvider = extensions; appleExtension = extensions.GetExtension<IAppleExtensions>(); //googleExtension = extensions.GetExtension<IGooglePlayStoreExtensions>(); } public void OnInitializeFailed(InitializationFailureReason error) { Debug.LogWarning("OnInitializeFailed Reason:" + error); } public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) { Debug.LogWarning("OnPurchaseFailedproduct:"+ product.transactionID + "failureReason:"+ failureReason); } public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs purchaseEvent) { if (successedCallback != null) { successedCallback(purchaseEvent.purchasedProduct); } return PurchaseProcessingResult.Complete; } private bool IsInitialized() { return storeController != null && extensionProvider != null; } private void OnFailedCallback(string _reason) { if (failedCallback != null) { failedCallback(_reason); } }}四、打包测试
包名一定和你后台的包名对应;
商品ID和类型也要和后台对应;
在苹果开发者后台的用户和访问菜单中找到沙盒,添加沙盒测试人员;
添加测试员
在App Store登陆该测试账号;
点击要购买的商品,输入密码,弹出以下弹窗的时候说明购买成功了
购买成功
走到这里说明你接成功了,恭喜你。
暂时写这么多,有不懂的或者需要补充的请私信我。
页:
[1]