Integración de apps complementarias con Vinculación rápida

La Vinculación rápida permite que las apps complementarias de OEM se integren profundamente a la experiencia de vinculación y uso. Hay varios puntos de integración que se pueden usar de forma opcional para atraer a los usuarios una vez que finalicen la Vinculación rápida.

Instalación durante la experiencia lista para usar (OOBE)

La Vinculación rápida permite a los usuarios descargar la aplicación complementaria para sus auriculares como paso final de la experiencia lista para usar (OOBE). Esto se presenta al usuario en una notificación en la que se le dice que finalizó la vinculación y que puede descargar la app si aún no está instalada, o bien abrirla y comenzar a usarla.

Para comenzar a usar esta función, agrega el nombre del paquete de la app complementaria a los detalles del dispositivo en la consola.

Las aplicaciones complementarias iniciadas por la Vinculación rápida incluyen un elemento de datos adicional:

Integración de porción de configuración

Una app complementaria puede proporcionar secciones para mejorar aún más las opciones disponibles en la página de configuración de Bluetooth de un dispositivo.

Una aplicación complementaria debe implementar un SliceProvider para proporcionar estos segmentos de configuración. Hay 2 tipos de segmentos disponibles: una porción OOBE y elementos de configuración genéricos. Se debe incluir la porción OOBE si el usuario aún no configuró los auriculares dentro de la app complementaria y siempre se deben incluir los fragmentos restantes. Consulta la siguiente muestra de código:

@Nullable
@Override
public Slice onBindSlice(Uri sliceUri) {
  String address = sliceUri.getQueryParameter("addr");
  if (address == null) {
    return null;
  }
  String path = sliceUri.getPathSegments().get(/* index= */ 0);
  if ("settings_slice".equals(path)) {
    return createSettingSlice(sliceUri, address);
  } else if ("oobe_slice".equals(path)) {
    return createOobeReminderSlice(sliceUri, address);
  }
  return null;
}

oobe_slice se usa para recordarles a los usuarios que terminen de configurar su dispositivo, si aún no lo han hecho en la aplicación complementaria. Esta aplicación no debe volver a proporcionar la porción después de que el usuario complete la configuración del dispositivo.

@Nullable
private Slice createOobeReminderSlice(Uri sliceUri, String address) {
  if (!deviceHasGoneThroughOobe(address)) {
    ListBuilder listBuilder =
        new ListBuilder(context, sliceUri, ListBuilder.INFINITY);
    addOobeSlice(listBuilder, context, address);
    return listBuilder.build();
  }
  return null;
}

private static void addOobeSlice(
    ListBuilder listBuilder, Context context, String address) {
  listBuilder.addRow(
      createRow(
          context,
          R.drawable.icon_oobe,
          R.string.title_oobe,
          R.string.summary_oobe,
          R.string.label_oobe,
          createOobePendingIntent(context, address)));
}

En setting_slice, las apps complementarias pueden proporcionar vínculos a parámetros de configuración de uso frecuente.

private Slice createSettingSlice(Uri sliceUri, String address) {
  ListBuilder listBuilder =
      new ListBuilder(context, sliceUri, ListBuilder.INFINITY);
  // TODO: Add your customized slice here.
  addRow1(listBuilder, context, address);
  addRow2(listBuilder, context, address);
  return listBuilder.build();
}

private static void addRow1(
    ListBuilder listBuilder, Context context, String address) {
  listBuilder.addRow(
      createRow(
          context,
          R.drawable.fp_slice_row1_icon,
          R.string.fp_slice_row1_title_gestures,
          R.string.fp_slice_row1_summary_gestures,
          R.string.fp_slice_row1_label_gestures,
          createPendingIntent(context, address)));
}

private static void addRow2(
    ListBuilder listBuilder, Context context, String address) {
  ...
}

Cada Slice debe tener título, subtítulo, ícono y acción.

private static RowBuilder createRow(
    Context context,
    @DrawableRes int iconId,
    @StringRes int titleId,
    @StringRes int summaryId,
    @StringRes int actionTitleId,
    PendingIntent pendingIntent) {
  SliceAction action =
      SliceAction.createDeeplink(
          pendingIntent,
          IconCompat.createWithResource(context, iconId),
          ListBuilder.ICON_IMAGE,
          context.getString(actionTitleId));
  return new RowBuilder()
      .setTitleItem(
          IconCompat.createWithResource(context, iconId),
          ListBuilder.ICON_IMAGE)
      .setTitle(context.getString(titleId))
      .setSubtitle(context.getString(summaryId))
      .setPrimaryAction(action);
}

Agrega el siguiente código a console después de implementar SliceProvider para permitir que el servicio de Vinculación rápida verifique que se está comunicando con la app correcta:

Intent de actualización de firmware

Cuando la versión de firmware de un dispositivo conectado esté desactualizada o sea diferente de la versión de firmware que se configuró en la consola del dispositivo, la Vinculación rápida notificará a la app complementaria con un intent com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST después de que se verifique la versión del firmware. El intent tiene la siguiente información adicional:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, la versión de firmware del dispositivo conectado
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, establecido en true si la Vinculación rápida mostró una notificación