MIT LICENSE ・ 無料

「ホーム画面に追加」を、
迷わせずに終わらせる部品。

iOSでWebアプリをホーム画面に置いてもらう案内を、実機テストと失敗の記録ごと部品化しました。 高齢者・スマホに不慣れな人でも、説明者なしで自力でたどり着けます。


背景なぜPWAという選択なのか

「ホーム画面に追加」の作り込みに入る前に、そもそもPWA(ホーム画面に追加して使うWebアプリ) という選択自体にどんな意味があるかを書いておきます。

メリット

デメリット・課題

正体Webアプリを、かんたんにアプリ化するためのプログラム

かんたんに言うと、Webアプリをスマホにアプリとして入れてもらうための、 導入専用プログラム(ティーザープログラム)です。上のデメリットの 「ホーム画面に追加が難しい」を解決するために作りました。

用途こんなときに

問題なぜ普通のマニュアルは失敗するのか

iOSでは、Webアプリをホーム画面に置く操作をアプリ側から自動化できません。 利用者が自分で「共有 → ホーム画面に追加 → 追加」を辿るしかありません。ところが、

この2つが重なるため、写真を並べただけの案内は紙面の出来と無関係に必ず失敗します。 この部品は、その失敗を実機で10回以上繰り返して見つけた解き方を、そのままコード化したものです。

実測実機で確かめた10の事実

検証環境: iPhone 17e / iPhone SE 第3世代(シミュレータ)+ iPhone 15 Pro Max(実機)

#調べたこと結果
1共有シート表示中、ページはどこまで見えるか画面の上から42.7%は覆われない
2共有シート表示中、JSは動くか動く(開いたまま秒カウンタが進み続けた)
3シートの開閉をページが検知できるかできない(blur/focus/visibilitychange 等いずれも発火せず)
4<title> は共有シートに出るか出る(ただし document.title と og:title の両方が必要)
5navigator.share()でワンボタン設置できるか不可。開いたシートに「ホーム画面に追加」が無い
6共有シートの題名は何文字入るか約16文字。超えると末尾が「…」に切れる
7「追加済みか」をブラウザから判定できるかできない。Safariとホーム画面アプリは保存領域が別
8Safari以外から追加できるかiOS 16.4以降のみ。16.3以前はSafari限定

残り2件と根拠はREADMEへ →

実物同梱している写真

iOSのシステム画面なので、どのアプリでも同じものが出ます。赤枠は自動検出で切り出し済み。撮り直し不要です。

iOS Safari(帯は上)

1…マーク
「…」を押す
2共有
「共有」を押す
3表示を増やす
「表示を増やす」
4ホーム画面に追加
「ホーム画面に追加」
5追加
「追加」を押す

iOS Chrome(帯は下・4手順)

1共有
共有マークを押す
2表示を増やす
「表示を増やす」
3ホーム画面に追加
「ホーム画面に追加」
4追加
「追加」を押す

原則守らないと通じない5つ

  1. 記憶ゼロ。手順を自動で送らない。全手順を常時ぜんぶ出し、利用者は自分の画面と見比べるだけ
  2. 帯は共有ボタンと反対側。Safari(共有は下)→帯は上/Chrome(共有は上)→帯は下
  3. 全面を1色で塗らない。iOSはページ端の色をブラウザのバーに反映するため、共有ボタンが同化して消える
  4. 共有シートの題名は document.title と og:title の両方を書き換える。片方だけだと元の題名が出た事故あり
  5. その題名は15文字以内。超えると「…」で切れる(実機で2回確認)
⚠ コードだけ写すと同じ失敗を繰り返します

ここに書いた数字と原則は、遠回りして見つけたものです。実装だけコピーして根拠を捨てると、 同じ場所でまた失敗します。組み込むときは README を先に読んでください。

対応出し分けの一覧

端末・環境出るもの
iOS Safari帯は上・5手順
iOS Chrome(16.4以降)帯は下・4手順・上向き矢印
iOS Chrome(16.3以前)Safari誘導(16.3以前はSafari限定のため)
Android Chrome(1タップが使える)1タップ設置ボタン
Android Chrome(使えない)帯は下・3手順(文字のみ)・上向き矢印
iOSのアプリ内ブラウザSafariアイコン+脱出ボタン
Androidのアプリ内ブラウザChromeへの脱出ボタン
ホーム画面から起動「設定できました」→通知の許可の案内
パソコン何も出さない
対応フレームワーク

リファレンス実装はReact(src/InstallGuide.tsx)ですが、判定ロジック・文言・配色・制約は フレームワーク非依存です。実際にAstro/vanilla構成に移植して本番投入した実績があります。 React以外の構成なら、同じ判定・同じ文言・同じ配色・同じ制約で作り直してください。