Contribuir com contactos para o Windows

As aplicações com identidade de pacote podem armazenar os seus contactos no Windows. Estes contactos podem aparecer como sugestões no Widget de Pessoas, na Pesquisa do Windows e no Share Sheet. Este artigo mostra como criar uma conta de dados do utilizador, armazenar contactos e configurar o acesso às experiências do Windows.

Crie uma UserDataAccount para o contrato People

Comece criando uma conta de dados do usuário. Aplicações de terceiros são necessárias para criar uma UserDataAccount com UserDisplayName como "com.microsoft.peoplecontract".

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

Em seguida, adicione "com.microsoft.windows.system" à lista de ExplictReadAccessPackageFamilyNames para a conta. Isso fornecerá acesso restrito de contatos de terceiros a experiências do Windows.

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

Armazenando contatos

O primeiro passo para armazenar contatos é criar uma lista de contatos. Para fazer isso, os aplicativos de terceiros devem criar a nova lista de contatos para um UserDataAccount na Loja de Contatos do Windows. Os aplicativos podem optar por manter o tipo de acesso padrão OtherAppReadAccess para a lista de contatos, enquanto configurá-lo para None impedirá que outros aplicativos tenham acesso a esses contatos. Consulte o enum ContactListOtherAppReadAccess para obter a lista completa dos tipos de acesso disponíveis.

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

Ao armazenar um contato, os aplicativos de terceiros devem incluir todas as informações relevantes necessárias para que as experiências do Windows alimentem um Contato.

Os seguintes campos são obrigatórios ao armazenar um contato:

  • FirstName
  • RemoteId
  • DisplayPicture

Os seguintes campos são opcionais:

  • LastName
  • Phones
  • Emails

Este trecho de código demonstra como armazenar um contato:

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

O DisplayName para o contato é construído usando FirstName e LastName. Se o sobrenome não for fornecido, DisplayName será idêntico à cadeia de caracteres fornecida para o nome.

Contribua apenas com contactos explícitos

A sua aplicação deve contribuir apenas com os contactos que o utilizador adicionou ou autorizou explicitamente. Nunca:

  • Carregue toda a lista de endereços
  • Sincronização automática dos contactos sem consentimento do utilizador
  • Partilhe contactos de diretórios corporativos sem permissão explícita

Pede permissão antes de guardares contactos no Windows People:

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;
}

Respeitar as definições de privacidade do utilizador

Permitir que os utilizadores:

  • Escolha quais os contactos a partilhar com o Windows
  • Desativar a integração do Windows People
  • Apague os contactos deles do Windows a qualquer momento
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
    await SyncContactsAsync();
}
else
{
    // Clear contacts if the user disables sync
    await ClearWindowsContactsAsync();
}