ユーザー アクションを記録する

Google 検索では、検索結果やおすすめのランキングを向上させるため、ユーザーがアプリの公開コンテンツやパーソナル コンテンツ上で行ったアクションに関する情報が使用されます。アプリでユーザーがコンテンツを検索する際のエクスペリエンスを向上させるには、App Indexing API を使用してユーザーのアクションを記録します。

ログに記録するアクション

次のガイドラインに沿って、ユーザー アクションをログに記録してください。

  • コンテンツの表示、新しいコンテンツの作成、コンテンツの共有など、アプリに対するユーザー操作をログに記録する。
  • ユーザーがコンテンツに対して直接行ったアクションのみをログに記録する - メッセージの受信、プレイリストの同期など、アプリ内のバックグラウンド アクションは対象外。
  • ユーザーがリスト全体を操作した場合、リスト内の各アイテムに対するアクションはログに記録しない。たとえば、ユーザーが受信トレイを開くことで引き起こされる、各メッセージ アイテムの表示アクションは記録しません。

アクションのビルドとログ記録

Action オブジェクトを作成するには、次のパラメータを定義します。

  • コンテンツのタイトルと URL
  • アクション タイプに適切な Action.Builder

次に、アクションをログに記録します。

  • 長い時間にわたって発生するアクション(レシピの表示など)については、start() メソッドと end() メソッドの両方を適宜呼び出します。たとえば、レシピを表示するアクション(start)とレシピを閉じるアクション(end)に対する呼び出しを個別にログに記録します。
  • 瞬間的なアクションの場合は、ユーザーがアクションを行ったらすぐに end() メソッドを呼び出します。たとえば、ユーザーがメモにコメントしたときは、end() メソッドを 1 回だけ呼び出して瞬間的なアクションをログに記録します。

アクション タイプについて: コンテンツに対して正しい Action.Builder 定数を使用してください。たとえば、静的コンテンツを開くには VIEW_ACTION 定数を使用し、動画コンテンツを再生するには WATCH_ACTION 定数を使用します。定数のリストAction.Builder クラス)を確認してください。

フラグメントについて: フラグメントは下記の例のアクティビティと同じ構造にします。ただし、フラグメントが 1 つのアクティビティで何度も実行されたり、フラグメントが複数あったりすることがあるため、API の呼び出しが一度しか行われないよう注意してください。ガイドラインをいくつか紹介します。

  • アクティビティで API 呼び出しを行う場合は、そのアクティビティ内のフラグメントからは一切呼び出しを行わない。
  • アクティビティで API 呼び出しを行わず、フラグメントから呼び出す場合は、必ず 1 つのフラグメントから一度だけ呼び出しを行うようにする。
開始と終了

以下の例は、一般公開コンテンツを使用しています。

Java
Android

@Override
protected void onStart() {
    super.onStart();
    // If you’re logging an action on content that hasn’t been added to the index yet,
    // add it first.
    // See <a href="https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index">https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index</a>.

    FirebaseUserActions.getInstance().start(getRecipeViewAction());
}

@Override
protected void onStop() {
    FirebaseUserActions.getInstance().end(getRecipeViewAction());
    super.onStop();
}

Kotlin
Android

override fun onStart() {
    super.onStart()
    // If you’re logging an action on content that hasn’t been added to the index yet,
    // add it first.
    // See <a href="https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index">https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index</a>.

    FirebaseUserActions.getInstance().start(getRecipeViewAction())
}

override fun onStop() {
    FirebaseUserActions.getInstance().end(getRecipeViewAction())
    super.onStop()
}
瞬間的

以下の例は、パーソナル コンテンツを使用しています。

Java
Android

public void displayNoteDialog(final String positiveText, final String negativeText) {
    // ...

    // If you’re logging an action on content that hasn’t been added to the index yet,
    // add it first.
    // See <a href="https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index">https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index</a>.

    FirebaseUserActions.getInstance().end(getNoteCommentAction());
    // ...
}

public Action getNoteCommentAction() {
    return new Action.Builder(Action.Builder.COMMENT_ACTION)
            .setObject(mNote.getTitle(), mNote.getNoteUrl())
            // Keep action data for personal connulltent on the device
            .setMetadata(new Action.Metadata.Builder().setUpload(false))
            .build();
}

Kotlin
Android

fun displayNoteDialog(positiveText: String, negativeText: String) {
    // ...

    // If you’re logging an action on content that hasn’t been added to the index yet,
    // add it first.
    // See <a href="https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index">https://firebase.google.com/docs/app-indexing/android/personal-content#update-the-index</a>.

    FirebaseUserActions.getInstance().end(getNoteCommentAction())
    // ...
}

private fun getNoteCommentAction(): Action {
    return Action.Builder(Action.Builder.COMMENT_ACTION)
            .setObject(note.title, note.noteUrl)
            // Keep action data for personal connulltent on the device
            .setMetadata(Action.Metadata.Builder().setUpload(false))
            .build()
}

次のステップ: 実装状況をテストする

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

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