Android のアプリリンク

このガイドでは、Android 6.0 での "アプリリンク" のサポートについて説明します。アプリリンクは、モバイル アプリが Web サイト上の URL に応答できるようにするための手法です。 ここでは、アプリリンクの概要、Android 6.0 アプリケーションでアプリリンクを実装する方法、モバイル アプリにドメインに対するアクセス許可を付与するように Web サイトを構成する方法について説明します。

アプリリンクの概要

モバイル アプリケーションはサイロに存在しなくなりました。多くの場合、Web サイトと共にビジネスの重要なコンポーネントです。 ビジネスでは、モバイル アプリケーションを起動してモバイル アプリに関連コンテンツを表示する、Web サイト上のリンクによって、Web プレゼンスとモバイル アプリケーションをシームレスに接続することが望まれます。 "アプリリンク" ("ディープリンク" とも呼ばれます) は、モバイル デバイスが URI に応答し、その URI に対応するモバイル アプリケーションを起動できるようにする 1 つの手法です。

Android は 、意図システム を介したアプリ リンクの処理を行います。ユーザーがモバイル ブラウザーでリンクをクリックすると、モバイル ブラウザーは Android が登録済みアプリケーションに委任する意図をディスパッチします。 たとえば、料理の Web サイトでリンクをクリックすると、その Web サイトに関連付けられているモバイル アプリが開き、特定のレシピがユーザーに表示されます。 そのインテントを処理するために複数のアプリケーションが登録されている場合は、インテントを処理するアプリケーションを選択するようユーザーに求める、"あいまいさ回避ダイアログ" と呼ばれるものが表示されます。次に例を示します。

あいまいさの解消ダイアログのスクリーンショットの例

Android 6.0 では、自動リンク処理を使用してこれを改善しています。 Android では、アプリケーションを URI の既定のハンドラーとして自動的に登録できます。アプリは自動的に起動し、関連するアクティビティに直接移動します。 Android 6.0 で URI のクリックを処理する方法は、次の条件によって決まります。

  1. 既存のアプリは既に URI に関連付けられています 。ユーザーは、既存のアプリを URI に既に関連付けられている可能性があります。 その場合、そのアプリケーションが引き続き使用されます。
  2. URI に関連付けられている既存のアプリはありませんが、サポート アプリがインストールされています 。 このシナリオでは、ユーザーが既存のアプリを指定していないため、Android はインストールされているサポート アプリケーションを使用して要求を処理します。
  3. URI に関連付けられている既存のアプリはありませんが、多くのサポート アプリがインストールされています 。 URI をサポートするアプリケーションが複数あるため、あいまいさの解消ダイアログが表示され、ユーザーは URI を処理するアプリを選択する必要があります。

ユーザーに URI をサポートするアプリがインストールされておらず、その後にインストールされたアプリがある場合、Android は URI に関連付けられている Web サイトとの関連付けを確認した後、そのアプリケーションを URI の既定のハンドラーとして設定します。

このガイドでは、Android 6.0 アプリケーションを構成する方法と、Android 6.0 でアプリリンクをサポートするためのデジタル アセット リンク ファイルを作成および公開する方法について説明します。

必要条件

このガイドでは、Xamarin.Android 6.1 と、Android 6.0 (API レベル 23) 以上を対象とするアプリケーションが必要です。

Xamarin コンポーネント ストアの Rivets NuGet パッケージを使用すると、以前のバージョンの Android でアプリリンクを使用できます。 Rivets パッケージは、Android 6.0 のアプリリンクと互換性がありません。Android 6.0 のアプリリンクはサポートされていません。

Android 6.0 でのアプリリンクの構成

Android 6.0 でアプリリンクを設定するには、2 つの主な手順が必要です。

  1. Web サイト URI の 1 つ以上の意図フィルターを追加 する – 意図フィルターは、モバイル ブラウザーで URL クリックを処理する方法について Android をガイドします。
  2. Web サイトに デジタル資産リンク JSON ファイルを発行する – これは Web サイトにアップロードされ、モバイル アプリと Web サイトのドメイン間の関係を確認するために Android によって使用されるファイルです。 これを行わないと、Android は URI の既定のハンドルとしてアプリをインストールできません。ユーザーは手動で行う必要があります。

インテント フィルターの構成

URI (または使用可能な一連の URI) を Web サイトから Android アプリケーションのアクティビティにマップするインテント フィルターを構成する必要があります。 Xamarin.Android では、このリレーションシップは、 IntentFilterAttribute でアクティビティを装飾することによって確立されます。 インテント フィルターでは、次の情報を宣言する必要があります。

  • Intent.ActionView – これにより、情報を表示する要求に応答する意図フィルターが登録されます
  • Categories – 意図フィルターは、Web URI を適切に処理できるように 、Intent.CategoryBrowsableIntent.CategoryDefault の両方を登録する必要があります。
  • DataScheme – 意図フィルターでは、 や を宣言 http する https必要があります。 有効なスキームはこの 2 つだけです。
  • DataHost – これは、URI の発信元となるドメインです。
  • DataPathPrefix – これは、Web サイト上のリソースへの省略可能なパスです。
  • AutoVerify – 属性は autoVerify 、アプリケーションと Web サイトの間の関係を確認するように Android に指示します。 これについては、後ほど詳しく説明します。

次の例は、IntentFilterAttribute を使用して、https://www.recipe-app.com/recipes および http://www.recipe-app.com/recipes からのリンクを処理する方法を示しています。

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

Android では、アプリケーションを URI の既定のハンドラーとして登録する前に、Web サイト上のデジタル アセット ファイルに対して、インテント フィルターで識別されるすべてのホストを検証します。 Android がアプリを既定のハンドラーとして設定するには、すべてのインテント フィルターが検証を通過している必要があります。

Android 6.0 のアプリリンクでは、Android はアプリケーションを URI の既定のハンドラーとして設定する前に、アプリケーションと Web サイトの関連付けを検証する必要があります。 この検証は、アプリケーションが最初にインストールされたときに実行されます。 "デジタル アセット リンク" ファイルは、関連する Web ドメインでホストされる JSON ファイルです。

注意

属性は android:autoVerify 意図フィルターによって設定する必要があります。それ以外の場合、Android は検証を実行しません。

このファイルは、ドメインの Web マスターによって https://domain/.well-known/assetlinks.json に配置されます。

デジタル アセット ファイルには、Android が関連付けを検証するために必要なメタデータが含まれています。 assetlinks.json ファイルには、次のキーと値のペアが含まれています。

  • namespace – Android アプリケーションの名前空間。
  • package_name – Android アプリケーションのパッケージ名 (アプリケーション マニフェストで宣言)。
  • sha256_cert_fingerprints – 署名されたアプリケーションの SHA256 フィンガープリント。 アプリケーションの SHA256 フィンガープリントを取得する方法の詳細については、 キーストアの署名 の検索に関するガイドを参照してください。

次のスニペットは、アプリケーションが 1 つだけ記載された assetlinks.json の例を示しています。

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

アプリケーションのさまざまなバージョンやビルドをサポートするために、複数の SHA256 フィンガープリントを登録できます。 次の assetlinks.json ファイルは、複数のアプリケーションの登録例を示しています。

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.monkeys.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Google Digital Asset Links Web サイトには、デジタル アセット ファイルの作成とテストを支援するオンライン ツールがあります。

アプリリンクを実装したら、さまざまな部分をテストして、想定どおりに機能することを確認する必要があります。

次の例に示すように、Google の Digital Asset Links API を使用して、デジタル アセット ファイルが適切に書式設定され、ホストされていることを確認できます。

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

インテント フィルターが適切に構成されており、アプリが URI の既定のハンドラーとして設定されていることを確認するために実行できる 2 つのテストがあります。

  1. 前述のように、デジタル アセット ファイルは適切にホストされています。 最初のテストでは、Android がモバイル アプリケーションにリダイレクトするインテントをディスパッチします。 Android アプリケーションが起動し、URL に登録されているアクティビティが表示されます。 コマンド プロンプトで次のように入力します。

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. 特定のデバイスにインストールされているアプリケーションの既存のリンク処理ポリシーを表示します。 次のコマンドでは、デバイス上の各ユーザーのリンク ポリシーのリストを次の情報と共にダンプします。 コマンド プロンプトで、次のコマンドを入力します。

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package – アプリケーションのパッケージ名。
    • Domain – Web リンクがアプリケーションによって処理されるドメイン (スペースで区切られた)
    • Status – これは、アプリの現在のリンク処理状態です。 の値は 、アプリケーションandroid:autoVerify=true 宣言され、システム検証に合格したことを常に意味します。 その後に、Android システムのプリファレンスのレコードを表す 16 進数が続きます。

    次に例を示します。

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

まとめ

このガイドでは、Android 6.0 でのアプリリンクのしくみについて説明しました。 次に、アプリリンクをサポートし、アプリリンクに応答するように Android 6.0 アプリケーションを構成する方法について説明しました。 また、Android アプリケーションでアプリリンクをテストする方法についても説明しました。