【问题标题】:SKPaymentTransaction stuckSKPaymentTransaction 卡住
【发布时间】: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


【解决方案1】:

现在已修复。

我使用的是远程通知 SDK,它也可以跟踪购买情况(因此我能够向特定的付费用户发送通知)。 SDK 在支付系统之前添加了一个 transactionObserver,它没有做任何事情。这意味着调用了 updateTransaction 方法,但只有远程通知 SDK 知道此更新。

在联系支持人员后,他们确认该问题已在最新的 SDK 版本中得到修复,并进行了升级。

【讨论】:

  • 哪个 SDK?我也有同样的问题!
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 2013-02-26
  • 2017-12-29
  • 2011-08-04
  • 2011-11-17
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多