Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Windows je ideální platformou pro aplikace třetích stran k integraci jejich nejlepších kontaktů. Tato integrace umožňuje uživatelům pracovat s postavami pro různé zážitky s lidmi. Windows teď poskytuje WinUI a další aplikace třetích stran s identitou balíčku prostřednictvím rozhraní API pro ukládání všech svých kontaktů.
Jakmile vaše aplikace ukládají své kontakty ve Windows, uživatelé budou moct tyto návrhy kontaktů zobrazit na panelu Sdílet ve Windows, aby je mohli bez problémů sdílet se svými hlavními kontakty. Další informace o panelu Sdílení najdete v tématu Jak sdílet soubory v Průzkumníku souborů ve Windows.
Vytvoření uživatelského účtu pro smlouvu People Contract
Začněte vytvořením uživatelského datového účtu. Je nutné, aby aplikace třetích stran vytvořily uživatelský účet UserDataAccount s UserDisplayName jako "com.microsoft.peoplecontract".
UserDataAccountStore udas =
await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);
UserDataAccount uda = await udas.CreateAccountAsync("com.microsoft.peoplecontract");
Dále přidejte "com.microsoft.windows.system" do seznamu ExplictReadAccessPackageFamilyNames pro účet. Tím zajistíte omezený přístup kontaktů třetích stran k prostředím Windows.
uda.ExplictReadAccessPackageFamilyNames.Add("com.microsoft.windows.system");
await uda.SaveAsync();
Ukládání kontaktů
Prvním krokem při ukládání kontaktů je vytvoření seznamu kontaktů. Aby to bylo možné, musí aplikace třetích stran vytvořit nový seznam kontaktů pro UserDataAccount v ContactStore Windows. Aplikace si můžou ponechat výchozí OtherAppReadAccess typ přístupu pro seznam kontaktů a zároveň ho nastavit tak, aby None ostatní aplikace neměly přístup k těmto kontaktům. Úplný seznam dostupných typů přístupu najdete v výčtu ContactListOtherAppReadAccess .
ContactStore store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
this.contactList = await store.CreateContactListAsync(contactListsName, uda.Id);
contactList.OtherAppReadAccess = ContactListOtherAppReadAccess.None;
await contactList.SaveAsync();
Při ukládání kontaktu musí aplikace třetích stran zahrnovat všechny relevantní informace potřebné pro využití kontaktu v prostředích systému Windows.
Při ukládání kontaktu jsou vyžadována následující pole:
FirstNameRemoteIdDisplayPicture
Následující pole jsou volitelná:
LastNamePhonesEmails
Tento fragment kódu ukazuje, jak uložit 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);
}
Poznámka:
DisplayName pro Kontakt je vytvořen pomocí FirstName a LastName. Pokud by nebylo uvedeno příjmení, DisplayName bude totožný s řetězcem zadaným pro křestní jméno.
Ukládání pořadí kontaktů
Můžete vytvořit seznam poznámek pro UserDataAccount k uložení pořadí vašich kontaktů. Aplikace můžou ukládat pořadí svých hlavních kontaktů přidáním poznámek do kontaktů. Tyto poznámky se ukládají jako součást seznamu poznámek v úložišti kontaktů.
ContactAnnotationStore annotationStore = await
ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);
this.contactAnnotationList = await annotationStore.CreateAnnotationListAsync(uda.Id);
Pořadí hlavních kontaktů můžete ukládat pomocí poznámek u kontaktů. Pořadí jsou uložena jako součást ProviderProperties na poznámce kontaktu. Spolu s pořadím musí aplikace nastavit SupportedOperations na poznámce kontaktu jako 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);
}
Aktualizace pořadí kontaktů
Je na uvážení aplikací, kdy aktualizovat pořadí kontaktů uložených ve Windows. Systém Windows doporučuje pravidelně aktualizovat seřazené seznamy, aby poskytovaly co nejlepší uživatelské prostředí. Kdykoli potřebujete aktualizovat seřazený seznam, budete muset provést několik kroků.
Odstraňte ContactAnnotationList.
Jakmile má aplikace aktualizovaný seznam hlavních kontaktů, můžete seznam poznámek odstranit a vytvořit nový seznam poznámek s aktualizovanými poznámkami pro jejich nejlepší kontakty.
await this.contactAnnotationList.DeleteAsync();Vytvořte nové
ContactAnnotationList. Podle pokynů v části Ukládání pořadí kontaktů vytvořte nový seznam poznámek a uložte pořadí pro vaše nejlepší kontakty.
Osvědčené postupy pro řazení
Pokud chcete maximalizovat relevanci kontaktů své aplikace v řádku návrhů na panelu Sdílet, postupujte podle těchto zásad řazení:
Seřadit podle aktuálnosti a četnosti
Výpočet pořadí jako kombinace:
- Aktuálnost: Kdy uživatel naposledy komunikoval s jednotlivými kontakty
- Frekvence: Jak často uživatel komunikuje s jednotlivými kontakty
Například kontakt, kterému uživatel včera poslal zprávu, může mít hodnocení 95, zatímco kontakt, kterému uživatel poslal zprávu před 2 týdny, může mít hodnocení 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;
}
Odebrání zastaralých kontaktů
Kontakty, se kterými uživatel během 30 dnů nepracuje, by se měly výrazně odebrat nebo snížit pořadí. Díky tomu budou návrhy aktuální a relevantní:
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);
}
}
}
}
Pravidelně aktualizujte hodnocení
Naplánujte aktualizace pořadí podle tempa, které dává smysl pro vaši aplikaci – denně pro aplikace pro zasílání zpráv, týdenní pro e-mail nebo měsíční aplikace kalendáře. V případě potřeby použijte úlohy na pozadí:
// Example: Update ranks when the app comes to foreground or on a timer
private async void UpdateRanksOnAppActivated()
{
var topContacts = GetTopContactsByRecentActivity(50);
await UpdateAnnotationRanksAsync(topContacts);
}
Ochrana osobních údajů a souhlas
Přispívejte pouze výslovně zadané kontakty
Vaše aplikace by měla přispívat jenom kontakty, které uživatel explicitně přidal nebo autorizoval. Nikdy:
- Nahrání celého adresáře
- Automatická synchronizace kontaktů bez souhlasu uživatele
- Sdílení kontaktů z podnikových adresářů bez explicitního oprávnění
Před uložením kontaktů v systému Lidé požádejte o oprávnění:
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;
}
Respektovat nastavení ochrany osobních údajů uživatele
Umožnit uživatelům:
- Výběr kontaktů, které se mají sdílet s Windows
- Odhlášení z integrace osob
- Odstranění kontaktů z Windows kdykoli
// Provide a setting to disable sync
if (this.ShouldSyncContactsWithWindows)
{
await SyncContactsAsync();
}
else
{
// Clear contacts if the user disables sync
await ClearWindowsContactsAsync();
}
Integrace se sdíleným listem
Když své kontakty seřadíte a budete je spravovat podle výše uvedených pokynů, uživatelé uvidí nejčastější kontakty vaší aplikace v řádku návrhů na panelu Sdílení ve Windows. Tato cesta aktuálně podporuje kontakty lidí.
Pokud chcete zajistit, aby se vaše kontakty zobrazily:
- Vytvořte
UserDataAccountpomocíDisplayName = "com.microsoft.peoplecontract" - Ukládání kontaktů s požadovanými poli (
FirstName,RemoteId,DisplayPicture) - Vytvořit
ContactAnnotationLists pořadími - Nastavit
SupportedOperations = Shareu každé poznámky - Pravidelně aktualizovat pořadí na základě aktuálnosti a četnosti.
- Vyřazení zastaralých kontaktů po 30+ dnech
Úplného průvodce integrací Share Sheetu najdete v tématu Sdílení obsahu z aplikace a v tématu Příjem obsahu v aplikaci.
Související obsah
Windows developer