Интеграция приложения Fast Pair Companion

Функция Fast Pair позволяет глубоко интегрировать сопутствующие OEM-приложения в процессы сопряжения и использования. Существует несколько точек интеграции, которые при желании можно использовать для привлечения пользователей после завершения быстрого сопряжения.

Установка во время готовой работы (OOBE)

Функция Fast Pair позволяет пользователям загружать сопутствующее приложение для своей гарнитуры на последнем этапе готовой настройки (OOBE). Это отображается пользователю в виде уведомления о том, что сопряжение завершено и что он может либо загрузить приложение, если оно еще не установлено, либо открыть приложение и начать его использовать.

Чтобы начать работу с этой функцией, добавьте имя пакета сопутствующего приложения к сведениям об устройстве на консоли .

Сопутствующие приложения, запущенные Fast Pair, включают дополнительный элемент данных:

Интеграция среза настроек

Срезы могут предоставляться сопутствующим приложением для дальнейшего расширения возможностей, доступных на странице настроек Bluetooth устройства.

SliceProvider должен быть реализован сопутствующим приложением для предоставления этих срезов настроек. Доступны два типа срезов: срез OOBE и общие элементы настроек. Фрагмент OOBE должен быть включен, если пользователь еще не настроил гарнитуру в сопутствующем приложении, а остальные фрагменты должны быть всегда включены, см. пример кода ниже:

@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 используется для напоминания пользователям о необходимости завершить настройку своего устройства, если они еще не сделали этого в сопутствующем приложении. Сопутствующее приложение не должно снова предоставлять фрагмент после того, как пользователь завершил настройку устройства.

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

setting_slice — это место, где сопутствующие приложения могут предоставлять ссылки на часто используемые настройки.

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) {
  ...
}

Каждый фрагмент должен иметь заголовок, подзаголовок, значок и действие.

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

Добавьте в консоль следующее после реализации SliceProvider , чтобы позволить службе быстрого соединения проверить, что она взаимодействует с правильным приложением:

Обновление прошивки Цель

Если версия прошивки подключенного устройства устарела или, точнее говоря, отличается от версии прошивки, настроенной в консоли устройства, Fast Pair уведомит сопутствующее приложение с помощью намерения com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST после проверка версии прошивки. Intent содержит следующую дополнительную информацию:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION — версия прошивки подключенного устройства.
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN , установите значение true , если Fast Pair показало уведомление.