Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Windows är en idealisk plattform för appar från tredje part för att integrera kontakter med de främsta personerna. Den här integreringen gör det möjligt för användare att interagera med personas för olika personers upplevelser. Windows tillhandahåller nu WinUI från tredje part och andra appar med paketidentitet med API:er för att lagra alla sina kontakter.
När dina appar har lagrat sina kontakter i Windows kan användarna se dessa kontaktförslag på panelen Dela i Windows för att sömlöst dela med sina främsta kontakter. Mer information om panelen Dela finns i Dela filer i Utforskaren i Windows.
Skapa ett användarkonto för personkontrakt
Börja med att skapa ett användarkonto. Det krävs appar från tredje part för att skapa ett UserDataAccount med UserDisplayName som "com.microsoft.peoplecontract".
UserDataAccountStore udas =
await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);
UserDataAccount uda = await udas.CreateAccountAsync("com.microsoft.peoplecontract");
Lägg sedan till "com.microsoft.windows.system" i listan över ExplictReadAccessPackageFamilyNames för kontot. Detta ger begränsad åtkomst för kontakter från tredje part till Windows-upplevelser.
uda.ExplictReadAccessPackageFamilyNames.Add("com.microsoft.windows.system");
await uda.SaveAsync();
Lagra kontakter
Det första steget i att lagra kontakter är att skapa en kontaktlista. För att göra detta måste appar från tredje part skapa den nya kontaktlistan för en UserDataAccount i Windows ContactStore. Appar kan välja att behålla standardåtkomsttypen OtherAppReadAccess för kontaktlistan, men om du ställer in den None på kommer andra appar inte att ha åtkomst till dessa kontakter. Se ContactListOtherAppReadAccess-uppräkningen för den fullständiga listan över tillgängliga åtkomsttyper.
ContactStore store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
this.contactList = await store.CreateContactListAsync(contactListsName, uda.Id);
contactList.OtherAppReadAccess = ContactListOtherAppReadAccess.None;
await contactList.SaveAsync();
När du lagrar en kontakt måste appar från tredje part innehålla all relevant information som krävs för att Windows-upplevelser ska kunna driva en kontakt.
Följande fält krävs när du lagrar en kontakt:
FirstNameRemoteIdDisplayPicture
Följande fält är valfritt.
LastNamePhonesEmails
Det här kodfragmentet visar hur du lagrar en kontakt:
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);
}
Anmärkning
DisplayName konstrueras för kontakten med hjälp av FirstName och LastName. Om efternamnet inte anges DisplayName är det identiskt med strängen som anges för förnamnet.
Lagra rangordningar för kontakter
Du kan skapa en annoteringslista för UserDataAccount för att lagra rangordningar för dina kontakter. Appar kan lagra rangordningar för sina främsta kontakter genom att lägga till anteckningar i kontakterna. Dessa anteckningar lagras som en del av en anteckningslista i kontaktarkivet.
ContactAnnotationStore annotationStore = await
ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);
this.contactAnnotationList = await annotationStore.CreateAnnotationListAsync(uda.Id);
Du kan lagra rangordningar för dina främsta kontakter med hjälp av anteckningarna på kontakter. Rangordningar lagras som en del av ProviderEgenskaper på en kontaktanteckning. Tillsammans med rangordningen måste appar ange SupportedOperations på en kontaktanteckning som 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);
}
Uppdatera kontaktleden
Det är efter apparnas gottfinnande när du ska uppdatera rangordningen för de kontakter som lagras i Windows. Windows rekommenderar att rangordnade listor uppdateras regelbundet för att ge bästa möjliga användarupplevelse. När du behöver uppdatera en rangordnad lista måste du följa flera steg.
Ta bort ContactAnnotationList.
När appen har en uppdaterad lista över de vanligaste kontakterna kan anteckningslistan tas bort och en ny anteckningslista med uppdaterade anteckningar för de översta kontakterna kan skapas.
await this.contactAnnotationList.DeleteAsync();Skapa en ny
ContactAnnotationList. Följ stegen i avsnittet Lagra rangordningar för kontakter för att skapa en ny anteckningslista och lagra rangordningar för dina främsta kontakter.
Metodtips för rangordning
Om du vill maximera relevansen för appens kontakter på raden Share Sheet-förslag följer du dessa rankningsprinciper:
Sortera efter aktualitet och frekvens
Beräkna rangordning som en kombination av:
- Svarstid: När användaren senast interagerade med varje kontakt
- Frekvens: Hur ofta användaren interagerar med varje kontakt
Till exempel kan en kontakt som användaren skickade ett meddelande till igår ha rankningen 95, medan en kontakt som användaren skickade ett meddelande till för 2 veckor sedan kan ha rankningen 60.
// lastInteraction and interactionCount come from your app's own interaction
// telemetry. The Windows Contact class does not expose interaction history.
private int CalculateRank(DateTime lastInteraction, int interactionCount)
{
TimeSpan daysSinceLastInteraction = DateTime.Now - lastInteraction;
int frequencyScore = interactionCount * 10; // Max ~100
int recencyScore = Math.Max(0, 100 - (daysSinceLastInteraction.Days * 3));
return (recencyScore + frequencyScore) / 2;
}
Ta bort inaktuella kontakter
Kontakter som användaren inte har interagerat med på över 30 dagar bör tas bort eller rangordnas ned avsevärt. Detta håller förslagen fräscha och relevanta:
private async Task PruneStaleContactsAsync()
{
var now = DateTime.Now;
var staleCutoff = now.AddDays(-30);
foreach (var contact in this.AllTrackedContacts)
{
if (contact.LastInteractionDate < staleCutoff)
{
// Remove the annotation or set rank to 0
var annotation = await GetAnnotationForContactAsync(contact);
if (annotation != null)
{
annotation.ProviderProperties["Rank"] = 0;
await this.contactAnnotationList.TrySaveAnnotationAsync(annotation);
}
}
}
}
Uppdatera rangordningar regelbundet
Schemalägg rankningsuppdateringar på en takt som passar din app – dagligen för meddelandeappar, varje vecka för e-post eller månadsvis för kalenderappar. Använd bakgrundsuppgifter om det behövs:
// Example: Update ranks when the app comes to foreground or on a timer
private async void UpdateRanksOnAppActivated()
{
var topContacts = GetTopContactsByRecentActivity(50);
await UpdateAnnotationRanksAsync(topContacts);
}
Sekretess och medgivande
Bidra endast med explicita kontakter
Appen bör endast bidra med de kontakter som användaren uttryckligen har lagt till eller godkänt. Aldrig:
- Ladda upp hela adressboken
- Synkronisera kontakter automatiskt utan användarens medgivande
- Dela kontakter från företagskataloger utan uttryckligt tillstånd
Be om behörighet innan du lagrar kontakter i personsystemet:
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;
}
Respektera inställningar för användarsekretess
Låt användare:
- Välj vilka kontakter som ska delas med Windows
- Avregistrera dig från personintegrering
- Ta bort sina kontakter från Windows när som helst
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
await SyncContactsAsync();
}
else
{
// Clear contacts if the user disables sync
await ClearWindowsContactsAsync();
}
Integration med delningspanelen
När du rangordnar och underhåller dina kontakter med vägledningen ovan ser användarna appens främsta kontakter på förslagsraden i Windows Share Sheet. Denna sökväg stöder för närvarande People-kontakter.
Så här ser du till att dina kontakter visas:
- Skapa en
UserDataAccountmedDisplayName = "com.microsoft.peoplecontract" - Lagra kontakter med obligatoriska fält (
FirstName,RemoteId,DisplayPicture) - Skapa en
ContactAnnotationListmed rangordning - Ange
SupportedOperations = Shareför varje anteckning - Uppdatera rankningar regelbundet baserat på aktualitet och frekvens
- Rensa inaktuella kontakter efter 30+ dagar
Se Dela innehåll från din app och Ta emot innehåll i din app för den fullständiga integreringsguiden för Share Sheet.
Relaterat innehåll
Windows developer