Receipt Refresh导致Apple Review因iTunes Store连接错误拒绝App

Receipt Refresh causes Apple Review to Reject App due to iTunes Store Connection Error

我发现我的应用程序发生了一件非常奇怪的事情。

具体来说,当我检测到应用程序的捆绑包中不包含收据文件时,我正在发出收据请求以便从 Apple 下载收据。

当然,调用收据刷新 API 会导致显示 Apple ID 登录屏幕。

我已经在 iTunes Connect 中创建了 "test"/"sandbox" 个用户来测试我的应用程序。

当运行我的设备上的应用程序(iPad有WiFi),应用程序成功调用刷新回执功能,然后果然弹出Apple ID登录屏幕。我输入了在 iTunes Connect 中配置的 test/sandbox 用户的正确凭据,一切正常(即收据已成功下载。)

但是,如果我尝试使用真实的 Apple ID 用户,我会得到 "didFailWithError" 并且本地化错误描述为:"Cannot connect to iTunes Store",错误代码为“16”。

我认为这是意料之中的事情。

现在,令人难过的是,当我将我的构建提交给 Apple Review 时,他们收到了上述确切的错误。

他们说他们正在使用沙盒用户,因此他们拒绝了该应用程序,因为他们无法继续。

注意:他们也使用 iPad 和 WiFi 来测试应用程序。

只有在使用真实的 Apple ID 用户帐户时,我才始终能够重现此问题,而且沙盒用户从未遇到过问题!

我在某处读到,在测试时还必须确保沙箱用户已从 "Settings" 屏幕注销。我已礼貌地要求 Apple Review 确保他们在测试时不会登录 "Settings"。

他们给我发了两张截图:一张是 Apple ID 登录屏幕,要求 BOTH Apple ID 用户和密码(这让我认为他们确实是注销 "Settings" 屏幕,否则他们已经在对话框中预填充了 Apple ID 用户)和一个显示此 post.

中提到的错误

我现在不知道如何继续,因为我根本无法重现这个问题。它适用于我设备上的任何沙盒用户——只是不适用于真正的 Apple ID 用户。

Apple Review 向我发送了一张屏幕截图,其中显示了此 post 中提到的错误,同样,我只能在真正的沙盒环境中使用真正的 Apple ID 用户时才能重现该错误。

我认为唯一的区别可能是我的设备是 运行 iOS 10.x 而他们的设备可能是 运行 iOS 12.x 但我认为这不是问题。

有什么想法吗?

提前致谢!

P.S.,他们没有使用我创建的 Apple ID 沙箱用户——他们使用自己的。我建议他们把我的沙箱用户发给他们测试,但他们说他们不能接受,因为这会侵犯隐私。

更新:我已经确认在 iOS 12.1 上发生了同样的事情,所以这不是由于 OS 差异。

至少在我看来,刷新收据似乎有问题 API 本身。

我已确认发起购买请求会导致应用从 Apple 下载收据,其中包含所提供用户(在我们的示例中为沙盒用户)的凭据。

审查小组已确认购买请求可以与他们的沙盒用户一起正常工作,但是,刷新收据不适用于完全相同的用户(它导致代码 16,"Cannot connect to iTunes Store")!

我还确认 "Restore" 请求导致收据被下载,并且它适用于提供的沙盒用户。

总之,"Purchase" 和 "Request" 操作都会导致应用程序从 Apple 下载收据,并且它们对于审核小组提供的沙盒用户可以正常工作。但是,对于完全相同的用户,收据刷新请求失败!

我仍然可以要求刷新收据,因为它对于实际的 App Store 下载应该可以正常工作,但显然不适用于应用审查。