Android 上の WebAPK

ユーザーが Android のホーム画面にプログレッシブ ウェブアプリを追加すると、Chrome によって自動的に APK が生成されます。この APK は WebAPK とも呼ばれます。APK を介してインストールすると、アプリをアプリ ランチャーや Android アプリの設定に表示し、インテント フィルタのセットを登録できるようになります。

Android に PWA をインストールすると、ユーザーのホーム画面にプログレッシブ ウェブアプリが追加されるだけでなく、Chrome では、アプリの特別な APK が自動的に生成され、インストールされます。この APK を WebAPK と呼ぶこともあります。APK を介してインストールすると、アプリをアプリ ランチャーや Android アプリの設定に表示し、インテント フィルタのセットを登録できるようになります。

Chrome は、WebAPK を生成するためにウェブアプリ マニフェストなどのメタデータを確認します。マニフェストのアップデートが検出されると、Chrome は新しい APK を生成する必要があります。

Android インテント フィルタ

プログレッシブ ウェブアプリを Android にインストールすると、アプリのスコープ内のすべての URL に対して一連のインテント フィルタが登録されます。ユーザーがアプリのスコープ内のリンクをクリックすると、ブラウザタブではなくアプリが開きます。

次のような部分的な manifest.json について考えてみましょう。

"start_url": "/",
"display": "standalone",

これを使用するウェブアプリをアプリ ランチャーから起動した場合、ブラウザの Chrome なしで、https://example.com/ がスタンドアロン アプリとして開きます。

WebAPK には次のインテント フィルタが含まれます。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/" />
</intent-filter>

インストール済みのアプリ内で https://example.com/read へのリンクをユーザーがクリックすると、インテントによって捕捉され、プログレッシブ ウェブアプリで開きます。

scope を使用してインテント フィルタを制限する

サイト内のすべての URL をプログレッシブ ウェブアプリで処理しないようにするには、ウェブアプリ マニフェストに scope プロパティを追加します。scope プロパティは、URL が origin + scope と一致する場合にのみウェブアプリを開くよう Android に指示します。これにより、アプリで処理する URL とブラウザで開く URL を制御できます。これは、アプリとアプリ以外のその他のコンテンツが同じドメイン上にある場合に便利です。

次のような部分的な manifest.json について考えてみましょう。

"scope": "/app/",
"start_url": "/app/",
"display": "standalone",

アプリ ランチャーから起動した場合、ブラウザ Chrome なしで https://example.com/app/ をスタンドアロン アプリとして開きます。

以前と同様に、生成された WebAPK にはインテント フィルタが含まれますが、APK の AndroidManifest.xml 内の android:pathPrefix 属性が異なります。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/app/" />
</intent-filter>

例をいくつか見てみましょう。

推奨事項

https://example.com/app/ - /app/

推奨事項

https://example.com/app/read/book - /app/

すべきでないこと

https://example.com/help/ - /app/ 以外

すべきでないこと

https://example.com/about/ - /app/ 以外

scope の詳細、設定しない場合の動作、アプリのスコープの定義方法については、scope をご覧ください。

権限の管理

権限は他のウェブアプリと同じように機能し、インストール時にリクエストできません。代わりに、実行時に(理想的には本当に必要なときだけに)リクエストする必要があります。たとえば、初回の読み込み時にカメラ権限をリクエストせず、ユーザーが写真を撮影しようとするまで待ちます。

ストレージとアプリの状態の管理

プログレッシブ ウェブアプリは APK を介してインストールされますが、Chrome では現在のプロファイルを使用してデータを保存し、分離することはできません。これにより、ブラウザとインストール済みのアプリ間でエクスペリエンスを共有できます。Cookie が共有されてアクティブになり、クライアントサイド ストレージにアクセス可能で、Service Worker がインストールされ、すぐに使用できます。

WebAPK のアップデート

WebAPK の更新方法については、Chrome がウェブアプリ マニフェストの更新を処理する方法に移動しました。

よくある質問

スプラッシュ画面の生成に使用されるアイコンは何ですか?:
スプラッシュ画面には、少なくとも 192px と 512px の 2 つのアイコンを指定することをおすすめします。スプラッシュ画面のアイコンが 小さすぎるというご意見をいただきましたChrome 71 以降で生成された WebAPK では、スプラッシュ画面に大きいアイコンが表示されます。推奨アイコンが提供されていれば、特に対応は必要ありません。
ユーザーがサイトのネイティブ アプリをすでにインストールしている場合はどうなりますか?
現在のホーム画面への追加と同様に、ユーザーはネイティブ アプリとは別にサイトを追加できるようになります。ユーザーが両方をインストールする可能性がある場合は、サイトのアイコンまたは名前をネイティブ アプリと区別することをおすすめします。
ユーザーが Chrome のキャッシュを削除すると、インストールしたサイトのストレージも消去されますか?
はい。
新しいデバイスを入手した場合、アプリは再インストールされますか?
現時点ではできませんが、これは重要な分野であると Google は考えており、それを機能させる方法を調査しています。
権限はどのように処理されますか?Chrome のプロンプトと Android のプロンプトが表示されますか?
権限は引き続き Chrome で管理されます。Chrome で権限を付与するよう求めるプロンプトが表示され、Chrome の設定で権限を編集できるようになります。
この機能はどの Android バージョンで利用できますか?
プログレッシブ ウェブアプリは、Chrome for Android を搭載したすべての Android バージョン(Jelly Bean 以降)にインストールできます。
WebView を使用しますか?
いいえ。サイトはユーザーがサイトを追加した Chrome のバージョンで開きます。
作成した APK を Google Play ストアにアップロードできますか?
いいえ。独自の APK をアップロードする場合は、Trusted Web Activity をご覧ください。
これらは Google Play ストアに掲載されていますか?
いいえ。Google Play ストアに掲載する独自の APK をアップロードする場合は、Trusted Web Activity をご覧ください。
Android の別のブラウザのデベロッパーがこのシームレスなインストール プロセスを利用できますか?:
現在対応中です。Google は、この機能を Android のすべてのブラウザで利用できるように取り組んでいます。詳細は後日お知らせします。