内购相关模块

本文详细介绍了iOS应用内的购买流程,包括获取商品信息、购买请求、购买验证等关键步骤,并探讨了购买过程中可能出现的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内购过程
1.获取服务端传的originalIosId,查询商品
-(void)requestProducts

关键代码:
[IAPTool requestProductsWithProductArray:array];

2.代理:获得可购买的商品
-(void)IAPToolGotProducts:(NSMutableArray *)products
在这里重新赋值、修改商品的属性。如价钱等
然后显示出购买列表来


3.点击购买
_productTypeView.resultBlock
开始请求
-(void)loadCreateOrderData
根据choosePriceModel.originalIosId,获得对应的product,购买商品
-(void)BuyProduct:(SKProduct *)product

4.监测购买队列的变化
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

5.购买成功后,验证购买凭证
- (void)verifyPruchaseWithTransactionId:(SKPaymentTransaction *)transaction price:(NSInteger)price
5.1代理方法验证
-(void)IAPToolPostToServerWithProductID:(NSString *)productID
                           encodeString:( NSString *)encodeString
                          transactionId:( NSString *)transactionId
                                  price:( NSInteger )price
相关数据存本地后,提交服务器验证
[XLInAppPurchaseTool addRecordWithPayCode:self.serviceOrderModel.payCode encodeStr:encodeString  iosToken:transactionId studentId:studentId price:price];

5.2丢单后,自行验证

6.验证成功后,删除本地数据;失败则直接显示失败页面


注意点
1.丢单问题
1.1.用户购买后,验证前退出
要把开始监听写在程序入口,在程序挂起时移除监听.
[XLInAppPurchaseTool defaultTool];初始化
关键代码
// 设置购买队列的监听器
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
如果有未完成的订单他就会直接走
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
一般情况下都是购买成功后没有结束的订单,所以他会走验证方法

1.2用户验证过程中退出或服务端返回失败等
appdelege中每次进入程序都会验证存在本地的数据
2.为什么要存到数组
因为你可能出现不止一个未验证的订单
appdelegate中
[self checkInAppPurchase];
程序出口移除监听 
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
3.为什么必须存到本地 
虽然只要不结束订单凭证就不会消失,但是验证时还需要其他信息(用户id,不然你怎么知道谁买的.或者下次登录换用户B了,你只用了本地的凭证和B,会充错)所以必须存本地.

本地数据定时删除,否则可能会造成服务端的问题
+ (void)checkIosToken:(NSString *)iosToken
这个凭证是怎么和订单一一对应的?
SKMutablePayment.applicationUsername
详见verifyPruchaseWithTransactionId方法中的自行验证

总结
无法解决用户购买后未验证但是换手机了的丢单问题 唐巧说要禁止越狱的用户内购(他们问题太多,比如被黑客挟持)
验证方法(服务端)
去appstore审核时,因为苹果测试用的是测试服务器,所以先去苹果的正式服务器验证,返回21007的话再去测试验证.

相关文件
封装好的内购工具
XLInAppPurchaseTool.h
XLInAppPurchaseTool.m
购买过程
XLVIPChooseServiceViewController.m
验证结果
XLVIPPayResultViewController.m
丢单等其他情况处理
AppDelegate.m

扩展链接
唐巧:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值