无法在付款队列中完成未完成的交易

Pab*_*blo 12 storekit in-app-purchase ios

我的应用程序在IAP沙箱中进入了一些奇怪的状态...每次启动应用程序时都会询问特定测试用户的密码.我想由于未完成的交易.我真的想完成那笔交易,但这是不可能的.一些背景信息以及我为它做了些什么:

  • 我从itunesconnect删除了该测试用户
  • 一旦应用程序启动我就打电话 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]
  • 输入该特定测试用户的密码或点击取消后,未收到任何支付队列更新通知
  • [SKPaymentQueue defaultQueue].transactions.count总是0如此,所以我无法手动完成未完成的交易
  • 我从设备中删除应用程序,重新启动设备 - 仍然要求输入密码
  • 我正在从设置 - > iTunes和App Store注销用户
  • 取消对话框询问密码后,我可以用另一个测试用户登录,但下次我仍然得到旧测试用户密码的对话框.

唯一的问题是改变包ID,这在我的情况下是不可取的.希望有人知道如何摆脱未完成的交易的替代方法.

Cli*_*udo 9

我把它放在这里是因为有很多非常糟糕的错误答案提供了如何解决这个问题的错误信息.它不是那么罕见,或神秘或苹果虫,它是App商店设计的一部分,并帮助您建立正确的IAP.

不要:

  • 曾经永远删除沙盒测试用户.这使得无法解决问题,你将陷入无尽的循环地狱,直到交易最终消失......它确实消失了,但需要很长时间,比如几天或几周.
  • 如果删除沙盒测试用户,当您随后反复提示(例如,您的应用程序每次设置IAP)登录测试用户存储帐户以完成事务时,您不能因为用户已被删除.您也无法添加测试用户,因为开发人员门户网站会说用户ID 已被使用.
  • 不要:删除应用程序重新安装iOS或任何其他此类BS.它没有效果,没有解决问题,浪费了很多时间.

做:

  • 在所有交易中调用FINISH.如果由于某种原因中断了一个,只需在App的后续运行中完成.该应用程序将重复发送支付队列通知,直到您呼叫完成为止,让您有机会打电话[[SKPaymentQueue defaultQueue] finishTransaction:transaction];这是故意的,并预防中断的交易.

而已!完成所有交易,否则每次你的应用程序在该设备上启动时,你都会被发送到Endless Loop地狱,重复请求登录一个不存在的测试用户App Store帐户:(

  • 我希望我在删除沙箱用户之前已经阅读了你的评论;-) (4认同)

Giw*_*wan 0

您可能需要重复这些步骤几次才能生效。一旦调用事务观察者委托方法就完成事务。

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{    
    for (SKPaymentTransaction *transaction in transactions) {

        // Temporary code to solve the loop issue
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

        /*
        switch (transaction.transactionState) {
        // Call the appropriate custom method.
        case SKPaymentTransactionStatePurchased:
            [self completeTransaction:transaction];
            break;
        case SKPaymentTransactionStateFailed:
            [self failedTransaction:transaction];
            break;
        case SKPaymentTransactionStateRestored:
        default:
            break;
        }
        */
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您运行应用程序并使用已删除的沙箱帐户登录。上述方法应该立即触发并完成交易。如果 transactions 数组为零,请尝试在 FOR 循环之前调用完成代码。