アプリはインストールされていますか?getInstalledRelatedApps() が表示されます。

getInstalledRelatedApps() メソッドを使用すると、ウェブサイトで、iOS/Android/デスクトップ アプリまたは PWA がユーザーのデバイスにインストールされているかどうかを確認できます。

getInstalledRelatedApps() API とは

getInstalledRelatedApps() を使用して、Android アプリがすでにインストールされているかどうかを判断するウェブサイト。

getInstalledRelatedApps() を使用すると、自分のモバイルアプリまたはデスクトップ アプリ、場合によってはプログレッシブ ウェブアプリ(PWA)がユーザーのデバイスにすでにインストールされているかどうかを自分のページで確認し、インストールされている場合はユーザー エクスペリエンスをカスタマイズできます。

たとえば、アプリがすでにインストールされている場合:

  • ユーザーをプロダクト マーケティング ページからアプリに直接リダイレクトする。
  • 通知などの一部の機能を別のアプリに集約して、通知の重複を防ぐ。
  • 他のアプリがすでにインストールされている場合、PWA のインストールを促進しない

getInstalledRelatedApps() API を使用するには、アプリにサイトについて伝え、サイトにアプリについて伝える必要があります。アプリとサイトの関係を定義したら、アプリがインストールされているかどうかを確認できます。

確認できるサポート対象アプリの種類

アプリの種類 確認可能
Android アプリ Android のみ
Chrome 80 以降
Windows(UWP)アプリ Windows のみ
Chrome 85 以降
Edge 85 以降
プログレッシブ ウェブアプリ
同じスコープまたは異なるスコープにインストールされます。
Android のみ
Chrome 84 以降

Android アプリがインストールされているかどうかを確認する

ウェブサイトで Android アプリがインストールされているかどうかを確認できます。

サポート対象

Android: Chrome 80 以降

Android アプリにウェブサイトについて伝える

まず、Digital Asset Links システムを使用して、ウェブサイトと Android アプリケーションの関係を定義するように Android アプリを更新する必要があります。これにより、ウェブサイトのみが Android アプリのインストール状況を確認できるようになります。

Android アプリの AndroidManifest.xmlasset_statements エントリを追加します。

<manifest>
  <application>
       <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
     </application>
</manifest>

次に、strings.xml で次のアセット ステートメントを追加し、site を実際のドメインに更新します。エスケープ文字を必ず含めてください。

<string name="asset_statements">
  [{
    \"relation\": [\"delegate_permission/common.handle_all_urls\"],
    \"target\": {
      \"namespace\": \"web\",
      \"site\": \"https://example.com\"
    }
  }]
</string>

完了したら、更新した Android アプリを Google Play ストアに公開します。

ウェブサイトで Android アプリについて知らせる

次に、ページにウェブアプリ マニフェストを追加して、ウェブサイトに Android アプリについて知らせます。マニフェストには、platformid など、アプリの詳細を提供する配列である related_applications プロパティを含める必要があります。

  • platformplay でなければなりません
  • id は、Android アプリの GooglePlay アプリケーション ID です。
{
  "related_applications": [{
    "platform": "play",
    "id": "com.android.chrome",
  }]
}

アプリがインストールされているかどうかを確認する

最後に、非同期関数 navigator.getInstalledRelatedApps() を呼び出して、Android アプリがインストールされているかどうかを確認します。

Windows(UWP)アプリがインストールされているかどうかを確認する

ウェブサイトで、Windows アプリ(UWP を使用して構築)がインストールされているかどうかを確認できます。

サポート対象

Windows: Chrome 85 以降、Edge 85 以降

ウェブサイトに関する情報を Windows アプリに伝える

URI ハンドラを使用してウェブサイトと Windows アプリケーションの関係を定義するには、Windows アプリを更新する必要があります。これにより、Windows アプリがインストールされているかどうかを確認できるのは、お客様のウェブサイトのみであることが確認されます。

アプリのマニフェスト ファイル Package.appxmanifestWindows.appUriHandler 拡張機能の登録を追加します。たとえば、ウェブサイトのアドレスが example.com の場合、アプリのマニフェストに次のエントリを追加します。

<Applications>
  <Application Id="App" ... >
      ...
      <Extensions>
         <uap3:Extension Category="windows.appUriHandler">
          <uap3:AppUriHandler>
            <uap3:Host Name="example.com" />
          </uap3:AppUriHandler>
        </uap3:Extension>
      </Extensions>
  </Application>
</Applications>

<Package> 属性に uap3 名前空間を追加する必要がある場合があります。

次に、windows-app-web-link という名前の JSON ファイル(.json ファイル拡張子なし)を作成し、アプリのパッケージ ファミリー名を指定します。このファイルをサーバーのルートまたは /.well-known/ ディレクトリに配置します。パッケージ ファミリ名は、アプリ マニフェスト デザイナーの [パッケージ] セクションで確認できます。

[{
  "packageFamilyName": "MyApp_9jmtgj1pbbz6e",
  "paths": [ "*" ]
}]

こちらのデモをご覧ください。

URI ハンドラの設定について詳しくは、アプリ URI ハンドラを使用してウェブサイトでアプリを有効にするをご覧ください。

ウェブサイトから Windows アプリについて通知する

次に、ページにウェブアプリ マニフェストを追加して、Windows アプリについてウェブサイトに伝えます。マニフェストには、platformid など、アプリに関する詳細情報を提供する配列である related_applications プロパティを含める必要があります。

  • platformwindows でなければなりません
  • id は、アプリのパッケージ ファミリー名に Package.appxmanifest ファイルの <Application> Id 値が付加されたものです。
{
  "related_applications": [{
    "platform": "windows",
    "id": "MyApp_9jmtgj1pbbz6e!App",
  }]
}

アプリがインストールされているかどうかを確認する

最後に、非同期関数 navigator.getInstalledRelatedApps() を呼び出して、Windows アプリがインストールされているかどうかを確認します。

プログレッシブ ウェブアプリがすでにインストールされているかどうかを確認する(スコープ内)

PWA は、すでにインストールされているかどうかを確認できます。この場合、リクエストを行うページは、ウェブ アプリ マニフェストのスコープで定義されているとおり、同じドメインにあり、PWA のスコープ内にある必要があります。

サポート対象

Android: Chrome 84 以降

PWA に PWA 自身について伝える

PWA の ウェブアプリ マニフェストrelated_applications エントリを追加して、PWA 自体について記述します。

  • platformwebapp でなければなりません
  • url は、PWA のウェブアプリ マニフェストのフルパスです。
  • id はウェブアプリのフルパスです(パソコンでは必須、Android では不要)
{
  
  "scope": "/",
  "start_url": "/",
  "related_applications": [{
    "platform": "webapp",
    "url": "/manifest.json",
    "id": "https://example.com"
  }],
  
}

PWA がインストールされているかどうかを確認する

最後に、PWA のスコープ内から非同期関数 navigator.getInstalledRelatedApps() を呼び出して、インストールされているかどうかを確認します。getInstalledRelatedApps() が PWA のスコープ外で呼び出された場合、false が返されます。詳細については、次のセクションをご覧ください。

プログレッシブ ウェブアプリがインストールされているかどうかを確認する(範囲外)

ウェブサイトは、ページが PWA のスコープ外であっても、PWA がインストールされているかどうかを確認できます。たとえば、/landing/ から配信されるランディング ページは、/pwa/ から配信される PWA がインストールされているかどうかを確認できます。また、ランディング ページが www.example.com から配信され、PWA が app.example.com から配信される場合も同様です。

サポート対象

Android: Chrome 84 以降

パソコン(Windows、macOS、Linux、ChromeOS): Chrome 140 以降

PWA にウェブサイトについて伝える

まず、PWA が配信されるサーバーにデジタル アセットリンクを追加する必要があります。これにより、ウェブサイトと PWA の関係が定義され、ウェブサイトのみが PWA のインストール状況を確認できるようになります。

PWA が存在するドメインの /.well-known/ ディレクトリ(例: app.example.com)に assetlinks.json ファイルを追加します。site プロパティで、チェックを実行するウェブアプリ マニフェストのフルパスを指定します(PWA のウェブアプリ マニフェストではありません)。

// Served from https://app.example.com/.well-known/assetlinks.json
[
  {
    "relation": ["delegate_permission/common.query_webapk"],
    "target": {
      "namespace": "web",
      "site": "https://www.example.com/manifest.json"
    }
  }
]

ウェブサイトに PWA について伝える

次に、ページにウェブアプリ マニフェストを追加して、ウェブサイトに PWA アプリについて伝えます。マニフェストには、platformurl など、PWA の詳細を提供する配列である related_applications プロパティを含める必要があります。

  • platformwebapp でなければなりません
  • url は、PWA のウェブアプリ マニフェストのフルパスです。
{
  "related_applications": [{
    "platform": "webapp",
    "url": "https://app.example.com/manifest.json",
  }]
}

PWA がインストールされているかどうかを確認する

最後に、非同期関数 navigator.getInstalledRelatedApps() を呼び出して、PWA がインストールされているかどうかを確認します。

getInstalledRelatedApps() のご利用方法

navigator.getInstalledRelatedApps() を呼び出すと、ユーザーのデバイスにインストールされているアプリの配列で解決される Promise が返されます。

const relatedApps = await navigator.getInstalledRelatedApps();
relatedApps.forEach((app) => {
  console.log(app.id, app.platform, app.url);
});

サイトが広範囲にわたって自社のアプリをテストすることを防ぐため、ウェブアプリ マニフェストで宣言された最初の 3 つのアプリのみが考慮されます。

他の強力なウェブ API と同様に、getInstalledRelatedApps() API は HTTPS 経由で提供される場合にのみ使用できます。

ご不明な点がある場合

ご不明な点がありましたら、StackOverflow の getInstalledRelatedApps タグで、他のユーザーが同様の質問をしていないかどうかを確認します。見つからない場合は、質問を投稿し、必ず progressive-web-apps タグを付けてください。Google のチームは、このタグを頻繁にモニタリングし、質問に回答するよう努めています。

フィードバック

Chrome の実装にバグが見つかりましたか?それとも、実装が仕様と異なるのでしょうか?

  • https://new.crbug.com でバグを報告します。できるだけ詳細な情報を記載し、バグを再現する手順を明記して、[Components] ボックスに Mobile>WebAPKs と入力します。

API のサポートを表示する

getInstalledRelatedApps() API を使用する予定はありますか?公開サポートは、Chrome チームが機能の優先順位を決定するのに役立ち、他のブラウザ ベンダーにサポートの重要性を示すことにもなります。

関連情報

ありがとう

Windows アプリのテストの詳細についてご協力いただいた Microsoft の Sunggook Chue 氏、Chrome の詳細についてご協力いただいた Rayan Kanso 氏に感謝いたします。