IAP 支付流程以及控制

最近项目优化IAP支付控制漏单、坏单问题,这里了下大概解决思路,需要服务器配合验证。如有不合理或者更好办法请大神指正


1.获取appStore的道具列表
2.获取服务器可销售道具列表
3.对比1,2显示可销售列表
3.购买道具 - 苹果支付 - 支付成功 得到payment(苹果支付完成,即此步以后的操作都与苹果无关,苹果只提供订单验证,发货是否完成都不需要和苹果交互)
3.根据道具属性(A,消耗类,B,非消耗类)进行验证
A类
4.本地记录下payment信息(引擎记录可能删除程序,所以考虑userinfo记录)
5.将payment信息提供给server,server检查是否已经处理过payment;处理过返回状态给客户端;没处理过,走苹果服务器验证receipt是否有效,有效即发货,处理状态返回给客户端;
6.客户端收到返回状态后清理userInfo缓存


B类首次购买与A类一致,只是增加购买前需要通过服务器检查是否已购买


注意:服务器端也要保持payment信息,如果要更有效的控制漏单、坏单、重复,需要服务器提供验证失败订单列表,配合客户端缓存列表,进行验证补发问题订单


特殊情况:
第3.步骤中可能苹果支付成功但是没有收到payment就崩溃或者用户干掉程序,iap基类有提供购买queue,如果未完成queue是不会移除的,所以下次程序启动会收到结果。


验证情况:
1.重新启动程序,能收到上次queue通知
2.删除程序再次安装登陆后,能收到上次queue通知


这种情况,对于多账号登陆时要考虑干掉后登陆了其他账号情况;
处理办:
第3.步骤中的queue对应payment中保留applicetionUserName,关联的登陆账号;后台验证接口要支持传入登陆者


终结情况,queue未结束,用户删除app再没用过,这个单就死了
以下是Unity IAP在iOS上的支付demo实现步骤: 1. 首先,你需要在Unity中启用IAP服务。在Unity编辑器中,选择“Window”菜单,然后选择“Unity IAP”选项。在弹出的窗口中,选择“Enable IAP”选项。这将启用Unity IAP,并将其添加到Unity项目中。 2. 在Unity IAP控制台中创建产品。在Unity IAP控制台中,选择“Products”选项卡。然后,创建一个新的产品,例如“TestProduct”。 3. 在代码中实现IAP支付功能。在Unity中,你可以使用IAPManager类在代码中实现IAP支付功能。首先,你需要在代码中初始化IAPManager。以下是一个示例: ```csharp using UnityEngine; using UnityEngine.Purchasing; public class IAPManager : MonoBehaviour, IStoreListener { private IStoreController m_Controller; void Start() { var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); builder.AddProduct("TestProduct", ProductType.Consumable); UnityPurchasing.Initialize(this, builder); } public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { m_Controller = controller; } public void OnInitializeFailed(InitializationFailureReason error) { Debug.Log("IAP initialization failed: " + error); } public void OnPurchaseFailed(Product item, PurchaseFailureReason error) { Debug.Log("IAP purchase failed: " + error); } public void OnPurchaseComplete(Product item, PurchaseEventArgs args) { Debug.Log("IAP purchase complete: " + item.definition.id); } public void Purchase(string productId) { if (m_Controller != null) { var product = m_Controller.products.WithID(productId); if (product != null && product.availableToPurchase) { m_Controller.InitiatePurchase(product); } else { Debug.Log("IAP product not available: " + productId); } } } } ``` 在上面的代码中,我们使用ConfigurationBuilder类配置产品,并使用UnityPurchasing类初始化IAPManager。然后,我们在OnInitialized方法中获取IAP控制器。在Purchase方法中,我们检查产品可用性,并调用InitiatePurchase方法启动购买流程。 4. 在iOS项目中配置IAP。要在iOS上启用IAP,你需要在Apple开发者中心创建一个新的IAP项目,并将其添加到Xcode项目中。以下是一些必要步骤: - 在Apple开发者中心中创建一个新的IAP项目。 - 将IAP项目添加到Xcode项目中。 - 在Xcode中设置应用程序的IAP权限。 - 在Xcode中添加IAP产品的标识符。 - 在Xcode中设置IAP产品的价格和描述。 5. 在Unity中测试IAP支付。在Unity中,你可以使用IAPManager中的Purchase方法测试IAP支付功能。在调用Purchase方法之前,请确保你已经在Unity IAP控制台中创建了一个有效的产品,并在iOS项目中正确配置了IAP。 以上就是Unity IAP在iOS上的支付demo实现步骤。注意,在实际发布应用程序之前,请确保你已经按照苹果的要求正确实现了IAP支付功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值