Aggiungere contatti a Windows

Le app con identità del pacchetto possono archiviare i propri contatti in Windows. Questi contatti possono essere visualizzati come suggerimenti nel widget Persone, Windows Search e nel foglio di condivisione. Questo articolo illustra come creare un account dei dati utente, archiviare i contatti e configurare l'accesso per le esperienze di Windows.

Creare un UserDataAccount per il contratto People

Per iniziare, creare un account dati utente. Le app di terze parti devono essere utilizzate per creare un UserDataAccount con UserDisplayName come "com.microsoft.peoplecontract".

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

Quindi, aggiungi "com.microsoft.windows.system" all'elenco dei ExplicitReadAccessPackageFamilyNames per l'account. In questo modo verrà fornito l'accesso limitato dei contatti di terze parti alle esperienze di Windows.

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

Archiviazione dei contatti

Il primo passaggio nell'archiviazione dei contatti consiste nel creare un elenco contatti. A tale scopo, le app di terze parti devono creare il nuovo elenco contatti per un UserDataAccount oggetto in Windows ContactStore. Le app possono scegliere di mantenere il tipo di accesso predefinito OtherAppReadAccess per l'elenco contatti, impostandolo su None impedisce ad altre app di avere accesso a questi contatti. Per l'elenco completo dei tipi di accesso disponibili, vedere l'enumerazione ContactListOtherAppReadAccess .

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

Durante l'archiviazione di un contatto, le app di terze parti devono includere tutte le informazioni rilevanti necessarie per consentire alle esperienze di Windows di attivare un contatto.

Quando si archivia un contatto, sono necessari i campi seguenti:

  • FirstName
  • RemoteId
  • DisplayPicture

I campi seguenti sono facoltativi:

  • LastName
  • Phones
  • Emails

Questo frammento di codice illustra come archiviare un contatto:

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

L'oggetto DisplayName per il contatto viene costruito utilizzando FirstName e LastName. Se il cognome non viene specificato, DisplayName sarà identico alla stringa specificata per il nome.

Aggiungi solo contatti esplicitamente specificati

L'app deve contribuire solo ai contatti che l'utente ha aggiunto o autorizzato in modo esplicito. Mai:

  • Caricare l'intera rubrica
  • Sincronizzazione automatica dei contatti senza consenso dell'utente
  • Condividi i contatti dalle directory aziendali senza autorizzazione esplicita

Chiedere l'autorizzazione prima di archiviare i contatti in 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;
}

Rispettare le impostazioni di privacy degli utenti

Consenti agli utenti di:

  • Scegliere i contatti da condividere con Windows
  • Disattivare l'integrazione con Windows People
  • Eliminare i contatti da Windows in qualsiasi momento
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
    await SyncContactsAsync();
}
else
{
    // Clear contacts if the user disables sync
    await ClearWindowsContactsAsync();
}