Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje mogą przypisywać rangi swoim najważniejszym kontaktom, dodając adnotacje kontaktowe dla Windows Share. W tym artykule opisano tworzenie listy adnotacji, przechowywanie rankingów za pomocą operacji Share, aktualizowanie listy rankingowej i najlepsze praktyki dotyczące rankingowania.
Przed rozpoczęciem dodaj swoje kontakty do systemu Windows.
Przechowywanie rang dla kontaktów
Możesz utworzyć listę adnotacji dla UserDataAccount elementu , aby przechowywać rangi dla kontaktów. Aplikacje mogą przechowywać rangi dla swoich najważniejszych kontaktów, dodając adnotacje do kontaktów. Te adnotacje są przechowywane jako część listy adnotacji w bazie kontaktów.
ContactAnnotationStore annotationStore = await
ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);
this.contactAnnotationList = await annotationStore.CreateAnnotationListAsync(uda.Id);
Rankingi dla najważniejszych kontaktów można przechowywać przy użyciu adnotacji w kontaktach. Rangi są przechowywane w ramach właściwości ProviderProperties w adnotacji kontaktu. Oprócz rangi aplikacje muszą ustawić SupportedOperations w adnotacji kontaktowej 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 this.contactAnnotationList.TrySaveAnnotationAsync(annotation);
}
Wartość referencyjna rangi
| Aspect | Guidance |
|---|---|
| Klucz właściwości |
"Rank"w słowniku ProviderPropertiesadnotacji |
| Typ wartości | Nieujemna liczba całkowita. |
| Direction | Niższe wartości mają pierwszeństwo na liście w Twojej aplikacji. Ranga 0 nie jest "ignorowana"; jest uporządkowana według tej samej kolejności typu lower-value-first. |
| Unikatowość | Przypisz unikatową rangę do każdego kontaktu na liście. Zachowanie w przypadku duplikujących się rang nie jest określone. |
| Scope | Pozycje Twojej aplikacji określają priorytet tylko na Twojej własnej liście. Windows odczytuje wszystkie Share adnotacje i używa logiki wewnętrznej na podstawie użycia do porządkowania kontaktów w aplikacjach. Odczytywanie wszystkich adnotacji jest niezależne od liczby sugestii wyświetlanych przez system Windows. |
| Kto definiuje wartość | Twoja aplikacja. Wybierz sposób jej obliczania, na przykład na podstawie recency i częstotliwości interakcji. |
Aktualizowanie rang kontaktów
Jest to według uznania aplikacji, kiedy należy zaktualizować szeregi kontaktów przechowywanych w systemie Windows. System Windows zaleca regularne aktualizowanie list rankingowych w celu zapewnienia najlepszych wrażeń użytkownika. Zawsze, gdy musisz zaktualizować listę sklasyfikowaną, musisz wykonać kilka kroków.
Usuń element ContactAnnotationList.
Gdy aplikacja ma zaktualizowaną listę najważniejszych kontaktów, można usunąć listę adnotacji, a można utworzyć nową listę adnotacji ze zaktualizowanymi adnotacjami dla najważniejszych kontaktów.
await this.contactAnnotationList.DeleteAsync();Utwórz nowy element
ContactAnnotationList. Wykonaj kroki opisane w sekcji Przechowywanie rang dla kontaktów , aby utworzyć nową listę adnotacji i zapisać rangi dla najważniejszych kontaktów.
Najlepsze rozwiązania dotyczące klasyfikowania
Aby zmaksymalizować trafność kontaktów w aplikacji w wierszu sugestii w arkuszu udostępniania, postępuj zgodnie z następującymi zasadami ustalania rankingu:
Ranking według aktualności i częstotliwości
Oblicz rangę jako kombinację:
- Recency: Kiedy użytkownik ostatnio wchodził w interakcję z każdym kontaktem
- Częstotliwość: jak często użytkownik wchodzi w interakcję z każdym kontaktem
Ponieważ niższe wartości rankingu mają pierwszeństwo, posortuj kontakty według wyniku od najwyższego do najniższego i przypisz rangi 1, 2, 3 itd. Na przykład kontakt, z którym użytkownik pisał wczoraj, może uzyskać rangę 1, podczas gdy kontakt, z którym użytkownik pisał 2 tygodnie temu, może uzyskać rangę 5.
// lastInteraction and interactionCount come from your app's own interaction
// telemetry. The Windows Contact class does not expose interaction history.
private int CalculateScore(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;
}
// A higher score means a more relevant contact, so it gets a lower rank value.
// Assign unique ranks 1, 2, 3, ... in descending score order.
var rankedContacts = this.AllTrackedContacts
.OrderByDescending(c => CalculateScore(c.LastInteractionDate, c.InteractionCount))
.Select((c, index) => (Contact: c, Rank: index + 1));
Usuń nieaktualne kontakty
Kontakty, z którymi użytkownik nie wchodził w interakcję w ciągu 30 dni, należy usunąć z listy rankingowej. Dzięki temu sugestie są świeże i istotne:
// Exclude stale contacts when you rebuild the ranked list. Don't save a rank of 0
// for them: lower values take precedence, so 0 is the highest priority.
var staleCutoff = DateTime.Now.AddDays(-30);
var activeContacts = this.AllTrackedContacts
.Where(c => c.LastInteractionDate >= staleCutoff);
Regularnie aktualizuj rangę
Zaplanuj aktualizacje rangi w zakresie, który ma sens dla aplikacji — codziennie w przypadku aplikacji do obsługi wiadomości, co tydzień dla poczty e-mail lub co miesiąc dla aplikacji kalendarza. W razie potrzeby użyj zadań w tle:
// Example: Update ranks when the app comes to foreground or on a timer
private async void UpdateRanksOnAppActivated()
{
var topContacts = GetTopContactsByRecentActivity(50);
await UpdateAnnotationRanksAsync(topContacts);
}
Lista kontrolna dotycząca wiersza sugestii
Gdy uszeregujesz i będziesz aktualizować swoje kontakty zgodnie z powyższymi wskazówkami, użytkownicy zobaczą najważniejsze kontakty Twojej aplikacji w wierszu sugestii w arkuszu udostępniania systemu Windows. Ta ścieżka obecnie obsługuje kontakty z aplikacji People.
Aby upewnić się, że kontakty są wyświetlane:
- Utwórz
UserDataAccountza pomocąDisplayName = "com.microsoft.peoplecontract" - Przechowuj kontakty z wymaganymi polami (
FirstName,RemoteId,DisplayPicture) - Utwórz element
ContactAnnotationListz rangami (niższe wartości mają pierwszeństwo) - Ustaw
SupportedOperations = Sharedla każdej adnotacji - Regularnie aktualizuj rankingi na podstawie aktualności i częstotliwości
- Usuń kontakty, z którymi użytkownik nie wchodził w interakcję od 30 dni lub dłużej z listy rankingowej
Pełny przewodnik integracji z Share Sheet znajdziesz w sekcjach Udostępnianie zawartości z aplikacji i Odbieranie zawartości w aplikacji.