macOSアプリ Simple-Paint OCR を審査に出した時に課金周りの実装で何度もリジェクトされたのでその時の記録です。
今回実装したのは非消費型の買い切りプランと週間、月間、年間のサブスクリプション(以下サブスク)になります。
StoreKit2の実装(コード等)については こちら
StoreKit2以外についてはわかりません。
課金プラン実装での要点、特にサブスク
特に商品表示に拘りがなければサブスクを扱う場合は SubscriptionStoreView を使うこと。
ユーザー許諾書(EULA)とプライバシーポリシーが明示できてないとリジェクトされます。
※1.
・Paywall画面は商品(プラン等)を購入したら具体的に何の機能が解放されるか詳細をそこに書く必要がある。
・ウィンドウサイズ次第でPaywall詳細やボタン等が隠れるとダメ(料金一覧は少しくらいなら平気)
・ストア側にも詳細を明確に書く必要がある。スクリーンショットも有料機能には注釈が欲しい。
・昔のアプリを参考にすると100%落ちる、どうやら最近かなり厳しくなってるらしい。
SubscriptionStoreView の純正復元ボタン
【 .storeButton(.visible, for: .restorePurchases)】
サブスクはこれを使っていないと永遠にリジェクトされる。おそらく自前の復元ボタンだけではダメ。
サブスクで SubscriptionStoreView を使ったら復元ボタンは純正の物だけの表示じゃないと通らない、買い切りのそばに自前の復元ボタン置いてもダメだった。(課金システムはApple純正を使うならそれだけを使え、という意思表示を感じたw)
※2.
・審査はアプリ本体とアプリ内課金のローカリゼーション審査は別、アプリ内課金がダメでも本体が審査通れば販売される。
・アプリ内課金のスクリーンショットは本体が通る状態の物を使わないとリジェクトされる。面倒だが毎回撮り直した方が無難。
サブスクを売るならアプリ内に必須条件
- サブスク名
- 期間
- 価格
- Privacy Policyリンク
- Terms of Use(EULA)リンク
そしてストアメタデータにも:
- Privacy Policy URL(App Store Connectの欄)
- EULAリンク(説明文 or EULA欄)
が必要。
App Store審査に落ちた理由まとめ
Issue Description
The submission did not include all the required information for apps offering auto-renewable subscriptions.
The following information needs to be included within the app:
- A functional link to the Terms of Use (EULA)
- A functional link to the privacy policy
You can use Subscription StoreView to easily include all of the required information in the app’s purchase flow.
The following information needs to be included in the App Store metadata: - A functional link to the Terms of Use (EULA). If you are using the standard Apple Terms of Use (EULA), include a link to the Terms of Use in the App Description. If you are using a custom EULA, add it in
App Store Connect.
Next Steps
Update the app and App Store metadata to include the information specified above.
Resources
Apps offering auto-renewable subscriptions must include all of the following required information in the app itself: - Title of auto-renewing subscription (this may be the same as the in-app purchase product name)
- Length of subscription
- Price of subscription, and price per unit if appropriate
- Functional links to the privacy policy and Terms of Use (EULA)
The app metadata must also include functional links to the privacy policy in the Privacy Policy field in App Store Connect and the Terms of Use (EULA) in the App Description or EULA field in App Store
Connect.
Review Schedule 2 of the Apple Developer Program License Agreement to learn more.
要約
・利用規約(EULA)の説明へのリンクがアプリの課金画面にありません。
・プライバシーポリシーの説明へのリンクがアプリの課金画面がありません。
・アップルが用意しているサブスク用UIを使えばそれらは揃っていますよ。
・利用規約(EULA)の説明へのリンクがストアの説明文にありません。
・プライバシーポリシーの説明へのリンクがストアの説明文にありません。
対処
StoreKit2に入力するところがあるのでそこにURLを書く。
ストアのアプリ説明概要の一番下にリンクを貼る。
We noticed your app’s metadata refers to paid content or features, but they are not clearly identified as requiring additional purchase. Specifically, your screenshot references subscription features.
Paid digital content referenced in your metadata must be clearly labelled to ensure users understand what is and isn’t included in your app.
Next Steps
To resolve this issue, please remove these references or clearly mark paid content or features as requiring separate purchases.
要約
・ストアのアプリ説明で課金要素があるのはわかったけど、スクリーンショットではそれが判断できないよ。ちゃんとわかるようなスクリーンショットにしてね。
・ストアのアプリ説明で無課金で利用できる機能と課金が必要になる部分を明確に説明してね。
対処
面倒だったので無課金で使用できる機能を廃止。
スクリーンショット全てに「課金機能」と表示。
アプリ説明概要に「以下は課金プラン購入後に使える機能」と明言。
Your app uses auto-renewable subscriptions, but it does not clearly describe what the user will receive for the price.
Specifically, the app does not provides explanation nor details of what services and features the subscription offers
Next Steps
To resolve this issue, please revise the details of your subscription to clearly describe what the user will receive for the price.
要約
サブスク等の課金することによってどんなサービスや機能をユーザーが得ることができるかわからないよ、アプリにその説明を明確に書いてね。
アプリの課金画面でプラン名とプラン購入後に使用できる機能を【一つ一つ】説明した文を追加。
ユーザーに理解して購入してもらうため、ストア側のクレーマー対策と思われる。
We have started the review of your app, but we are not able to continue because we cannot locate the in-app purchases, such as Premium Access Yearly and Premium Access Monthly, within your app at
this time.
Next Steps
To help us proceed with the review of your app, please reply to this message providing the steps for locating the in-app purchases in your app.
Note that in-app purchases are reviewed in an Apple-provided sandbox environment. Make sure they have been appropriately configured for review in the Apple-provided sandbox environment.
ff vou are restricting access to in-app burchases based on factors such as storefront or device confiaurations, Dlease include this information in vour reply along with stens to enable the in-app burchases
for our review.
Additionally, note that the Account Holder must accept the Paid Apps Agreement in the Business section of App Store Connect before paid in-app purchases will function.
要約
サブスクやアプリ内課金の内容が表示されないよ(この時はサブスク申請がリジェクトされててそれに気づかなかった時だった気がします)
対処
サブスク等の再申請。
The app offers in-app purchases that can be restored but does not include a “Restore Purchases ” feature to allow users to restore the previously purchased in-app purchases.
Next Steps
To restore previously purchased in-app purchase products, it would be appropriate to provide a distinct “Restore” button and initiate the restore process when the “Restore” button is tapped by the user.
Note that automatically restoring purchases on launch will not resolve this issue.
要約
“Restore Purchases” (購入状態を復元する)ボタンがありません、アプリ起動時に自動で機能を実行するんじゃなくてユーザーが任意に実行できる状態で実装してね。
(自前でこの機能は実装していた)
対処
【StoreKit2】の”Restore Purchases” ボタンの実装
The app offers in-app purchases that can be restored but does not include a “Restore Purchases ” feature to allow users to restore the previously purchased in-app purchases.
Next Steps
To restore previously purchased in-app purchase products, it would be appropriate to provide a distinct “Restore” button and initiate the restore process when the “Restore” button is tapped by the user.
Note that automatically restoring purchases on launch will not resolve this issue.
これも購入復元ボタン関連ですがいまいち理解が出来ませんでした。
この時出した状態は復元ボタンがStoreKit2に付属していて設定で出せるボタンと自前で同じ機能を実装したものが2つある状態でした。
対処
自前の”Restore Purchases”ボタンを削除
コメント