被困在沙盒账户中

3
我创建了一个测试账户来检查应用内购买。我可以成功购买。之后,我发现导航中有一个漏洞。我修复了这个漏洞,创建了另一个账户,并删除了我在上一个会话中登录的账户。现在,我无法再测试应用内购买,因为应用商店会自动用一个已经不存在的幽灵账户登录。尽管在每个调试会话之前都在设置中注销商店并删除应用程序的先前版本,但我仍然被要求输入密码。我该如何重置这个问题?
谢谢, Nava

你找到这个问题的解决方案了吗? - Roozbeh Zabihollahi
3个回答

2

我也曾遇到类似问题。以下是我的解决方法:

  1. 设置 -> 重置 -> 重置所有设置
  2. 设置 -> iTunes & App Store -> 注销
  3. 删除应用程序
  4. 从XCode重新启动应用程序

更新:我意识到问题在于我的代码中没有这一行:

[[SKPaymentQueue defaultQueue] finishTransaction:tran];

那意味着我的旧交易未完成,iPhone 正在试图完成之前发生的旧交易。当我将此行代码添加到我的代码中时,旧用户密码请求不再出现。

1

我知道这是个旧话题,但我在寻找解决方案时遇到了麻烦,并经历了一些令人昏昏欲睡的试错过程,直到我找到了一个解决方案,所以我想在这里分享一下,因为我无法在其他地方找到它。

首先,在每次交易后,请确保您调用:

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

我的情况是由于一个交易没有完成并留在队列中,所以即使我切换到另一个沙盒账户,它仍然继续要求我旧账户的密码。
为了解决这个问题,我添加了:
SKPaymentQueue *queue = [SKPaymentQueue defaultQueue];
for (SKPaymentTransaction *transaction in queue.transactions) {
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

在我添加交易观察器之前,即这样:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

也就是说,在

标签中。
(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

函数,我添加了这行代码:

[queue finishTransaction:transaction];

在switch语句的SKPaymentTransactionStateRestored和SKPaymentTransactionStateFailed情况下。不要将其添加到已购买状态,因为据我所知,你不被允许从那里调用finish。

我不确定上述两个步骤中哪一个修复了错误,因为直到我注销了iPhone,删除了应用程序,关闭电源,并进行了干净的重建/安装,它才停止要求我输入有缺陷的帐户的密码。希望这能帮助某人。

编辑:(11/12/15)

所以我发现破坏沙盒帐户的原因。在恢复购买后,然后按home键,重新打开并再次点击恢复按钮导致崩溃。 恢复保留在队列中,以上过程是摆脱要求输入密码弹出窗口的唯一方法。

为了阻止这种情况,我添加了:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

在我的主视图控制器中,在我将应用程序切换到后台之前,通过tearDown函数(由applicationDidEnterBackground:调用)对我的应用内购买管理器对象进行了nil处理。 我认为发生的情况是我多次将该对象添加为事务观察者,这导致了奇怪的行为。从外观上看,这似乎已完全解决了问题,因为我再也无法重新创建该错误。


这个问题很老了,但我相信你已经找到了答案。无论如何,谢谢。 - Nava Carmon

0

你的意思是,即使你进入“设置”应用程序 -> “商店” -> “注销”,你仍然可以从之前的测试帐户中获取用户名?你是否也尝试从设备中删除该应用程序?这为我解决了类似的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接