Android 上の WebAPK

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

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

WebAPK を 生成するために、 Chrome はウェブアプリ マニフェストや その他のメタデータを確認します。マニフェストの更新が検出されると、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 でウェブアプリ マニフェストの更新を処理する方法をご覧ください。

よくある質問

スプラッシュ画面の生成に使用されるアイコンは何ですか?

スプラッシュ画面には、 192 ピクセルと 512 ピクセルの少なくとも 2 つのアイコンサイズを指定することをおすすめします。スプラッシュ画面のアイコンが小さすぎるというご意見をいただきました。Chrome 71 以降で生成された WebAPK では、スプラッシュ画面に大きなアイコンが表示されます。推奨アイコンが提供されていれば、対応は不要です。

ユーザーがサイトのネイティブ アプリをすでにインストールしている場合はどうなりますか?

現在、ホーム画面に追加する場合と同様に、ユーザーはネイティブ アプリとは無関係にサイトを追加できます。ユーザーが両方をインストールする可能性がある場合は、サイトのアイコンまたは名前をネイティブ アプリと区別することをおすすめします。

ユーザーが Chrome のキャッシュをクリアすると、インストールしたサイトのストレージはクリアされますか?

はい。

新しいデバイスを入手したときにアプリが再インストールされますか?

現時点では再インストールされませんが、重要な分野であると考えており、再インストールできるようにする方法を検討しています。

権限はどのように処理されますか?Chrome のプロンプトが表示されますか、Android のプロンプトが表示されますか?

権限は引き続き Chrome で管理されます。ユーザーには権限を付与するための Chrome のプロンプトが表示され、Chrome の設定で編集できます。

どのバージョンの Android で動作しますか?

プログレッシブ ウェブアプリは、Chrome for Android を実行するすべてのバージョンの Android(具体的には Jelly Bean 以降)にインストールできます。

WebView は使用されますか?

いいえ。サイトは、ユーザーがサイトを追加した Chrome のバージョンで開きます。

作成した APK を Google Play ストアにアップロードできますか?

いいえ。独自の APK をアップロードする場合は、Trusted Web Activities をご覧ください。

Google Play ストアに掲載されますか?

いいえ。Google Play ストアに掲載するために独自の APK をアップロードする場合は、 Trusted Web Activitiesをご覧ください。

Android の別のブラウザの開発者ですが、このシームレスなインストール プロセスを利用できますか?

現在、サポートできるよう取り組んでいます。Android のすべてのブラウザで利用できるように取り組んでおり、詳細については近日中にお知らせします。