PWA の Web Share Target(Android)の実測と落とし穴
共有シートに PWA を出すには WebAPK が要り、Chrome でインストールした場合だけ動く。Android では `url` フィールドが空で URL は `text` に混ざるため、全フィールドを正規表現で走査する実装にする。
調査時点: 2026-09。Android 実機(Chrome / Brave)で確認した内容。公開プロジェクト damjump(YouTube の共有からカラオケ検索へ飛ばす PWA)の実装で踏んだもの。
共有シートから届くフィールド
Android の共有 Intent には URL 専用のフィールドがない。manifest の share_target.params と Intent の対応は次のとおり。
| manifest の params | Android Intent |
|---|---|
title | Intent.EXTRA_SUBJECT |
text | Intent.EXTRA_TEXT |
url | Android では基本的に空。URL は text(たまに title)に混ざる |
したがって、どのフィールドに何が入るかに依存しない実装にする。title / text / url を全部連結し、正規表現で目的の URL を拾って ID を抜く。共有元アプリのバージョンで共有テキストの形式が変わっても壊れない。
YouTube の場合、対応すべき URL の形は youtu.be/ID / watch?v=ID / shorts/ID / live/ID / embed/ID に、m. music. サブドメインを掛け合わせたもの。
WebAPK が要る。Brave では出ない
Web Share Target が OS に登録されるのは、PWA が WebAPK としてインストールされたときだけ。
- Chrome の「アプリをインストール」で入れると共有シートに出る。
- Brave で入れると出ない。ホーム画面のアイコンに Brave のバッジが付くのが目印で、これは Android が「ブラウザのショートカット」として扱っている印。WebAPK ではないので
share_targetが登録されず、共有元(ブラウザ版 YouTube / アプリ版 YouTube)を変えても出ない。 - PWABuilder などで APK 化したものも share_target が効かないという報告がある。
共有シートに出ないときの切り分けは、まずアイコンにブラウザのバッジが付いているかを見る。
share_target.action は配信先と同じ origin の絶対 URL にする
share_target.action は manifest の scope 内(同一 origin)でないと無効になる。Cloudflare Workers で wrangler deploy を素で打つと *.workers.dev に出るため、カスタムドメインを指した action が scope 外になる。配信先のカスタムドメインとビルド時の origin を揃えてから実機確認に進む。
origin がずれたままだと、共有シートに出ない原因が「WebAPK が作られていない」のか「action が scope 外」なのか切り分けられない。
相対パスで書くと出ないという報告もある(未検証。最初から絶対 URL で書いたため踏んでいない)。
manifest を変えたら入れ直す
Android は manifest を強くキャッシュする。share_target を含む manifest を変更したら、PWA を一度アンインストールして入れ直す。
関連
更新履歴
- 2026-09-12: 初版(ローカル調査ノート)
- 2026-10-17: Wiki へ移植、概念ページとして再構成
出典
同じトピック — Web
- 単一画面の Canvas ツールのスタック選定(vanilla TS / Svelte / Preact と PWA ツーリング)
- DAM カラオケ検索(clubdam)の挙動と制約
- Core Web Vitals と画像最適化
- favicon の最小構成(SVG + ICO + apple-touch-icon + manifest)
- フロントエンドのフレームワークとツールの動き(2025)
- HTML-in-Canvas API
- HTML-in-Canvas の実現性(a11y・性能・セットアップ・シェーダー)
- iOS Safari で canvas の画像を保存させる(download 属性 / Web Share / 長押し)
- 日本語 Web フォントのライセンスとサブセット化
- 個人サイトのライブウィジェットと外部 API の制限
- モダン CSS / Web API の対応状況(2025-2026)
- OPFS(Origin Private File System)
- Google Places API のキーの守り方(ブラウザ露出 vs サーバ中継)
- iOS の PWA 制限
- 機能別 React / TS ライブラリ対応表(2026-04 時点)
- URL 長の上限と日本語の URL エンコード膨張
- 書き出すテキストファイルの UTF-8 BOM と Markdown 継続行
- 縦書き Web の実装(writing-mode・ルビ・圏点・縦中横・禁則)
- WebAssembly(Wasm)
- YouTube oEmbed で動画タイトルとチャンネル名を取る