Habilita la indexación de contenido personal

Con la indexación de contenido personal, la app genera resultados de la búsqueda en la app de Google que incluyen contenido vinculado con la cuenta del usuario. Los usuarios solo ven contenido personal en sus dispositivos.

Por ejemplo, si un usuario busca "receta de pollo favorita", la pestaña de resultados En app incluye la nota que agregó a una receta de pollo en una aplicación culinaria.

Si la app no incluye contenido personal, puedes omitir este paso y dirigirte directamente a Registra acciones de los usuarios.

Antes de comenzar, asegúrate de admitir los vínculos al contenido de tu app y haber agregado la biblioteca de App Indexing a tu app.

Establece el índice y agrega objetos

Crea una clase que extienda el JobIntentService. La implementación descrita en este documento se basa en la clase JobIntentService para poner en fila las actualizaciones al índice del dispositivo, pero puedes usar una clase alternativa para programar el trabajo. Si sigues la implementación con la clase JobIntentService, asegúrate de agregar la Biblioteca de Asistencia de Android también al archivo build.gradle de tu proyecto.

Para incluir elementos en el índice de contenido personal de la app, crea objetos Indexable en la misma clase:

package com.example.myapp;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.app.JobIntentService;
import com.google.firebase.appindexing.builders.Indexables;
import com.google.firebase.appindexing.FirebaseAppIndex;
import com.google.firebase.appindexing.Indexable;
import java.util.ArrayList;

public class AppIndexingUpdateService extends JobIntentService {
  // Job-ID must be unique across your whole app.
  private static final int UNIQUE_JOB_ID = 42;

  public static void enqueueWork(Context context) {
    enqueueWork(context, AppIndexingUpdateService.class, UNIQUE_JOB_ID, new Intent());
  }

  @Override
  protected void onHandleWork(@NonNull Intent intent) {
    // TODO Insert your Indexable objects — for example, the recipe notes look as follows:

    ArrayList<Indexable> indexableNotes = new ArrayList<>();

    for (Recipe recipe : getAllRecipes()) {
        Note note = recipe.getNote();
        if (note != null) {
            Indexable noteToIndex = Indexables.noteDigitalDocumentBuilder()
                    .setName(recipe.getTitle() + " Note")
                    .setText(note.getText())
                    .setUrl(recipe.getNoteUrl())
                    .build();

            indexableNotes.add(noteToIndex);
        }
    }

    if (indexableNotes.size() > 0) {
        Indexable[] notesArr = new Indexable[indexableNotes.size()];
        notesArr = indexableNotes.toArray(notesArr);

        // batch insert indexable notes into index
        FirebaseAppIndex.getInstance().update(notesArr);
    }
  }

¿Qué debe incluir el índice de contenido personal?

Define objetos Indexable para los siguientes tipos de contenido:

  • El contenido específico de los usuarios, como mensajes, fotos o documentos.
  • El contenido que es importante para los usuarios, como sus favoritos o el contenido al que tal vez quieran acceder con más frecuencia. Por ejemplo, los documentos o las canciones que marcaron o seleccionaron para usar sin conexión.
  • El contenido que se genera dentro de la app, no solo el que se consulta mediante ella. Por ejemplo, los contactos que crean los usuarios directamente dentro de la app y que se almacenan en la app, en lugar de los contactos del directorio del teléfono.

Agrega un receptor de transmisión a tu app

Los Servicios de Google Play envían periódicamente una solicitud a tu app para actualizar el índice del dispositivo. La clase BroadcastReceiver recibe esta solicitud y activa JobIntentService para procesar el trabajo de indexación. El siguiente ejemplo usa la clase AppIndexingUpdateService del paso anterior.

package com.example.myapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.google.firebase.appindexing.FirebaseAppIndex;

/** Receives broadcast for App Indexing Update. */
public class AppIndexingUpdateReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent != null
        && FirebaseAppIndex.ACTION_UPDATE_INDEX.equals(intent.getAction())) {
      // Schedule the job to be run in the background.
      AppIndexingUpdateService.enqueueWork(context);
    }
  }
}

Genera y actualiza el índice

A continuación, permite que los Servicios de Google Play llamen al servicio de Indexación de aplicaciones para actualizar el índice en el dispositivo con el contenido personal del usuario en estas tres situaciones:

  • Cuando la app se instala en un dispositivo.
  • Si se actualiza una versión existente de la app a una versión compatible con la indexación de contenido personal.
  • Llamadas periódicas para reflejar correctamente los cambios que se produzcan en el contenido indexado, a fin de garantizar una experiencia del usuario sin problemas.

Además, si el índice en el dispositivo se pierde por algún motivo (p. ej., si el índice se daña), esta llamada para actualizar el índice restablecerá su contenido.

En tu archivo AndroidManifest.xml, registra el BroadcastReceiver para que pueda recibir llamadas de los Servicios de Google Play para actualizar el índice. El ejemplo siguiente usa la clase JobIntentService para programar las actualizaciones de indexación:

<!-- Register the BroadcastReceiver -->
<receiver android:name=".AppIndexingUpdateReceiver"
         android:exported="true"
         android:permission="com.google.android.gms.permission.APPINDEXING">
    <intent-filter>
        <action android:name="com.google.firebase.appindexing.UPDATE_INDEX" />
    </intent-filter>
</receiver>

<!-- Grant the AppIndexingUpdateService permission and enable it to run after being triggered -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<service android:name=".AppIndexingUpdateService"
         android:permission="android.permission.BIND_JOB_SERVICE" />

Actualiza el índice

Cuando los usuarios agregan, actualizan o quitan contenido personal, el índice en el dispositivo debe reflejar esos cambios. Agrega el siguiente código para actualizar el contenido del índice:

Agregar y actualizar
private void indexNote() {
        Note note = mRecipe.getNote();
        Indexable noteToIndex = Indexables.noteDigitalDocumentBuilder()
                .setName(mRecipe.getTitle())
                .setText(note.getText())
                .setUrl(mRecipe.getNoteUrl())
                .build();

        Task<Void> task = FirebaseAppIndex.getInstance().update(noteToIndex);
         ...
    }
    
Quitar

Para identificar los elementos que deben quitarse, usa la URL del elemento. Agrega la siguiente línea a la función de borrar o quitar de la app correspondiente a ese elemento.

                    // Deletes or removes the corresponding notes from index.
                    String noteUrl = mRecipe.getNoteUrl();
                    FirebaseAppIndex.getInstance().remove(noteUrl);
         

Borra el índice cuando los usuarios salgan

Borra el índice en el dispositivo cuando los usuarios salgan de la app, durante el evento de salida. Incluye la llamada para generar y actualizar el índice mediante AppIndexingService, a fin de volver a llenar el índice en el dispositivo cuando los usuarios vuelvan a acceder.

Para borrar el índice en el dispositivo, cuando un usuario sale de la app, agrega el siguiente fragmento de código:

...
import com.google.firebase.appindexing.FirebaseAppIndex;

public class LogOutActivity extends Activity {
    ...
    private void onLogOutButtonClicked() {
        ...
        FirebaseAppIndex.getInstance().removeAll();
    }
}

Siguiente: Registra las acciones de los usuarios

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.