iOSアプリのアカウント削除:Apple審査前に試すべき導線
著者:Mehdi Azizi
更新・7 分
削除ボタン、関連データ、サブスク、再ログインまで、App Review提出前にアカウント削除の導線を確認する具体的なテスト手順です。
ボタンだけでは足りない:何が消えるのかを確認する
アプリでアカウントを作成できるなら、Appleはアプリ内からその削除を開始できることを求めています。単なる無効化ではこの要件を満たせません。導線は見つけやすく、削除の結果を説明している必要があります。一部の手続きをWebで完了させる場合、リンクは該当ページへ直接飛ぶものにしてください。出典:Appleによるアカウント削除の説明
つまり、設定画面に赤いボタンを置けば終わり、ではありません。データを洗い出し、サーバー側で削除を実行し、エラーを処理し、そのあとユーザーに何が表示されるかを確認する必要があります。このガイドではプロダクトと技術の両面からテスト手順を紹介します。保存義務のあるデータについては、あなたの事業に合わせた対応が必要です。
まずはデータマップから
架空の読書記録アプリを例にします。アカウント、プロフィール、非公開のメモ、ユーザーが追加した表紙の写真があります。以下の例は確認すべき計画であり、Devoriaのアプリで実際に削除を実行したものではありません。
- ログイン用の認証情報: 削除後、アカウントを使えない状態にするにはどうするか?
- プロフィールとメモ: どの行がその人のもので、どう削除されるか?
- 保存された写真: ファイルとその参照を削除するのはどの処理か?
- 端末のキャッシュ: 処理が本当に完了したときに、画面はローカルデータを消しているか?
- 外部サービス: このアカウントに紐づくデータは個別の削除が必要か?
- 保持するデータ: どのデータを、どの義務のために、ユーザーにどう伝えて保持するか?
このマップがあれば、ユーザー情報は消えたのに写真だけアクセスできる状態だった、と後から気づく事態を防げます。テストで探すべき対象もはっきりします。
4つの状態でわかりやすい導線を作る
架空アプリでの一案です。実際のプロダクトでの影響に合わせて調整してください。
- アカウント設定。 「アカウントを削除」の項目にいつでもアクセスできる。
- 確認。 対象となるデータを説明し、削除と同じくらいわかりやすいキャンセル操作を表示する。
- 処理中。 ボタンで二重送信を防ぎ、処理中であることを画面に示す。
- 結果。 成功が確認できたらログアウト状態へ移る。失敗時は役立つメッセージと再試行の手段を残し、アカウントが消えたかのように見せない。
処理に時間がかかる場合、本人に知らせて完了を確認するという条件で、Appleは後から完了する導線も認めています。リクエストを受け付けただけなのに、削除が終わったと思わせてはいけません。同じAppleのドキュメントには、再認証が必要なケースや、規制の厳しい業種向けの例外も書かれています。
Supabaseで想定しておくこと
Authのユーザーを削除しただけでは、プロダクト内のすべてのオブジェクトが処理された証明にはなりません。Supabaseによると、Storageのオブジェクトを所有しているユーザーは、その状態が解消されるまで削除できません。また、ユーザーを削除しても、発行済みのJWTがすべて即座に無効になるわけではないため、その有効期限を設計で考慮する必要があります。出典:Supabaseのユーザー管理
そのため、リクエストした本人の身元とその人が所有するリソースを確認するサーバー側の処理を用意してください。削除するアカウントを決めるのに、端末から自由に送られてくるIDを信用してはいけません。管理者権限は、Supabaseのキーに関するドキュメントのとおりサーバー側にとどめます。
複数ステップの処理では、最初のステップは成功して次が失敗した場合に、再試行で何をすべきかを決めておきます。たとえばファイルがすでに削除済みなら、ファイルがないという理由だけで新しいリクエストが失敗してはいけません。これはテスト前にシナリオとして書いておくもので、なんとなく想定しておく挙動ではありません。
アカウントとサブスク:別々に確認する
アカウントを削除しても、Appleのサブスクリプションは続いていることがあります。Appleは、課金がどうなるかを説明し、サブスクリプション管理へアクセスできるようにすることを求めています。Sign in with Appleを使っているなら、トークンを適切に無効化する処理も用意しましょう。詳しくは削除に関するAppleのガイドラインにあります。
テスト計画では、アカウントの消去、有料機能へのアクセス状態、サブスクリプション管理を分けて確認してください。サブスクか買い切りかのガイドを読めば、この導線をあなたのビジネスモデルの中で位置づけやすくなります。
テストビルドで実行するテスト手順
テスト用アカウントと架空のデータだけを使います。各確認について、ビルド、端末、実際の結果、確認の限界を記録してください。
- キャンセルする。 アカウントとデータはそのままアクセスできる。
- データの入ったアカウントを削除する。 最終状態が説明どおりの処理と一致し、対象データが実際に削除されている。
- ネットワークを切る。 アプリが偽の成功を表示しない。
- 部分的な失敗のあとに再試行する。 他のデータを巻き込まずにリクエストが完了できる。
- 2つ目のセッションを開く。 以前のアクセスが想定した仕組みどおりに処理される。
- 許可されている場合、同じメールアドレスでアカウントを作り直す。 以前の非公開データが再表示されない。
これらのケースをDevoriaのテストチェック表に追加しましょう。テスターに配布するならTestFlightのガイドに沿って進めてください。コンソールにエラーが出ていないことは、データと導線の確認の代わりにはなりません。
App Reviewへの提出準備
審査メモには、操作がどこにあり、どうテストするかを書いておきます。あるステップが外部サービスに依存するなら、審査中にそのサービスが使えるようにしておきましょう。提出したビルドにまだない機能を、メモで約束してはいけません。
すでに問題を指摘されている場合は、Appleにリジェクトされたアプリのページが返答の整理に役立ちます。返答の準備には、Apple Review Kitが、引用されたルール、その要求内容、修正と返答の例を確認するのに役立ちます。
初めての提出を準備しているなら、無料の診断で残りの作業がわかり、アカウント削除も含めたリジェクト対策チェックリストをお送りします。すでにAppleにリジェクトされたなら、私と1時間のセッションを予約してください。ビデオ通話でメッセージを一緒に読み解きます。
よくある質問
iOSアプリでアカウント削除は必須ですか?
はい、アプリでアカウントを作成できるなら必須です。Appleはアプリ内から削除を開始できることを求めています。単なる無効化ではこの要件を満たせません。導線は見つけやすく、削除の結果を説明している必要があります。一部をWebで完了させる場合、リンクは該当ページへ直接飛ぶものにしてください。
ユーザーがアカウントを削除したら何を消すべきですか?
ユーザー情報だけでなく、その人に属するすべてです。ログイン用の認証情報、プロフィールと作成したコンテンツ、保存されたファイルとその参照、端末のキャッシュ、外部サービス上のデータをリストにしましょう。保持するデータとその義務も記録し、本人に伝えてください。この洗い出しがないと、ユーザー情報は消えたのに写真がアクセス可能なまま、ということが起こります。
すぐに完了しないアカウント削除でもAppleは認めますか?
はい。処理に時間がかかる場合、本人に知らせて完了を確認するという条件で、Appleは後から完了する導線を認めています。リクエストを受け付けただけなのに削除が終わったと思わせてはいけません。失敗時は役立つメッセージと再試行の手段を残し、アカウントが消えたかのように見せないでください。
ユーザーがアカウントを削除したらサブスクはどうなりますか?
Appleのサブスクリプションはアカウント削除後も続くことがあります。Appleは、課金がどうなるかを説明し、サブスクリプション管理へアクセスできるようにすることを求めています。Sign in with Appleを使っているなら、トークンの適切な無効化も用意しましょう。テスト計画では、アカウントの消去、有料機能へのアクセス状態、サブスクリプション管理を分けて確認してください。
Supabase Authでユーザーを削除するだけで十分ですか?
いいえ。Authのユーザーを削除しても、プロダクト内のすべてのオブジェクトが処理された証明にはなりません。Supabaseのドキュメントによると、Storageのオブジェクトを所有するユーザーは、その状態が解消されるまで削除できません。また、ユーザーを削除しても発行済みのJWTがすべて即座に無効になるわけではありません。リクエストした本人の身元を確認するサーバー側の処理を用意してください。
Appleに提出する前にアカウント削除をどうテストすればいいですか?
テストビルドで、テスト用アカウントと架空のデータを使います。キャンセル、データの入ったアカウントの削除、ネットワークの切断、部分的な失敗後の再試行、2つ目のセッション、許可されている場合の同じメールアドレスでの再作成、の6ケースを実行します。データと導線を確認してください。コンソールにエラーが出ないだけでは不十分です。ビルドの配布はTestFlightのガイドに沿って進めましょう。