การผสานรวมแอปที่ใช้ร่วมกันด่วน

การจับคู่ด่วนช่วยให้แอปที่ใช้ร่วมกันกับ OEM ผสานรวมกับประสบการณ์การจับคู่และการใช้งานได้อย่างลงตัว มีจุดผสานรวมหลายจุดที่อาจเลือกใช้เพื่อดึงดูดผู้ใช้หลังจากที่จับคู่ด่วนเสร็จแล้ว

การติดตั้งระหว่างแกะกล่อง (OOBE)

การจับคู่ด่วนช่วยให้ผู้ใช้ดาวน์โหลดแอปที่ใช้ร่วมกันสำหรับชุดหูฟังเป็นขั้นตอนสุดท้ายของประสบการณ์การใช้งานนอกกล่อง (OOBE) ซึ่งจะแสดงให้ผู้ใช้เห็นในการแจ้งเตือนที่บอกว่าจับคู่เสร็จแล้ว และผู้ใช้สามารถดาวน์โหลดแอปหากยังไม่ได้ติดตั้ง หรือเปิดแอปแล้วเริ่มใช้งานได้เลย

หากต้องการเริ่มต้นใช้งานฟีเจอร์นี้ ให้เพิ่มชื่อแพ็กเกจของแอปที่ใช้ร่วมกันลงในรายละเอียดอุปกรณ์บนคอนโซล

แอปที่ใช้ร่วมกันที่เปิดตัวโดยการจับคู่ด่วนประกอบด้วยองค์ประกอบข้อมูลเพิ่มเติมต่อไปนี้

การผสานรวมส่วนแบ่งการตั้งค่า

แอปที่ใช้ร่วมกันอาจระบุส่วนแบ่งเพื่อเพิ่มประสิทธิภาพให้กับตัวเลือกที่มีอยู่ในหน้าการตั้งค่าบลูทูธของอุปกรณ์

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 หากการจับคู่ด่วนแสดงการแจ้งเตือน