コンテンツのインデックス処理を有効にする

Google 検索の結果または端末上のアプリ内検索でアプリのコンテンツを見つけたユーザーがシームレスに操作できるようにするには、リンクの関連付けと処理をアプリに追加します。この記事で説明する手順を実施することにより、ユーザーがアプリへのリンクを開いたときに適切な場所に確実に移動させることができます。アプリをインストールしていないユーザーは、Android Instant Apps により、インストールすることなくアプリを実行することができます。

サイトとアプリを関連付ける

Digital Asset Links を使用してサイトとアプリを関連付け、Android プラットフォームの API レベル 23 以上をターゲットとしてアプリをビルドします。

Digital Asset Link は、ウェブサーバーの .well-known ディレクトリ内の assetlinks.json という JSON ファイルです。assetlinks.json ファイルで次のフィールドを設定します。

  • relation: ターゲットで指定した Android アプリにリンクを開く権限を付与するには、delegate_permission/common.handle_all_urls を使用します。
  • target: パッケージ名と、Android アプリを Play ストアにデプロイする際にアプリの署名に通常使用する証明書の SHA-256 フィンガープリントを指定します。 デプロイメントと署名証明書の詳細については、アプリの署名をご覧ください。

以下に、パッケージ名が com.recipe_app であるアプリの assetlinks.json ファイルの例を示します。実際に使用するときは、自分のアプリに合わせてパッケージ名と sha256_cert_fingerprints の設定を変更してください。

  [{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target" : { "namespace": "android_app",
      "package_name": "com.recipe_app",
                 "sha256_cert_fingerprints": ["hash_of_app_certificate"] }
  }]

assetlinks.json ファイルをアップロードし、https://<yoursite>/.well-known/assetlinks.json で誰でも閲覧できるように読み取りアクセス権を設定します。

受信リンクのルーティング

受信リンクの処理の最初の手順として、インテント フィルタを Android マニフェスト ファイルに追加します。インテント フィルタは、ユーザーが Google 検索結果からリンクをクリックしたときにアプリが表示するビューを示します。ここで重要なのは、インテント フィルタとアプリの構造が一致しており、受信リンクが適切なビューで開く必要があるということです。インテント フィルタで URL をサポートする場合、アプリにその受信リンクを適切に処理するロジックが含まれている必要があります(次のステップで説明します)。

  1. Android Studio でアプリを開きます。
  2. [プロジェクト] ウィンドウの Android ビューで AndroidManifest.xml ファイルをダブルクリックし、コードエディタで開きます。
  3. 次の 3 つの方法のいずれかを使用してインテント フィルタを追加します。
    • <activity> 要素で、左の列をクリックして電球を表示します。[URL を追加] をクリックして選択します。
    • <activity> 要素を右クリックし、[生成] > [URL] を選択します。
    • アクティビティにカーソルを置き、[コード] > [生成] > [URL] を選択します。
    • アクティビティが展開され、更新された URL の詳細情報が表示されます。
       <activity
          android:name=".client.RecipeActivity"
          android:label="@string/app_name"
          android:exported="true"
          android:launchMode="singleTop"
          android:theme="@android:style/Theme.Holo.NoActionBar">
          <intent-filter android:label="@string/app_name" android:autoVerify="true">
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
              <category android:name="android.intent.category.BROWSABLE" />
              <!-- Accepts URIs that begin with "http://recipe-app.com/recipe" -->
              <data android:scheme="http"
                  android:host="recipe-app.com"
                  android:pathPrefix="/recipe" />
          </intent-filter>
      </activity>
      
       
  4. <manifest> タグで宣言されているように、デフォルトでアプリ パッケージ名が使用されているため、ホスト フィールドが正しいかどうか確認します。DEFAULTBROWSABLE のカテゴリは必須です。android:autoVerify="true" も指定する必要があります。 最後に、pathPrefix プロパティと scheme プロパティを編集してもかまいません。

    以下に、recipe-app.com サイト用にマニフェストを更新した例を示します。このマニフェストでは、2 つ目の <data> タグを追加することで、pathPrefix プロパティおよび HTTP と HTTPS schemes の両方を処理しています。

      <activity
        android:name=".client.RecipeActivity"
        android:label="@string/app_name"
        android:exported="true"
        android:launchMode="singleTop"
        android:theme="@android:style/Theme.Holo.NoActionBar">
        <intent-filter android:label="@string/app_name" android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- Accepts URIs that begin with "http://recipe-app.com/recipe" -->
            <data android:scheme="http"
                android:host="recipe-app.com"
                android:pathPrefix="/recipe" />
            <!-- Accepts URIs that begin with "https://recipe-app.com/recipe" -->
            <data android:scheme="https"
                android:host="recipe-app.com"
                android:pathPrefix="/recipe" />
        </intent-filter>
    </activity>
    

被リンク URL を処理する

Android マニフェストでインテント フィルタを設定したことにより、アプリは渡された URL に基づいてアクティビティを起動するようになりました。たとえば、アプリが RecipeActivity のような http://recipe-app.com/recipe/* と一致する URL を受け取ると、RecipeActivity アクティビティが起動します。

このアクティビティ内で getIntent() を呼び出して、このインテントから詳細を取得できます。その場合の onCreate コードは次のようになります。

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_recipe);
     onNewIntent(getIntent());
  }

この onCreate() メソッドは、getIntent() メソッドの結果(Intent)を onNewIntent に渡します。getDataString() メソッドは URL を取得して解析しやすい形にします。たとえば、レシピ ID によって特定のレシピをアプリに表示したいとします。URL を解析して最後の要素(レシピ ID)を取得するコードは次のようになります。

  protected void onNewIntent(Intent intent) {
    String action = intent.getAction();
    String data = intent.getDataString();
    if (Intent.ACTION_VIEW.equals(action) && data != null) {
        String recipeId = data.substring(data.lastIndexOf("/") + 1);
        Uri contentUri = Uri.parse("content://com.recipe_app/recipe/").buildUpon()
                .appendPath(recipeId).build();
        showRecipe(contentUri);
    }
}
  

Android デベロッパー向けドキュメントのアプリリンクの処理の詳細をご覧ください。

インデックス作成の改良(オプション)

公開アプリのコンテンツに Google 検索結果に含めたくない要素が含まれている場合は、次のように調整できます。

  • 検索結果から特定のページを除外する: Google 検索の結果から除外する URL を指定するには、noindex.xml ファイルを作成します。これは、ウェブサイトに対する robots noindex メタタグの仕組みと似ています。
  • 検索結果からリアルタイムのアプリ通知を除外する: アプリ通知用の特定の除外タグを noindex.xml ファイルに追加します。

これらの除外を実装する方法については、noindex.xml によるインデックスの改良をご覧ください。

次のステップ: パーソナル コンテンツのインデックス処理を有効にする

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。