关于IAP审核

"审核的痛"

Posted by littleplayer on April 6, 2020

Apple Review是每个开发者心中的一片沼泽地。

支付知否

公司最近有课程需要销售,这就无可避免的谈支付,支付知否? 敲黑板

1
2
->如果是虚拟产品销售(积分、课程、线上服务)你必须的用In-App Purchase. 
->如果是实体产品销售,请用其他支付(支付宝、微信)等

IAP产品类型选择

1
-> non-consume不可以直接购买课程物品,必须得有中间货币,否则很难通过。

审核被拒的点

Guideline 1.1.6 - Safety - Objectionable Content(支付图标用了applepay)

我们更换了所有把IAP误导为ApplePay的图标文字。

Guideline 2.1 - Performance - App Completeness

We found that your in-app purchase products exhibited one or more bugs when reviewed on iPhone running iOS 13.3.1 on Wi-Fi. Next Steps When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code “Sandbox receipt used in production,” you should validate against the test environment instead.

支付失败,苹果的支付沙盒市场会有异常,导致支付失败,所以你得保证重试等机制,或者解释清楚。

Guideline 3.0 - Business

We began the review of your app, but we are not able to continue because we need additional information about your app. Please reply to this message in Resolution Center to confirm that 109.99 USD is the intended price of your in-app purchase product. If you have additional information about your app, please include it in your response as well. Once we receive your confirmation, we will continue with the review of your app. Please see attached screenshot for details.

我的商品是在线课程,我们有很多价值千元的课程,目前配置了一档698元(109.99USD), 以后有可能会配置更高价格的产品。

1.1 Safety: Objectionable Content

We noticed that your app’s in-app purchase products are labeled as ¥, which could confuse and mislead users into believing they are purchasing a real currency.

我们用¥是我们课程的标价,我们的课程是通过¥和蕃茄币两种报价。

2.1 Performance: App Completeness(你要上的IAP产品需全部展示给审核来审)

We found that while you have submitted in-app purchase products for your app, the in-app purchase functionality is not present in your binary.

We are unable to complete the review of your app because one or more of your in-app purchase products have not been submitted for review.

是的,我们目前是配置了一个购买价格,后期课程会全部补上价格的,如果必须的话,我们会试着上全部的价格。

3.1.1 Business: Payments - In-App Purchase(不可以直接购买,得用中间货币的概念-积分)

Consumable 课程购买是可消耗的(Consumable),并非是订阅(Subscribe)

支付失败

1
2
3
4
5
6
7
8
9
10
11
12
https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL
在沙盒中https://sandbox.itunes.apple.com/verifyReceipt测试您的应用程序以及审查应用程序时,请使用沙盒URL 。
https://buy.itunes.apple.com/verifyReceipt您的应用程序在App Store中发布后,请使用生产URL 。
重要提示:  “应用程序审查”团队将审查沙箱中的应用程序。
请务必先使用生产网址验证收据;如果您收到21007状态代码,请继续使用沙盒URL进行验证。使用此方法,可以确保在沙盒中测试或审阅您的应用程序或在App Store中运行应用程序时,无需在URL之间切换。
状态代码21007表示此收据是沙盒收据,但已发送给生产服务以进行验证。状态为0表示收据已正确验证。有关更多信息,请参阅WWDC 2012:使用应用内购买管理订阅。
本次购买失败。原因:0Error Domain=SKErrorDomain Code=0 "无法连接iTunes Store" UserInfo={NSLocalizedDescription=无法连接iTunes Store}
本次购买失败。原因:-1200Error Domain=NSURLErrorDomain Code=-1200 "无法连接iTunes Store" UserInfo={_kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <6BCD6141-BDB5-4329-A8B9-F1B5D6F7D44A>.<2>, NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, NSErrorFailingURLKey=https://sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppBuy, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <6BCD6141-BDB5-4329-A8B9-F1B5D6F7D44A>.<2>"
), NSLocalizedDescription=无法连接iTunes Store, NSErrorFailingURLStringKey=https://sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppBuy, NSUnderlyingError=0x2831e03c0 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9816, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9816}}, _kCFStreamErrorCodeKey=-9816}
本次购买失败。原因:0Error Domain=SKErrorDomain Code=0 "无法连接iTunes Store" UserInfo={NSLocalizedDescription=无法连接iTunes Store}

最后,苹果审核是在美国加利福尼亚州用旧金山时间,一般你睡觉的时候他们就上班了即24点-第二天9点,不过有时候会再晚上23点左右审核,可能是他们夏令时间。

注意,苹果的审核精通各国语言,不要以为花言巧语即可骗过审,往往这种策略是欲速则不达,你只需要解释清楚你的app设计功能模式即可。