ios - 由于 iTunes Store 连接错误,Receipt Refresh 导致 Apple Review 拒绝 App
问题描述
我看到我的应用程序发生了一件非常奇怪的事情。
具体来说,当我检测到应用程序的捆绑包中不包含收据文件时,我发出收据请求以便从 Apple 下载收据。
当然,调用收据刷新 API 会显示 Apple ID 登录屏幕。
为了测试我的应用程序,我在 iTunes Connect 中创建了“测试”/“沙盒”用户。
在我的设备(带WiFi的iPad)上运行该应用程序时,该应用程序成功调用了刷新回执功能,然后果然弹出Apple ID登录屏幕。我输入了在 iTunes Connect 中配置的测试/沙盒用户的正确凭据,一切都很好(即,收据已成功下载。)
但是,如果我尝试使用真正的 Apple ID 用户,我会收到“didFailWithError”,并且本地化错误描述为:“无法连接到 iTunes Store”,错误代码为“16”。
在我看来,这是意料之中的。
现在,可悲的是,当我将我的构建提交给 Apple Review 时,他们得到了上面提到的确切错误。
他们说他们正在使用沙盒用户,因此他们拒绝了该应用程序,因为他们无法继续。
注意:他们也使用带 WiFi 的 iPad 来测试应用程序。
只有在使用真实的 Apple ID 用户帐户时,我一直能够重现此问题,并且从未遇到过沙盒用户的问题!
我在某处读到过,还必须确保沙盒用户在测试时退出“设置”屏幕。我礼貌地要求 Apple Review 确保他们在测试时不会登录到“设置”。
他们给我发了两张截图:一张是 Apple ID 登录屏幕,要求输入Apple ID 用户和密码(这让我认为他们确实已经退出了“设置”屏幕,否则他们已经有Apple ID 用户预先填充在对话框中)和一个显示本文中提到的错误的用户。
我现在不知道如何继续,因为我根本无法重现这个问题。它适用于我设备上的任何沙盒用户——它只是不适用于真正的 Apple ID 用户。
Apple Review 给我发了一张截图,显示了这篇文章中提到的错误,同样,我只能在真正的沙盒环境中使用真正的 Apple ID 用户时重现该错误。
我认为唯一的区别可能是我的设备运行的是 iOS 10.x,而他们的设备可能运行的是 iOS 12.x,但我认为这应该不是问题。
有什么想法吗 ?
提前致谢!
PS,他们没有使用我创建的 Apple ID 沙盒用户——他们使用自己的。我曾建议将我的沙盒用户发送给他们进行测试,但他们说他们不能接受,因为这会侵犯隐私。
更新:我已经确认 iOS 12.1 上也发生了同样的事情,所以这不是由于操作系统的差异。
解决方案
至少在我看来,刷新收据 API 本身似乎存在问题。
我已确认发起购买请求会导致应用程序从 Apple 下载带有所提供用户(在我们的案例中为沙盒用户)凭据的收据。
审核团队已确认购买请求对其沙盒用户正常工作,但是,刷新收据不适用于完全相同的用户(它会导致代码 16,“无法连接到 iTunes Store”)!
我还确认“恢复”请求会导致收据被下载,并且它可以与提供的沙盒用户一起使用。
总之,“购买”和“请求”操作都会导致应用程序从 Apple 下载收据,并且它们对于审核小组提供的沙盒用户正常工作。但是,对于完全相同的用户,收据刷新请求失败!
我仍然可以要求刷新收据,因为它应该适用于实际的 App Store 下载,但它显然不适用于应用审查。
推荐阅读
- java - Spring Annotation 驱动的配置 - 无法解析匹配的构造函数
- c - 两个大数 char 类型的最高有效数字之和
- vue.js - Vue.js 单元测试确保组件在挂载后稳定
- amazon-web-services - aws lambda SES 函数超时
- git - JetBrains,团队项目,gitignore
- ruby-on-rails - 如何在 rake 任务中捕获引发的异常
- java - 我想在 mcp“mod coder pack”中让玩家失明
- javascript - 用 python keras 加载的 jpg 与用 javascript 加载的 jpg 不同
- linux - 将多个用户批量分配给多个组
- laravel-5 - Laravel - 如何在没有数据库的情况下为 API 创建身份验证