iOS

App Store に出すために Web 側で用意したもの:サポート URL とプライバシーポリシー

iOS アプリを App Store に出すとき、審査に出す前に Web 側で用意しておくものがあります。アプリのコードとは関係のない作業なので後回しにしがちですが、URL の入力欄が空だと申請自体が進みません。何を作ったかを書いておきます。

必要になる URL は2つ

サポート URLプライバシーポリシー URL です。どちらも申請時に入力欄があり、空のままでは先に進めません。

サポート URL は「ユーザーが困ったときに行く場所」として公開されます。App Store のアプリページからリンクされるので、実際に人が来ます。プライバシーポリシー URL も同様に公開されます。

どちらも普通の Web ページで構いません。専用ドメインも要りません。自分のサイトの中に1ページ足すだけで済みます。

サポートページに何を書くか

凝ったものは要りませんでした。最低限これだけあれば成立します。

  • どのアプリのサポートなのか
  • 連絡手段
  • 返信の目安(すぐ返せないなら、そう書いておく)

避けたほうがいいのは、メールアドレスを生で書くことです。App Store のページから辿れる公開ページなので、スクレイピングの対象になります。フォームを挟んだほうが安全です。

このサイトは静的書き出しでサーバーがないので、フォームは Google フォームに投げています。埋め込まずにリンクで飛ばすだけの実装です。

export const SUPPORT_FORM_URL = 'https://docs.google.com/forms/d/e/.../viewform';

問い合わせページとサポートページの両方から同じフォームに飛ばしているので、URL は定数にして1箇所で持っています。片方だけ更新して食い違うのが一番ありそうな事故なので。

外部フォームとプライバシーポリシー

ここは見落としやすいところです。Google フォームを使うということは、送信された内容が Google のサーバーに保存されるということです。自分のサイトは何も受け取っていなくても、ユーザーから見れば個人情報を第三者に渡していることになります。

プライバシーポリシーにそう書く必要があります。「フォームの回答は Google に送信され、同社のサーバーで保管されます」という一文と、海外への移転が起きることに触れておく。フォームを別のサービスに乗り換えたら、ポリシー側も直さないと嘘になります。

プライバシーポリシーの持ち方

最初、ポリシーの本文を JSX の中に書いていました。これは失敗でした。

日本語と英語で2箇所に同じ文面が分かれ、条項を1つ足すだけで両方のコンポーネントを触ることになります。しかも見出しと段落の構造が微妙にずれていきます。

構造化したデータとして持って、描画は共通コンポーネントに任せる形に変えました。

{ "privacy": { "title": "プライバシーポリシー", "sections": [ { "heading": "取得する情報", "paragraphs": ["本アプリはアカウント登録を必要とせず、..."], "bullets": [] } ] } }

bullets は空でも必ず置くようにしています。片方の言語にだけキーがある状態を作ると、描画側で分岐が増えて面倒になるからです。

内容そのものについては、書けることしか書かないのが結局は楽でした。「収集していません」と書いたなら本当に収集していない状態を保つ必要があります。解析ツールを1つ入れるだけで嘘になるので、後から機能を足すときにポリシー側を思い出せるかどうかが問題になります。

登録した URL の寿命

/support.html のような、実装がそのまま出た URL は登録しないほうが安全です。サイトを作り直した時点で 404 になります。

App Store 側の情報は次のバージョンを申請するまで更新されないので、すぐには直せません。サイト側でリダイレクトを受けるほうが早い。Cloudflare Pages なら public/_redirects に一行足すだけです。

/support.html /support/ 301

このあたりの静的サイト側の事情は別の記事に書きました。

はじめから拡張子のない /support/ のような形で登録しておけば、実装を変えても URL を維持しやすいです。App Store に渡す URL は、サイトの実装より長生きすると思っておいたほうがいいと思います。