IAP监听购买结果paymentQueue,SKPaymentTransaction方法重复累计调用解决
来源:互联网 发布:淘宝手机怎么上传宝贝 编辑:程序博客网 时间:2024/05/16 11:43
最近在做IAP的时候无意发现以前写的内购代码有个小漏洞,收到内购的结果处理会根据购买次数而相应的增加,实现消息监听的初始化和结果监听代码处理如下:
- (id)initWithPayConstructor:(NSString *) productIdStr{ self = [super init]; if (self) { // Custom initialization [self initProductId:productIdStr]; // 监听购买结果 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; } return self;}
//监听购买结果- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{ for(SKPaymentTransaction *tran in transaction){ switch (tran.transactionState) { case SKPaymentTransactionStatePurchased: { NSLog(@"交易完成"); [self completeTransaction:tran]; CCHelp* cppHelper = GetCCHelp(); cppHelper->purchaseResult(1); [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } break; case SKPaymentTransactionStatePurchasing: { NSLog(@"商品添加进列表"); } break; case SKPaymentTransactionStateRestored: { NSLog(@"已经购买过商品"); [self restoreTransaction:tran]; [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } break; case SKPaymentTransactionStateFailed: { NSLog(@"交易失败"); [self failedTransaction:tran]; CCHelp* cppHelper = GetCCHelp(); cppHelper->purchaseResult(4); [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } break; default: { CCHelp* cppHelper = GetCCHelp(); cppHelper->purchaseResult(5); [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } break; } }}
原因:每次购买都会重复添加transaction的消息监听,所以结果返回会重复调用。
解决方案1修改如下:加判断处理
static bool hasAddObersver = NO;- (id)initWithPayConstructor:(NSString *) productIdStr{ self = [super init]; if (self) { // Custom initialization [self initProductId:productIdStr]; if (!hasAddObersver) { hasAddObersver = YES; // 监听购买结果 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; } } return self;}
0 0
- IAP监听购买结果paymentQueue,SKPaymentTransaction方法重复累计调用解决
- 旋屏时,OnCreate方法重复调用的解决
- listview重复调用getView()方法,解决
- IAP内置购买服务器端
- IAP-应用内购买
- iOS iAP 支付与购买
- IAP-应用内购买流程
- 解决刷新页面造成的Form重复提交触发监听方法
- 解决重复调用onCreate方案
- JavaScript、jquery方法累计
- IAP(程序内购买): 完全攻略
- IAP(程序内购买): 完全攻略
- IAP(程序内购买): 完全攻略
- IAP( 应用程序內购买): 完全攻略
- 【IOS】IAP (内置购买) 服务器端代码
- IAP(程序内购买): 完全攻略
- IAP( 应用程序內购买): 完全攻略
- IAP(程序内购买): 完全攻略
- Java synchronized详解
- 硬改WRT54GL
- Python简单入门语法python基础入门知识
- redis多节点设置
- H5—拖放
- IAP监听购买结果paymentQueue,SKPaymentTransaction方法重复累计调用解决
- C#多线程与异步
- 弹出框
- bzoj 2440 -莫比乌斯函数的应用 + 容斥原理
- Tomcat下载及安装
- 如何利用CSS给同一个网页中的超链接设置设置不同的样式?
- java写入文件的几种方法分享
- Centos中查看nginx、apache、php、mysql配置文件路径
- 快排详解