Добавление контактов в Windows

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

Создайте объект UserDataAccount для контракта People

Начните с создания учетной записи данных пользователя. Сторонние приложения необходимы для создания 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);
}

Note

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

Добавляйте только явно указанные контакты

Ваше приложение должно внести только те контакты, которые пользователь явно добавил или авторизован. Никогда:

  • Отправка всей адресной книги
  • Автоматически синхронизировать контакты без согласия пользователя
  • Предоставление общего доступа к контактам из корпоративных каталогов без явного разрешения

Попросите разрешение перед хранением контактов в Windows "Люди":

private async Task<bool> RequestContactStoreAccessAsync()
{
    // Requesting a writable ContactStore prompts the user for consent.
    // Your app must declare the contacts capability in its manifest.
    ContactStore store = await ContactManager.RequestStoreAsync(
        ContactStoreAccessType.AppContactsReadWrite);
    return store != null;
}

Соблюдение параметров конфиденциальности пользователей

Разрешить пользователям:

  • Выбор контактов для совместного использования с Windows
  • Отключить интеграцию Windows "Люди"
  • Удаление контактов из Windows в любое время
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
    await SyncContactsAsync();
}
else
{
    // Clear contacts if the user disables sync
    await ClearWindowsContactsAsync();
}