Admitir URL HTTP en tu app

App Indexing para Android usa URL HTTP para dirigir a los usuarios a contenido de tu app.

Comprender los vínculos de tu sitio

Estructura tu sitio web y tu app de modo que compartan un conjunto de vínculos comunes que ambas plataformas puedan abrir y usar. Por ejemplo, considera el sitio web: http://www.appindexingsample.com. Es un sitio sencillo para una escuela de cocina que contiene contenido de recetas que es ideal para indexar. También contiene una página de registro donde las personas pueden registrarse para asistir a clases presenciales, y una página para explorar el cronograma de clases presenciales. Estos tres tipos de contenido tienen tres tipos de vínculos diferentes:

  • Páginas de recetas: http://www.appindexingsample.com/recipes/*
  • Página de registro: http://www.appindexingsample.com/registration/
  • Página de cronograma: http://www.appindexingsample.com/schedule/

Agregar una vista coincidente para cada tipo de vínculo a tu app. Luego, configura tu app para que reconozca y administre cada tipo de vínculo. Comprender la cantidad y los tipos de vínculos que deberás admitir antes de comenzar a compilar, te facilitará la tarea. Las siguientes instrucciones hacen referencia a esta estructura de URL para los ejemplos.

Conectar tu sitio con tu app

Debes conectar tu sitio con tu app usando Vínculos de recursos digitales.

Los vínculos de recursos digitales adquieren la forma de archivo JSON llamado assetlinks.json. Debes subirlo al directorio .well-known de tu servidor web. El archivo define el comportamiento de los vínculos de recursos; en el caso de App Indexing, esto significa que debes configurar los siguientes campos:

  • Relación: Especifica el tipo de relación o delegación. Para App Indexing, especifica que todas las url delegan al vínculo de recursos relacionado usando delegate_permission/common.handle_all_urls.
  • Destino: Usando el valor namespace de android_app se determina la app de android que recibe las URL. Configura esto usando su nombre de paquete y la huella digital SHA-256 del certificado que usaste para firmar tu app antes de implementarla en Play Store. Consulta Firma de tus apps para obtener más información acerca de la implementación y de tu certificado de firma.

Aquí te mostramos un assetlinks.json de ejemplo para un paquete de apps llamado com.appindexingsample.app. Deberás cambiar el nombre del paquete y el contenido de sha256_cert_fingerprints para que coincidan con los de tu app.

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

Sube este contenido y asegúrate de que esté visible para todos en https://<yoursite>/.well-known/assetlinks.json.

Recibir vínculos entrantes en tu app

En la sección anterior, aprendiste por qué la estructura de la URL de tu sitio es un componente esencial para determinar la mejor manera de compilar tu app. Aprendiste los tres tipos de URL en appindexingsample.com que tu app también debe admitir:

  • Recetas
  • Registro
  • Cronograma

En las siguientes secciones aprenderás a configurar tu app de Android para que reconozca esos vínculos y responda a ellos.

Agregar filtros de intenciones

El primer paso es agregar filtros de intenciones a tu archivo de manifiesto de android. En el AndroidManifest.xml, los filtros de intenciones declaran los patrones de URL HTTP que tu app administra a partir de vínculos entrantes; las mismas URL utilizadas para las páginas correspondientes de tu sitio web. Consulta la sección Agregar un filtro de intenciones de la Ayuda de Android Studio. Aquí te mostramos un ejemplo de un archivo de manifiesto de Android para una app con actividades para URL de Cronograma, Recetas y Registro:

  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.appindexingsample.app">
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
         <activity android:name=".MainActivity">
             <intent-filter android:autoVerify="true">
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
         <activity android:name=".ScheduleActivity" />
         <activity android:name=".RecipeActivity" />
         <activity android:name=".RegistrationActivity"/>
    </application>
  </manifest>
  1. En Android Studio, selecciona la etiqueta <activity> para revelar el ícono de bombilla a la izquierda de la etiqueta.
  2. Seleccione la bombilla y luego, en la lista desplegable, Agregar URL.

Se expandirá la actividad para mostrar los detalles de la URL actualizada:

  <activity android:name=".ScheduleActivity" >
     <intent-filter android:autoVerify="true">
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
         <data
             android:host="app.appindexingsample.com"
             android:pathPrefix="/schedule"
             android:scheme="http" />
     </intent-filter>
  </activity>

Probablemente tengas que actualizar el campo host, de modo que adopte de forma predeterminada el nombre del paquete de la app. Ten en cuenta que las categorías DEFAULT y BROWSABLE son obligatorias. También te recomendamos que edites el pathPrefix y el scheme. Aquí te mostramos un ejemplo en el que se actualiza el manifiesto para el sitio appindexingsample.com. Administra la propiedad pathPrefix, HTTP y HTTPS schemes agregando una segunda etiqueta <data>.

  <activity android:name=".ScheduleActivity" >
     <intent-filter android:autoVerify="true">
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
         <data
             android:host="appindexingsample.com"
             android:pathPrefix="/schedule"
             android:scheme="http"/>
         <data
             android:host="appindexingsample.com"
             android:pathPrefix="/schedule"
             android:scheme="https"/>
     </intent-filter>
  </activity>

Ahora, cuando un usuario encuentra el vínculo /schedule en tu sitio y escoge ver el resultado de la búsqueda, se inicia tu app y presenta la actividad del cronograma. Es importante que el filtro de intenciones coincida con la lógica de tu app. Si el filtro de intenciones indica la compatibilidad con una URL, tu app también debe incluir lógica para administrar correctamente la URL; de lo contrario, App Indexing fallará. En la próxima sección, aprenderás a analizar el vínculo en esta actividad para determinar cómo tu app debe representarlo y asegurarte de que App Indexing sea exitoso.

Administrar URL entrantes

Ahora que configuraste el filtro de intenciones en tu Manifiesto de Android, tu app inicia una actividad específica en función de la URL que se le pasó. Por ejemplo, se inicia la actividad ScheduleActivity en respuesta a una URL que coincide con http://appindexingsample.com/schedule.

En esta actividad, luego puedes llamar a getIntent() para obtener detalles de esta intención. Por lo tanto, tu código onCreate podría tener la siguiente apariencia:

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

onCreate() pasa los resultados de getIntent() (una Intent) a onNewIntent para su procesamiento. La URL está disponible como resultado de getDataString(), de modo que es relativamente simple analizarla. Por ejemplo, supone que quieres que tu app cambie su color de fondo según una URL sea de los Estados Unidos, http://www.appindexingsample.com/schedule/, o de otro país, http://www.appindexingsample.com/ <country>. Analiza el último elemento de la URL y configura el color de fondo con un código como el siguiente:

  protected void onNewIntent(Intent intent) {
       String action = intent.getAction();
       Uri data = intent.getData();
       if (Intent.ACTION_VIEW.equals(action) && data != null) {
           articleId = data.getLastPathSegment();
           TextView linkText = (TextView)findViewById(R.id.link);
           linkText.setText(data.toString());
       }
   }

Cuando termines de compilar tu app y la implementes en play store , se iniciará la app en respuesta al reconocimiento de URL en los resultados de búsqueda.

Controlar la indexación (opcional)

Puedes controlar qué elementos de la app aparecen en la Búsqueda de Google. Específicamente, puedes ajustar lo siguiente:

  • Excluir páginas específicas de los resultados de búsqueda: cuando utilices App Indexing por primera vez, puedes configurar tu manifiesto para que incluya solo las páginas que quieres que Google indexe. De lo contrario, crea un archivo noindex.xml para especificar las URL que quieres que se excluyan de la Búsqueda de Google. Esto tienen un funcionamiento parecido a de la metaetiqueta robots noindex en los sitios web.
  • Excluir notificaciones de la app en tiempo real de los resultados de búsqueda: usa un archivo noindex.xml con una etiqueta de exclusión específica para notificaciones de la app.

Crear el archivo noindex.xml

Crea un nuevo archivo XML en el directorio de recursos X;L de tu app: res/xml/noindex.xml. Usa instrucciones con atributos específicos para indicar las partes de tu app que se deben excluir de la Búsqueda de Google. Esos atributos son los siguientes:

  • uri: Excluye un URI específico de la Búsqueda de Google. Google no indexa URL que coinciden exactamente con este atributo.
  • uriPrefix: Excluye todo el contenido debajo de una ruta de URI de la Búsqueda de Google. Google no indexa las URL que comienzan con una string que coincide con este atributo.
  • android:value="notification": excluye las notificaciones de tu app de la Búsqueda de Google. Google no indexa las notificaciones de la app si especificas este atributo.

El siguiente ejemplo muestra un archivo noindex.xml que excluye una página específica, directorios ocultos y limita la aparición de notificaciones de la app en la Búsqueda de Google.

  <?xml version="1.0" encoding="utf-8"?>
  <search-engine xmlns:android="http://schemas.android.com/apk/res/android">
    <noindex android:value="notification"/>
    <noindex uri="http://appindexingsample.com/teachers/hidden-page"/>
    <noindex uriPrefix="http://appindexingsample.com/chefs/hidden_prefix"/>
  </search-engine>

Hacer referencia al archivo noindex.xml

Después de agregar el archivo noindex.xml, haz referencia a este desde la sección App del archivo AndroidManifest.xml de la app con la siguiente línea:

  <meta-data android:name="search-engine"
    android:resource="@xml/noindex"/>

Por ejemplo:

  <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.appindexingsample.app">
    <application>
      <activity android:name="com.appindexingsample.app" ...>
        ...
      </activity>
      <meta-data android:name="search-engine" android:resource="@xml/noindex"/>
    </application>
    ...
  </manifest>

A continuación: Agregar la API App Indexing

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.