دمج التطبيق المصاحب للإقران السريع

تتيح ميزة "الإقران السريع" دمج التطبيقات المصاحبة للمصنّع الأصلي للجهاز في تجربة الإقران والاستخدام. هناك العديد من نقاط الدمج التي يمكن استخدامها اختياريًا لجذب المستخدمين بعد الانتهاء من "الإقران السريع".

التركيبة أثناء عملية النقل الجاهزة (OOBE)

تتيح ميزة "الإقران السريع" للمستخدمين تنزيل التطبيق المصاحب لسماعة الرأس كخطوة أخيرة في مرحلة الاستخدام خارج الصندوق (OOBE). يتم عرض ذلك للمستخدم في إشعار يخبره بأن الإقران قد انتهى وأن بإمكانه تنزيل التطبيق إذا لم يكن مثبتًا من قبل، أو فتحه وبدء استخدامه.

لبدء استخدام هذه الميزة، عليك إضافة اسم حزمة التطبيق المصاحب إلى تفاصيل الجهاز على وحدة التحكّم.

تتضمّن التطبيقات المصاحبة التي تم إطلاقها من خلال ميزة "الإقران السريع" عنصر بيانات إضافيًا، وهو:

دمج شريحة الإعدادات

يمكن توفير الشرائح بواسطة تطبيق مصاحب لتحسين الخيارات المتاحة في صفحة إعدادات البلوتوث للجهاز.

يجب تنفيذ 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 للسماح لخدمة "الإقران السريع" بالتحقق من اتصالها بالتطبيق الصحيح:

  • صلاحية مقدّم الخدمة
  • ملخص التوقيع SHA-256 العلني للتطبيقات المصاحبة

نية تحديث البرامج الثابتة

عندما يكون إصدار البرامج الثابتة في الجهاز المتصل قديمًا أو إذا كان يتحدّث بالدقة عن إصدار البرامج الثابتة الذي تم ضبطه في وحدة تحكّم الجهاز، سترسل ميزة "الإقران السريع" إشعارًا إلى التطبيق المصاحب من خلال com.google.android.gms.nearby.fastpair.ACTION_FIRMWARE_UPDATE_BROADCAST Intent بعد التحقّق من إصدار البرامج الثابتة. يحتوي Intent على المعلومات الإضافية التالية:

  • com.google.android.gms.nearby.fastpair.EXTRA_LOCAL_FIRMWARE_VERSION، هو إصدار البرامج الثابتة للجهاز المتصل
  • com.google.android.gms.nearby.fastpair.EXTRA_UPDATE_NOTIFICATION_SHOWN، يتم الضبط على true إذا عرضت ميزة "الإقران السريع" إشعارًا