【发布时间】:2015-05-15 13:09:26
【问题描述】:
我遇到了一个非常烦人的问题,涉及 iOS 上的应用内购买(消耗品)。
案例
- 我创建了一个付款请求
- 我输入我的凭据并确认 购买。
- 我在 Apple 确认购买之前退出了应用程序
- 然后我从跳板收到一个弹出窗口(应用程序被杀死)说 该付款已处理完毕。
问题
当我再次启动我的应用程序时,我添加了一个事务观察器(所有委托方法都在实现):
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
我在此之后立即记录待处理的事务及其当前状态:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
/*
Logging the content of[SKPaymentQueue defaultQueue].transactions
shows a transaction with a state of SKPaymentTransactionStatePurchased
*/
但是这个交易似乎被阻止了,因为它从不调用
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
问题是它可能在上一次被调用但我在调用之前崩溃/退出
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
由于此事务从未调用过finishTransaction:,因此它仍然处于待处理状态是正常的,但应该使用此事务调用paymentQueue:updatedTransactions:,对吗?
编辑: iTunes 在每次启动时都会询问我的密码,但是否提供密码并不会改变任何问题。
【问题讨论】:
-
您是否收到任何错误消息?
-
我希望。在 addTransactionObserver 之后没有调用任何与付款相关的内容:
-
尝试在应用程序启动时删除观察者,
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];运行应用程序后再次删除该行。每当您添加 transactionObserver 时,您有责任将其删除。如果你不这样做,它会产生一些问题,比如苹果帐户登录屏幕可能会无缘无故出现 - 查看更多信息:innofied.com/in-app-purchase-working-ios-solution/… -
这是一个临时解决方案,不是吗?每当用户在此过程中崩溃或退出应用程序时,问题仍然存在。
-
不,正如您在我提到的页面上看到的那样,您需要在每次交易完成时执行此行,无论成功与否。您必须实现
transaction failed委托方法并自己处理错误。
标签: ios in-app-purchase