メモパチにパチンコ・スロット向けの機能拡張と掲示板機能を追加したバージョンのApp Store審査に挑んだ。結果は1回リジェクト、2回目で通過。
難所は最初からわかっていた。「パチンコ・スロット用」というコンテンツの性質と、ユーザー投稿が発生する掲示板機能の2点だ。どちらも対策を重ねていたが、リジェクトは起きた。なぜ起きたか、どう直したかを記録する。
大前提
まず揃えるべき3点。
どんなアプリでも審査前に最低限必要なものがある。これがなければ話にならない、という3点だ。
-
プライバシーポリシー アプリが収集するデータ、利用目的、第三者提供の有無を明記したページ。外部URLで提供し、App Store Connectのメタデータにも記載する。ログイン機能やアナリティクスを使っていれば必須。
-
利用規約 掲示板など投稿機能がある場合は特に重要。禁止事項・アカウント停止の条件・コンテンツの帰属など。ユーザー生成コンテンツ(UGC)を扱うなら、モデレーション方針も記載しておく。
-
お問い合わせ先 メールアドレスまたは問い合わせフォームのURL。App Store Connectに記載し、アプリ内からもアクセスできる導線を用意する。
難所① コンテンツの性質
パチンコ・スロット用アプリの審査対策。
ギャンブル関連コンテンツはApp Storeのガイドラインで厳しく扱われる。ただし、「メモアプリ」である点を誠実に説明することで、大きな問題にはならなかった。
重要なのは説明の正確さだ。「パチンコ・スロットで使うメモアプリ」であり、ギャンブル行為そのものを提供するアプリではないことをメタデータとApp Reviewメモで明確に伝える。年齢制限は17歳以上(Frequent/Intense Gambling)に設定し、該当するコンテンツカテゴリを正直に申告する。
隠す必要はない。むしろ曖昧にする方がリジェクトのリスクが高い。
難所② 掲示板機能
UGCアプリに必要な対応、6項目。
ユーザーが投稿できる掲示板機能を持つアプリは、モデレーション・認証・データ管理の各面で相応の実装が求められる。Appleのガイドラインが求める水準をクリアするために実装したのは以下の6点だ。
-
BAN機能(ユーザー永久停止) 問題のあるユーザーをアプリから締め出す手段。運営側(管理画面)から実行できるようにする。BANされたユーザーの投稿も非表示になるよう実装する。
-
通報機能(閾値超過で自動非表示) ユーザーが投稿を通報できる機能。通報数が一定の閾値を超えると自動で投稿を非表示にする仕組みを入れると、運営の手動対応が追いつかない状況でも最低限の抑止になる。
-
単体非表示(個別投稿の非表示) 通報閾値に届かない投稿でも、運営が個別に非表示にできる機能。BAN(ユーザー単位)とは別に、投稿単位での対応手段として用意する。
-
ログイン機能(Google・Apple) 投稿機能があるアプリはなりすましや無秩序な投稿を防ぐためにログインを要求する。iOSアプリでサードパーティログイン(Googleなど)を使う場合、Sign in with Appleの実装は必須。ガイドライン4.8に明記されており、これがないと確実にリジェクトされる。
-
アカウント削除機能 2022年6月以降、アカウント作成機能があるアプリはアプリ内からアカウントを削除できる機能が必須(Guideline 5.1.1)。メールでの依頼対応では不可。削除はデータの無効化ではなく、関連する個人データの実際の削除が求められる。アカウント削除後のデータ保持期間がある場合はその旨をユーザーに説明する。
-
運営用管理画面 上記①〜③の操作を行うための管理画面。アプリ外(Webなど)でもよい。BAN・通報履歴の確認・投稿の個別非表示をここから操作できるようにする。審査メモに管理画面の存在と目的を記載しておくと、レビュワーが「モデレーション体制がある」と判断しやすくなる。
リジェクト記録
1回落とされた。理由は2つ。
上記を実装した上で審査に提出した。結果は1回リジェクト。Appleから届いた指摘は以下の通りだ。
// Rejection — Guideline 2.1 · Information Needed
We need more information to continue the review.
Next Steps
Provide detailed answers to the following questions:
Please make sure that the 掲示板 window is populated.
// Rejection — Guideline 4.8 · Design · Login Services
The app uses a third-party login service, but does not appear to offer as an equivalent login option another login service with all of the following features:
- The login option limits data collection to the user's name and email address.
- The login option allows users to keep their email address private from all parties as part of setting up their account.
- The login option does not collect interactions with the app for advertising purposes without consent.
1つ目(2.1):掲示板にコンテンツが足りない。リリース前のアプリだから投稿が少ないのは当然だが、レビュワーが機能を確認できる状態になっていなかった。
2つ目(4.8):Appleログインがないと判断された。実際にはSign in with Appleは実装済みで、ログイン選択画面にもAppleボタンは明確に表示されていた。レビュワーがそこまで確認していなかった、というのが実情だ。
実際のログイン選択画面。Appleボタンは明確に存在していた。
対策と再提出
レビュワーは英語話者だ、という前提で動く。
2.1については対策はシンプルだった。主要な掲示板すべてにテスト投稿を入れた。1掲示板につき5〜10件程度。「機能が動いている状態」をレビュワーが確認できるようにする、ただそれだけだ。
4.8については対策に悩んだ。Appleログインは実装済みで画面上にも存在している。なぜ見えなかったのか。
原因はおそらくApp Reviewメモを日本語で書いていたことだ。自分はメモを日本語で丁寧に記載していた。ログイン手順も、テストアカウントの使い方も。Appleほどの大企業なら日本語話者のレビュワーもいるだろうと思っていたが、見落とされた事実がある。
SEの仕事でも同じことがある。英語でチケットを書かないと海外チームに伝わらない。当然の話だ。Appleのレビュワーが英語話者であることを前提に、メモをすべて英語に書き直した。Googleログイン用テストアカウント、Appleログインの手順、管理画面の存在、掲示板へのテスト投稿の旨、すべて英語で記載した。
// Tips
App Reviewメモに書くべき内容
App ReviewのNotes欄(App Store Connect → App Review情報)は英語で記載する。レビュワーが母国語でない場合、日本語のメモは読まれない可能性がある。
記載すると有効な内容:
・ログインのテストアカウント(メールアドレス+パスワード)
・Sign in with Appleの導線説明(どこに表示されているか)
・制限付きコンテンツへのアクセス手順
・掲示板などのUGC機能にテストデータを投入済みである旨
・管理画面・モデレーション体制の説明
「レビュワーが数分で確認できる状態」を作ることが最大の対策。Appleは毎日大量のアプリを審査している。懇切丁寧な日本語より、短くて明快な英語の方が伝わる。
まとめると
掲示板機能を持つアプリはモデレーション・ログイン・アカウント削除の3点を必ず実装する。審査メモは英語で、レビュワーが機能を確認できる状態にして提出する。リジェクトは機能の不備より「確認できなかった」ことで起きる場合がある。