Android アプリのリンクの追加

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

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

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

後述のように、Android Studio のアプリリンク アシスタントでは、ステップバイステップ方式のウィザードを使用してこのプロセスを簡単に実行できます。

アプリリンクの仕組みとメリットについては、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] をクリックします。

    URL マッピング エディタのウィンドウが表示されます。アプリリンク アシスタントは、URL マッピングに基づいてインテント フィルタを AndroidManifest.xml ファイルに追加し、変更を [Preview] フィールドでハイライト表示します。変更を加える場合は、[Open AndroidManifest.xml] をクリックしてインテント フィルタを編集します。詳細については、受信リンクのインテント フィルタをご覧ください。

    注: アプリを更新せずに今後のリンクをサポートするには、今後追加する予定の URL に対応する URL マッピングを定義します。また、検索結果に表示されるように、アプリのホーム画面の URL も含めます。

  4. URL マッピングが適切に機能するかどうか確認するには、[Check URL Mapping] フィールドに URL を入力し、[Check Mapping] をクリックします。

    適切に機能する場合は、入力した URL が選択したアクティビティにマッピングされていることを示す成功メッセージが表示されます。

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

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

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

アプリリンク アシスタントにより、アクティビティの Java ファイルに次のようなコードが追加されます。

注: 現在、アプリリンク アシスタントは Kotlin をサポートしていないため、Kotlin コードを手動で追加する必要があります。

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    val appLinkIntent = intent
    val appLinkAction = appLinkIntent.action
    val appLinkData = appLinkIntent.data
    ...
}

Java

@Overrride
void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // 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 でアプリをサイトに関連付けることもできます。

アプリで Play アプリ署名を使用している場合、アプリリンク アシスタントで生成される証明書のフィンガープリントは通常、ユーザーのデバイス上の証明書と一致しません。この場合、アプリの正しいデジタル アセット リンクの JSON スニペットは、Google Play Console のデベロッパー アカウントの Release > Setup > App Integrity にあります。

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

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

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

  1. サイトのドメインアプリケーション ID を入力します。
  2. デジタル アセット リンク ファイルに One Tap サインインのサポートを含めるには、[Support sharing credentials between the app and the website] を選択して、サイトのログイン URL を入力します。これにより、デジタル アセット リンクファイルに、アプリとウェブサイトでログイン認証情報を共有することを宣言する文字列 delegate_permission/common.get_login_creds が追加されます。

  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] をクリックし、正しいデジタル アセット リンク ファイルを正しい場所にアップロードしたことを確認します。

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

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

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

  1. アプリリンク アシスタントで、[Test App Links] をクリックします。
  2. テストする URL を [URL] フィールドに入力します(例: http://recipe-app.com/recipe/grilled-potato-salad)。
  3. 図 3. テスト対象 URL と成功メッセージを示す [Test App Links] ダイアログ。

  4. [Run Test] をクリックします。

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

アプリを起動できない場合は、Android Studio の [Run] ウィンドウにエラー メッセージが表示されます。

アプリリンク アシスタントで Android アプリリンクをテストするには、Android 6.0(API レベル 23)以上を搭載したデバイスを接続するか、それに代わる仮想デバイスを利用する必要があります。詳細については、デバイスを接続する方法または AVD を作成する方法をご覧ください。