为什么应用内购买沙箱总是要求“需要验证”?

17

我已经在设备设置中退出了商店。
我只在我的应用程序中输入了用户凭据。
我已经设置了一个全新的(实际上大约4次)测试用户。

为什么这条消息一直弹出?

这是否与iOS 5、自动应用程序同步或iCloud有关?


白痴行为,一直要求我验证我的付款信息,但标签[环境:沙盒]已经存在。请帮我解决这个问题。 - Geri Borbás
Geri,你解决这个问题了吗?我也遇到了完全相同的问题。 - kender
1
用加拿大商店测试用户。 - Geri Borbás
11个回答

16
我曾经遇到过与沙盒内购买相关的同样问题,在内置模式下(无需验证收据),应用程序接收到有效产品,现在我调用了addPayment,一切都没问题。但现在出现了“需要验证”的提示,付款被取消。 经过数小时的痛苦探索,我发现问题出在测试帐户上.... 我为捷克共和国iTunes商店创建了测试帐户.... 这就是失败的原因。愚蠢。 我尝试创建加拿大测试用户,结果突然可以用了! “需要验证”的提示不再出现。

2
对我们来说,直到几天前,为测试用户选择日本商店一直是可以的,但现在一个拥有美国商店的测试用户可以使用,而不是日本商店。 - hiroshi
1
确实,这是问题所在。因为某些奇怪的原因,除了美国以外的其他AppStore设置的iTunes沙盒用户帐户在我们的应用中停止工作,而绑定到美国AppStore的测试用户帐户可以正常工作。 - 100grams
兄弟,你救了我的命啊!我测试失败了好几天,感激不尽。 - Stefan
我也可以用,但我会要求苹果修复这个问题。 - meaning-matters
相同的解决方案在这里也有帮助。似乎只有通过注册美国账户进行测试才能使其在英国账户上运行。 - Zoltan Magyar
显示剩余2条评论

11

我已经在处理这个问题一个星期了,试图使用美国/加拿大的账户但一直没有成功。最终我找到了这篇帖子并且它有效: http://iphonedevsdk.com/forum/iphone-sdk-development/63008-in-app-purchase-test-account-verification-required-cant-get-passed.html 你需要一个测试账号,该账号从未与信用卡相关联,从未通过设备登录iTunes Store或App Store,如果你登录iTunes或同意任何App Store相关内容,那么测试账户将会失效并再也不能使用。

因此,为了测试你的应用内购买应用程序,你需要使用一个没有信用卡的新账户。退出商店,并且只在你正在测试的应用程序中使用你的新账户。

更新:在2013年9月iTunes进行长时间系统维护后,只有美国的测试账户可以进行测试购买。


2
这正是我的问题。为了更清楚地说明,您需要在iTunes Connect上设置帐户,并在设备上注销任何帐户。通过您的应用程序进行内购买,并直接登录。不要同意任何合同或法律协议。之后应该可以正常工作。 - SushiGrass Jacob
非常感谢。这对我有用。只需创建,然后直接从应用程序中使用即可。以前,我通过从“设置”->“商店”登录和/或输入信用卡信息等方式破坏了帐户。 - Timo

3

我自己也曾经遇到过这个问题,最终我找到了一个可行的解决办法...

  1. 在设备的设置中登出iTunes帐户(同时作为预防措施,关闭设置和iTunes应用程序)
  2. 删除应用
  3. 在“itunesconnect.apple.com”上创建一个新的测试用户,并选择美国作为您的商店
  4. 重新安装应用程序
  5. 尝试在应用程序中进行购买
  6. 输入您的新测试用户帐户详细信息
  7. 如果弹出窗口说明需要切换商店,请立即按“主页”键。不要按“确定”。
  8. 重新启动应用程序,然后再次尝试。现在应该可以正常工作了。

希望这可以解决你的问题...


2

除了以上的答案,还需要注意以下几点:

1)从设备中卸载您的应用程序。

2)在iTunes Connect上创建一个新的测试帐户并验证其电子邮件地址。永远不要为此测试帐户添加任何支付信息,不管是在线、在iTunes上还是在您的设备上。这样做可能会使您的测试帐户无效(并触发“验证付款信息”的恶性循环)。也永远不要在沙盒之外使用此测试帐户。

3)从您的设备上注销App Store。不要通过“设置”>“iTunes&App Store”在您的设备上重新登录App Store。稍后您的应用将要求您输入登录凭据(请参见5-6点)

4)重新安装您的应用程序。

5)尝试进行应用内购买。现在应提示您输入用户名和密码(因为您已从App Store注销)

6)输入您的用户名和密码:您不应该看到可怕的“需要验证:在您购买之前,您必须验证您的付款信息”消息,购买应该成功。


1
即使在沙箱中,您仍需要通过向服务器验证收据来完成购买。 这对应于内置模型的6-7-8步骤和服务器模型的11-12-13步骤。

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/OverviewoftheStoreKitAPI.html

您需要做的是:

从交易的transactionReceipt属性中检索收据数据并使用base64编码对其进行编码。创建像这样的json:

{
    "receipt-data" : "(receipt in base 64 encoding)"
}

向生产验证URL发出帖子:

https://buy.itunes.apple.com/verifyReceipt

对于沙盒环境:

https://sandbox.itunes.apple.com/verifyReceipt

响应如下:

{
    "status" : 0,
    "receipt" : { ... }
}

如果状态键的值为0,则这是一个有效的收据。 如果值不是0,则此收据无效。

有关更多信息,请查看指南: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html


这似乎与验证收据有关;而我的问题在于当我使用我的测试用户帐户进行购买并登录时,Appstore要求我验证我的付款信息。它应该只是将交易标记为成功。我很久以前就没有看到过这种行为了,上次测试购买时也没有出现这种情况 - 但在此期间iOS 5推出了,我不确定该怪谁。 - kender
在输入我的TEST ID和密码后,我得到了这样的对话框:http://dl.dropbox.com/u/3943878/sandbox_dialog.png - kender

1

Swift 3

在你的项目中任意位置插入以下临时代码:

for transaction: AnyObject in SKPaymentQueue.default().transactions {
    guard let currentTransaction: SKPaymentTransaction = transaction as? SKPaymentTransaction else {return}
    SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
}

这将清除支付队列。如果可以的话,请确保运行它比viewDidLoad晚得多。我设置了一个按钮来触发它。运行了几次后,就删除了代码。再也没有令人烦恼的验证弹窗了。


0

创建一个加拿大测试用户可以解决这个问题。


0

如果您在购买第四个IAP项目时遇到问题。

看起来,每个测试帐户不能购买超过一个应用程序的3个项目。您可以从itunesconnect.apple.com->管理用户->测试用户创建一个新的测试帐户来测试您的第四个IAP项目。


0

我在编程中遇到了同样的问题,花费了数小时才发现iTunes Connect测试账户的国家/地区和您的设备/模拟器必须相同

请验证一下,因为这解决了我的问题。


1
你在哪里更改了设备的国家/地区?我已经将设置>通用>国际设置为与测试帐户相同的国家,但仍然存在此问题。 - meaning-matters

0

为美国注册一个新的测试用户。您可以使用任何电子邮件地址。

在设置下注销。 删除应用程序。 通过xCode再次启动它, 在应用程序中使用您的新用户登录。

可能会显示您不在美国并打开浏览器,请关闭浏览器并重新启动。

现在应该可以正常工作了。


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