Поделиться через


API пользователей между устройствами

Windows — это идеальная платформа для сторонних приложений для интеграции своих лучших контактов пользователей. Эта интеграция позволяет пользователям взаимодействовать с персонажами для различных впечатлений от взаимодействия с людьми. Windows теперь предоставляет сторонние приложения WinUI и другие приложения с удостоверением пакета с API для хранения всех контактов.

После того как ваши приложения сохранят контакты в Windows, пользователи смогут просматривать эти предложения контактов на панели Поделиться в Windows, чтобы легко делиться с ведущими контактами. Для получения дополнительной информации о панели "Общий доступ" см. Как делиться файлами в Проводнике Windows.

Создание учетной записи UserDataAccount для взаимодействия с пользователями

Начните с создания учетной записи данных пользователя. Сторонние приложения необходимы для создания UserDataAccount с UserDisplayName как "com.microsoft.peoplecontract".

UserDataAccountStore udas =
    await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);
UserDataAccount uda = await udas.CreateAccountAsync("com.microsoft.peoplecontract");

Затем добавьте "com.microsoft.windows.system" в список ExplictReadAccessPackageFamilyNames для учетной записи. Это обеспечит ограниченный доступ сторонних контактов к интерфейсам Windows.

uda.ExplictReadAccessPackageFamilyNames.Add("com.microsoft.windows.system");
await uda.SaveAsync();

Хранение контактов

Первым шагом в хранении контактов является создание списка контактов. Для этого сторонние приложения должны создать новый список контактов в UserDataAccount Windows ContactStore. Приложения могут сохранить тип доступа по умолчанию OtherAppReadAccess для списка контактов, а установка в None предотвратит доступ к этим контактам для других приложений. Полный список доступных типов доступа см. в перечислении ContactListOtherAppReadAccess.

ContactStore store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
this.contactList = await store.CreateContactListAsync(contactListsName, uda.Id);
contactList.OtherAppReadAccess = ContactListOtherAppReadAccess.None;
await contactList.SaveAsync();

При сохранении контакта сторонние приложения должны включать все необходимые сведения, необходимые для работы с Windows для управления контактом.

При хранении контакта требуются следующие поля:

  • FirstName
  • RemoteId
  • DisplayPicture

Следующие поля необязательные:

  • LastName
  • Phones
  • Emails

В этом фрагменте кода показано, как сохранить контакт:

foreach (var appContact in AppContacts)
{
  var cont = new Contact
  {
    FirstName = appContact.FirstName,
    LastName = appContact.LastName,
    RemoteId = appContact.Id,
    SourceDisplayPicture = RandomAccessStreamReference.CreateFromUri(new Uri(appContact.ProfilePicPath)),
    Phones = { new ContactPhone { Number = appContact.Phone } }
  };

  await this.contactList.SaveContactAsync(cont);
}

Примечание.

DisplayNameКонтакт создается с помощью FirstName иLastName. Если фамилия не указана, DisplayName будет идентична строке, предоставленной для первого имени.

Хранение рангов для контактов

Вы можете создать список аннотаций для UserDataAccount хранения рангов ваших контактов. Приложения могут сохранять рейтинги для своих лучших контактов, добавляя аннотации к контактам. Эти заметки хранятся в составе списка заметок в хранилище контактов.

ContactAnnotationStore annotationStore = await
    ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);
this.contactAnnotationList = await annotationStore.CreateAnnotationListAsync(uda.Id);

Вы можете сохранять рейтинги для лучших контактов, используя аннотации в контактах. Ранги хранятся в рамках ProviderProperties в аннотации контакта. Наряду с рангом, приложения должны установить SupportedOperations в аннотации контакта как Share.

foreach (var appContact in topAppContacts)
{
  Contact contact = await list.GetContactFromRemoteIdAsync(topAppContact.RemoteID);
  var annotation = new ContactAnnotation
  {
    ContactId = contact.Id,
    SupportedOperations = ContactAnnotationOperations.Share
  };
  annotation.ProviderProperties.Add("Rank", rank);
  await annotationsLst.TrySaveAnnotationAsync(annotation);
}

Обновление рангов контактов

Это по усмотрению приложений, когда нужно обновить ряды контактов, хранящихся в Windows. Windows рекомендует регулярно обновлять списки ранжирования, чтобы обеспечить лучший пользовательский интерфейс. Каждый раз, когда вам нужно обновить рейтинг, вам потребуется выполнить несколько шагов.

  1. Удалите ContactAnnotationList.

    После того как приложение содержит обновленный список лучших контактов, список заметок можно удалить и создать новый список заметок с обновленными заметками для их главных контактов.

    await this.contactAnnotationList.DeleteAsync();
    
  2. Создайте новый ContactAnnotationList. Выполните действия в разделе "Хранение рейтингов для контактов", чтобы создать новый список аннотаций и сохранить рейтинги для лучших контактов.