Freigeben über


Geräteübergreifende Personen-API

Windows ist eine ideale Plattform für Apps von Drittanbietern, um ihre wichtigsten Kontakte zu integrieren. Mit dieser Integration können Benutzer mit den Charakteren für verschiedene Erlebnisse interagieren. Windows bietet jetzt WinUI 3, UWP und andere Apps von Drittanbietern mit Paketidentität mit APIs zum Speichern aller ihrer Kontakte.

Sobald Ihre Apps ihre Kontakte in Windows speichern, können Benutzer diese Kontaktvorschläge im Bereich "Freigeben " in Windows anzeigen, um sie nahtlos mit ihren wichtigsten Kontakten zu teilen. Weitere Informationen zum Fenster Freigabe finden Sie unter Dateien im Datei-Explorer unter Windows freigeben.

Einen UserDataAccount for People-Vertrag erstellen

Erstellen Sie zunächst ein Benutzerkonto. Apps von Drittanbietern sind erforderlich, um ein UserDataAccount mit UserDisplayName als "com.microsoft.peoplecontract" zu erstellen.

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

Fügen Sie als nächstes "com.microsoft.windows.system" zur Liste der ExplictReadAccessPackageFamilyNames für das Konto hinzu. Dadurch wird der eingeschränkte Zugriff von Kontakten von Drittanbietern auf Windows-Erfahrungen ermöglicht.

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

Speichern von Kontakten

Der erste Schritt beim Speichern von Kontakten besteht darin, eine Kontaktliste zu erstellen. Drittanbieter-Apps müssen dazu die neue Kontaktliste für einen UserDataAccount im Windows ContactStore erstellen. Apps können den Standard-Zugriffstyp OtherAppReadAccess für die Kontaktliste beibehalten. Wenn sie auf None gesetzt wird, wird verhindert, dass andere Apps Zugriff auf diese Kontakte haben. Eine vollständige Liste der verfügbaren Zugriffstypen finden Sie in ContactListOtherAppReadAccess.

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

Beim Speichern eines Kontakts müssen Apps von Drittanbietern alle relevanten Informationen enthalten, die für Windows-Erfahrungen erforderlich sind, um einen Kontakt zu unterstützen.

Die folgenden Felder sind beim Speichern eines Kontakts erforderlich:

  • FirstName
  • RemoteId
  • DisplayPicture

Folgende Felder sind optional:

  • LastName
  • Phones
  • Emails

Dieser Codeausschnitt veranschaulicht, wie ein Kontakt gespeichert wird:

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

Hinweis

Der DisplayName für den Kontakt wird mit FirstName und LastName erstellt. Wenn der Nachname nicht angegeben wird, DisplayName entspricht die für den Vornamen angegebene Zeichenfolge.

Speichern von Rangfolgen für Kontakte

Sie können eine Anmerkungsliste für die UserDataAccount erstellen, um Rangfolgen Ihrer Kontakte zu speichern. Apps können Rangfolgen für ihre wichtigsten Kontakte speichern, indem Sie den Kontakten Anmerkungen hinzufügen. Diese Anmerkungen werden als Teil einer Anmerkungsliste im Kontaktspeicher gespeichert.

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

Sie können Rangfolgen für Ihre obersten Kontakte speichern, indem Sie die Anmerkungen zu Kontakten verwenden. Ränge werden als Teil von ProviderProperties auf einer Kontaktanmerkung gespeichert. Zusammen mit dem Rang müssen Apps die SupportedOperations in einer Kontaktanmerkung als Share festlegen.

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

Aktualisierung der Kontaktränge

Es liegt im Ermessen von Apps, wann die Rangfolge der in Windows gespeicherten Kontakte aktualisiert werden soll. Windows empfiehlt, dass bewertete Listen regelmäßig aktualisiert werden, um die beste Benutzererfahrung zu bieten. Wenn Sie eine Rangliste aktualisieren müssen, müssen Sie mehrere Schritte ausführen.

  1. Löschen Sie die ContactAnnotationList.

    Sobald die App über eine aktualisierte Liste der obersten Kontakte verfügt, kann die Anmerkungsliste gelöscht werden, und eine neue Anmerkungsliste mit aktualisierten Anmerkungen für ihre wichtigsten Kontakte kann erstellt werden.

    await this.contactAnnotationList.DeleteAsync();
    
  2. Erstellen Sie ein neues ContactAnnotationList-Element. Führen Sie die Schritte im Abschnitt "Speichern von Einstufungen für Kontakte " aus, um eine neue Anmerkungsliste zu erstellen und Rangfolgen für Ihre wichtigsten Kontakte zu speichern.