שילוב אפליקציה נלווית עם התאמה מהירה

התאמה מהירה מאפשרת לשלב אפליקציות נלוות של OEM (יצרן ציוד מקורי) בצורה עמוקה בהתאמה וחוויית השימוש בה. יש מספר נקודות שילוב שניתן משמש ליצירת מעורבות של משתמשים לאחר שמסיימים את ההתאמה המהירה.

התקנה במהלך חוויית משתמש מחוץ לאריזה (OOBE)

התכונה 'התאמה מהירה' מאפשרת למשתמשים להוריד את האפליקציה הנלווית לאוזניות עם מיקרופון השלב האחרון בחוויית השימוש מחוץ לתיבה (OOBE). מוצגת למשתמש ב התראה שמודיעה להם שההתאמה הסתיימה ושהם יכולים מורידים את האפליקציה אם היא לא מותקנת, או פותחים את האפליקציה ומפעילים אותה באמצעותו.

כדי להתחיל להשתמש בתכונה הזו, צריך להוסיף את שם החבילה של האפליקציה הנלווית אל פרטי המכשיר במסוף.

אפליקציות נלוות שהופעלו על ידי התאמה מהירה כוללות שני רכיבי נתונים נוספים:

  • android.bluetooth.device.extra.DEVICEמכשיר ה-Bluetooth שהפעילה את ההתראה.
  • com.google.android.gms.nearby.discovery.fastpair.MODEL_ID – א java.lang.String שמייצג את מזהה המודל של במכשיר.

שילוב של פרוסת הגדרות

אפשר לספק פרוסות באמצעות אפליקציה נלווית כדי לשפר עוד יותר את האפשרויות הזמינות דף הגדרות Bluetooth.

SliceProvider חייב להיות מוטמע על ידי אפליקציה נלווית כדי לספק את פלחי ההגדרות האלה. יש יש 2 סוגי פרוסות: פרוסת 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ב מאפשרים לשירות ההתאמה המהירה לאמת שהוא מתקשר עם האפליקציה הנכונה:

Intent של עדכון הקושחה

כשגרסת הקושחה של המכשיר המחובר היא לא עדכנית, או במקרה כזה אחרת מגרסת הקושחה שהוגדרה במסוף המכשיר, התכונה 'התאמה מהירה' תשלח הודעה לאפליקציה הנלווית באמצעות כוונת רכישה אחת (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 אם הוצגה התראה בהתאמה המהירה