Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Android アプリリンクを追加する

Android アプリリンクは、ユーザーを Android アプリの特定のコンテンツに直接誘導する HTTP URL です。Android アプリリンクはアプリへのトラフィックを増やし、よく使用されているコンテンツを把握するのに役立ちます。ユーザーにとっては、インストールしたアプリ内のコンテンツを共有したり、見つけたりするのが簡単になります。

Android アプリリンクのサポートを追加する方法は次のとおりです。

  1. マニフェストでインテント フィルタを作成します。
  2. アプリへのリンクを処理するコードをアプリのアクティビティに追加します。
  3. デジタル アセット リンクを使ってアプリとウェブサイトを関連付けます。

後述のように、Android Studio 2.3 以降のアプリリンク アシスタントは、手順を追ったウィザードでこのプロセスを簡素化したものです。

アプリリンクの仕組みとメリットについて詳しくは、Android アプリリンクの処理をご覧ください。

インテント フィルタを追加する

Android Studio のアプリリンク アシスタントでは、マニフェスト内にインテント フィルタを作成し、ウェブサイトの既存の URL をアプリのアクティビティにマッピングすることができます。また、アプリリンク アシスタントでは、インテントを処理するために、対応する各アクティビティにテンプレートの Java コードを追加することもできます。

インテント フィルタと URL の処理を追加する方法は次のとおりです。

  1. [Tools] > [App Links Assistant] を選択します。
  2. [Open URL Mapping Editor] をクリックし、[URL Mapping] リストの下部にある [Add] をクリックして、新しい URL マッピングを追加します。
  3. 新しい URL マッピングの詳細を追加します。
    アプリリンク アシスタントでは、基本的な URL マッピングの手順が示されます

    図 1. サイトのリンク構造についての詳細を追加し、URL をアプリ内のアクティビティにマッピングします。

    1. [Host] 欄にウェブサイトの URL を入力します。
    2. マッピングする URL の pathpathPrefix、または pathPattern を追加します。たとえば、レシピ共有アプリで、すべてのレシピを同じアクティビティで提供しており、対応するウェブサイトのレシピがすべて同じ /recipe ディレクトリ内にある場合は、pathPrefix を使って /recipe と入力します。 このようにすると、http://www.recipe-app.com/recipe/grilled-potato-salad という URL は次の手順で選択するアクティビティにマッピングされます。
    3. [Activity] で、URL のユーザーの誘導先となるアクティビティを選択します。
    4. [OK] をクリックします。
  4. アプリリンク アシスタントで、URL マッピングに基づいてインテント フィルタが AndroidManifest.xml ファイルに追加され、[Preview] 欄でハイライト表示されます。変更を加える場合は、[Open AndroidManifest.xml] をクリックしてインテント フィルタを編集します(詳しくは、Android のインテント フィルタに関する説明をご覧ください)。

    注: アプリを更新せずにさらにリンクをサポートするには、今後追加する予定のある URL に対応した URL マッピングを定義する必要があります。また、検索結果の対象となるように、アプリのホーム画面の URL も必ず含めてください。

  5. URL マッピングが適切に機能するかどうか確認するには、[Check URL Mapping] 欄に URL を入力し、[Check Mapping] をクリックします。適切に機能する場合は、入力した URL が選択したアクティビティにマッピングされていることを示す成功のメッセージが表示されます。

アプリへのリンクを処理する

URL マッピングが適切に機能することを確認したら、作成したインテントを処理するロジックを追加します。

  1. アプリリンク アシスタントで [Select Activity] をクリックします。
  2. リストからアクティビティを選択し、[Insert Code] をクリックします。

アプリリンク アシスタントで、アクティビティの Java ファイルに次のようなコードが追加されます(注: 現在、アプリリンク アシスタントは Kotlin をサポートしていないため、このコードを手動で追加する必要があります)。

Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val appLinkIntent = intent
        val appLinkAction = appLinkIntent.action
        val appLinkData = appLinkIntent.data

    }
    

Java

    // ATTENTION: This was auto-generated to handle app links.
    Intent appLinkIntent = getIntent();
    String appLinkAction = appLinkIntent.getAction();
    Uri appLinkData = appLinkIntent.getData();
    

ただし、このコードはそのままでは十分ではありません。appLinkData の URI に基づいて、対応するコンテンツを表示するなどの処理を行う必要があります。たとえば、レシピ共有アプリの場合は、次のサンプルのようなコードになります。

Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
        handleIntent(intent)
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        handleIntent(intent)
    }

    private fun handleIntent(intent: Intent) {
        val appLinkAction = intent.action
        val appLinkData: Uri? = intent.data
        if (Intent.ACTION_VIEW == appLinkAction) {
            appLinkData?.lastPathSegment?.also { recipeId ->
                Uri.parse("content://com.recipe_app/recipe/")
                        .buildUpon()
                        .appendPath(recipeId)
                        .build().also { appData ->
                            showRecipe(appData)
                        }
            }
        }
    }
    

Java

    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      ...
      handleIntent(getIntent());
    }

    protected void onNewIntent(Intent intent) {
      super.onNewIntent(intent);
      handleIntent(intent);
    }

    private void handleIntent(Intent intent) {
        String appLinkAction = intent.getAction();
        Uri appLinkData = intent.getData();
        if (Intent.ACTION_VIEW.equals(appLinkAction) && appLinkData != null){
            String recipeId = appLinkData.getLastPathSegment();
            Uri appData = Uri.parse("content://com.recipe_app/recipe/").buildUpon()
                .appendPath(recipeId).build();
            showRecipe(appData);
        }
    }
    

アプリをウェブサイトに関連付ける

アプリに対する URL のサポートを設定すると、アプリリンク アシスタントではデジタル アセット リンク ファイルが生成されます。このファイルを使ってウェブサイトをアプリに関連付けることができます。

デジタル アセット リンク ファイルを使用する代わりに、Search Console でサイトとアプリを関連付けることもできます。

アプリリンク アシスタントを使ってアプリとウェブサイトを関連付けるには、アプリリンク アシスタントから [Open Digital Asset Links File Generator] をクリックし、次の手順に沿って進めます。

アプリリンク アシスタントでは、基本的な URL マッピングの手順が示されます

図 2. サイトとアプリに関する詳細を入力し、デジタル アセット リンク ファイルを生成します。

  1. サイトのドメインアプリケーション ID を入力します。
  2. デジタル アセット リンク ファイルに Smart Lock for Passwords のサポートを含めるには、[Support sharing credentials between the app and the website] を選択し、サイトのログイン URL を入力します。これにより、デジタル アセット リンク ファイルに delegate_permission/common.get_login_creds という文字列が追加され、アプリとウェブサイトでログイン認証情報を共有することが宣言されます。詳しくは、アプリで Smart Lock for Passwords をサポートする方法についてご確認ください。
  3. 署名設定を指定するか、キーストア ファイルを選択します。アプリのリリースビルドかデバッグビルド用に正しい設定またはキーストア ファイルを選択してください。実稼働向けビルドを設定する場合は、リリース設定を使用します。ビルドをテストする場合は、デバッグ設定を使用します。
  4. [Generate Digital Asset Links file] をクリックします。
  5. Android Studio でファイルが生成されたら、[Save file] をクリックしてファイルをダウンロードします。
  6. assetlinks.json ファイルをサイトにアップロードします(https://<yoursite>/.well-known/assetlinks.json)。その際、すべてのユーザーに読み取りアクセスを許可します。

    重要: デジタル アセット リンク ファイルは暗号化された HTTPS プロトコルを介して検証されます。アプリのインテント フィルタに https が含まれているかどうかに関係なく、assetlinks.json ファイルが HTTPS 接続でアクセス可能であることを確認してください。

  7. [Link and Verify] をクリックし、正しいデジタル アセット リンク ファイルを正しい場所にアップロードしたことを確認します。

デジタル アセット リンク ファイルを通じてウェブサイトをアプリと関連付ける方法について詳しくは、ウェブサイトの関連付けを宣言するをご覧ください。

アプリリンクをテストする

リンクから正しいアクティビティが開かれることを確認する手順は次のとおりです。

  1. アプリリンク アシスタントで [Test App Links] をクリックします。
  2. テストする URL を [URL] 欄に入力します(例: http://recipe-app.com/recipe/grilled-potato-salad)。
  3. 図 3. テスト対象の URL がアプリ内のアクティビティに正常にマッピングされている場合、アプリリンク アシスタントには成功のメッセージが表示され、アプリが開いて指定されたコンテンツが表示されます。

  4. [Run Test] をクリックします。
  5. URL マッピングが適切に設定されていないか存在しない場合は、[Test App Links] ウィンドウで URL の下にエラー メッセージが表示されます。URL マッピングが存在する場合は、曖昧さ回避のダイアログ(アプリ選択ツール)は表示されずに、デバイスまたはエミュレータでアプリの指定されたアクティビティが開きます。[App Link Testing] ウィンドウには成功のメッセージが表示されます。アプリを正常に起動できない場合は、Android Studio の [Run] ウィンドウにエラー メッセージが表示されます。

アプリリンク アシスタントから Android アプリリンクをテストするには、Android 6.0(API レベル 23)以降を実行するデバイスを接続するか、仮想デバイスを用意する必要があります。詳しくは、デバイスを接続する方法または AVD を作成する方法をご覧ください。

Firebase App Indexing を追加する

Android アプリリンクをアプリに追加すると、Firebase App Indexing のコードをアクティビティに追加して、Google 検索の追加機能(オートコンプリートの候補やアプリ内検索など)からアプリへの再アクセスを促すことができます。詳しくは、Firebase App Indexing のドキュメントで Firebase App Indexing についての説明をご覧ください。

Firebase App Indexing をアプリに追加するには、Android Studio で Firebase Assistant を使用して [App Indexing] セクションを展開し、手順に沿って操作します。