Ativar indexação de conteúdo pessoal

Com a indexação de conteúdo pessoal, seu aplicativo oferece resultados da pesquisa no Google app para conteúdo vinculado a uma conta de usuário. Os usuários veem somente o próprio conteúdo pessoal nos dispositivos deles.

Por exemplo, se um usuário pesquisar "receita favorita de frango", a guia de resultados "No aplicativo" inclui a nota adicionada pelo usuário a uma receita de frango do app de receita.

Caso seu aplicativo não inclua conteúdo pessoal, ignore esta etapa e vá diretamente para Registrar ações do usuário.

Antes de começar, verifique se você aceita links no conteúdo do app e se adicionou a biblioteca do App Indexing ao aplicativo.

Estabelecer o índice e adicionar objetos

Crie uma classe que estenda o JobIntentService. A implementação descrita neste documento baseia-se na classe JobIntentService para enfileirar as atualizações para o índice no dispositivo, mas é possível usar uma classe alternativa para programar o trabalho. Se você continuar a implementação usando a classe JobIntentService, será necessário adicionar a Biblioteca de suporte do Android ao arquivo build.gradle do seu projeto.

Depois, para incluir itens ao índice de conteúdo pessoal do app, crie objetos Indexable na mesma classe:

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);
    }
  }

O que meu índice de conteúdo pessoal deve incluir?

Defina objetos Indexable para estes tipos de conteúdo:

  • Conteúdo específico do usuário, como mensagens, fotos e documentos.
  • Conteúdo que é importante para os usuários, como favoritos, ou conteúdo que eles podem desejar acessar com mais freqüência. Por exemplo, documentos ou músicas que marcaram como favoritos ou para uso off-line.
  • Conteúdo gerado no seu aplicativo e não apenas acessado por ele. Por exemplo, contatos criados pelos usuários diretamente no seu app e armazenados nele, e não contatos da agenda do smartphone.

Adicionar um receptor de transmissão ao seu app

O Google Play Services envia uma solicitação regularmente ao seu app para atualizar o índice no dispositivo. A classe BroadcastReceiver recebe essa solicitação e aciona o JobIntentService para processar o trabalho de indexação. O exemplo abaixo usa a classe AppIndexingUpdateService da etapa 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);
    }
  }
}

Gerar e atualizar o índice

Em seguida, permita que o Google Play Services chame o serviço de indexação de apps para atualizar o índice no dispositivo com o conteúdo pessoal do usuário nas seguintes situações:

  • Quando o app é instalado em um dispositivo.
  • Caso uma versão existente do aplicativo seja atualizada para uma versão que ofereça suporte à indexação de conteúdo pessoal.
  • Chamadas periódicas ao longo do tempo para refletir com precisão todas as alterações feitas no conteúdo indexado, garantindo uma experiência perfeita do usuário.

Além disso, se o índice no dispositivo for perdido por algum motivo, por exemplo, se estiver corrompido, essa chamada de atualização o recriará.

No seu arquivo AndroidManifest.xml, registre o BroadcastReceiver para que ele receba chamadas do Google Play Services e, assim, atualize o índice. No exemplo abaixo, usa-se a classe JobIntentService para programar as atualizações de indexação:

<!-- 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" />

Atualizar o índice

Quando os usuários adicionam, atualizam ou removem conteúdo pessoal, o índice no dispositivo precisa refletir essas alterações. Adicione o código a seguir para atualizar o conteúdo no índice:

Adicionar e atualizar
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);
         ...
    }
    
Remover

Para identificar itens a serem removidos, use o URL do item. Adicione esta linha à função de exclusão ou remoção do seu aplicativo para esse item.

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

Excluir o índice quando o usuário sai

Exclua o índice no dispositivo quando os usuários saírem do seu aplicativo, no evento de logout. Inclua a chamada para gerar e atualizar o índice usando o AppIndexingService para recriá-lo no dispositivo quando os usuários fizerem login novamente.

Para excluir o índice no dispositivo quando um usuário sair do seu aplicativo, adicione este código ao aplicativo:

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

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

Próximo: registrar ações do usuário

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.