Intégration de l'application associée à l'Association express

Grâce à l'Association express, les applications associées OEM sont parfaitement intégrées à l'association de l'expérience utilisateur. Plusieurs points d'intégration peuvent être définis utilisé pour engager les utilisateurs après avoir terminé l'Association express.

Installation lors de la première utilisation de l'appareil

L'Association express permet aux utilisateurs de télécharger l'application associée pour leur casque dernière étape de l'expérience OOBE (Out-Of-Box Experience). Celui-ci est présenté à l'utilisateur dans une notification lui indiquant que l'association est terminée et qu'il peut soit téléchargez l'application si elle n'est pas déjà installée, ou ouvrez-la et démarrez l'utilisent.

Pour commencer à utiliser cette fonctionnalité, ajoutez le nom de package de votre application associée dans la section les détails de l'appareil sur la console.

Les applications associées lancées par Association express incluent deux éléments de données supplémentaires:

  • android.bluetooth.device.extra.DEVICE (Appareil Bluetooth) ayant déclenché la notification.
  • com.google.android.gms.nearby.discovery.fastpair.MODEL_ID – a java.lang.String qui représente l'ID de modèle de l'entité appareil.

Intégration des tranches de paramètres

Les segments d'application peuvent être fournis par un application associée afin d'améliorer encore les options disponibles sur le Page des paramètres Bluetooth.

Un SliceProvider doivent être implémentés par une application associée pour fournir ces segments de paramètres. Il y sont deux types de segments disponibles: un segment OOBE et des éléments de paramètres génériques. La La tranche OOBE doit être incluse si l'utilisateur n'a pas encore configuré le casque dans l'application associée. Les segments restants doivent toujours être inclus, voir l'exemple de code ci-dessous:

@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 permet de rappeler aux utilisateurs de terminer la configuration de leur appareil. si ce n'est pas déjà fait dans l'application associée. L'application associée ne doit pas fournir à nouveau la tranche une fois que l'utilisateur a terminé la configuration de l'appareil.

@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 permet aux applis associées de fournir des liens vers des sites d'usage courant paramètres.

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

Chaque segment doit avoir un titre, un sous-titre, une icône et une action.

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

Ajoutez le code suivant à la console après avoir implémenté SliceProvider dans Autorisez le service d'association express à vérifier qu'il communique avec la bonne application:

  • L’autorité du fournisseur
  • Les applications associées résumé signature public SHA-256 <ph type="x-smartling-placeholder">

Intention de mise à jour du micrologiciel

Lorsque la version du micrologiciel d'un appareil connecté est obsolète ou différentes de la version du micrologiciel configurée dans la console de l’appareil, L'Association express envoie une notification à l'application associée com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST Intent après la vérification de la version du micrologiciel. L'intent contient les informations supplémentaires suivantes:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION, le version du micrologiciel de l'appareil connecté
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN, défini sur true si l'Association express a affiché une notification