Kontakte für Windows Share einstufen

Apps können Rangfolgen für ihre wichtigsten Kontakte bereitstellen, indem sie Kontaktanmerkungen für Windows Share hinzufügen. Dieser Artikel behandelt das Erstellen einer Anmeldungsliste, das Speichern von Reihenfolgen mit dem Share Vorgang, das Aktualisieren der Rangliste und die Best Practices bei Reihenfolgen.

Bevor Sie beginnen, fügen Sie Ihre Kontakte zu Windows hinzu.

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 this.contactAnnotationList.TrySaveAnnotationAsync(annotation);
}

Referenzwert für Rang

Aspect Guidance
Eigenschaftsschlüssel "Rank" Im Wörterbuch ProviderProperties der Anmerkung
Werttyp Nicht negative ganze Zahl.
Richtung Niedrigere Werte haben Vorrang innerhalb der Liste Ihrer App. Ein Rang von 0 ist nicht „Ignorieren”; er folgt derselben Reihenfolge, bei der Werte mit niedrigerem Wert zuerst aufgeführt werden.
Eindeutigkeit Weisen Sie jedem Kontakt in Ihrer Liste einen eindeutigen Rang zu. Das Verhalten für doppelte Ränge ist nicht festgelegt.
Bereich Die Ränge Ihrer App geben nur innerhalb Ihrer eigenen Liste die Priorität an. Windows liest alle Share Anmerkungen und verwendet interne Logik basierend auf der Verwendung, um Kontakte über Apps hinweg anzuordnen. Das Lesen aller Anmerkungen ist unabhängig davon, wie viele Vorschläge Windows anzeigt.
Wer definiert den Wert Ihre App. Wählen Sie aus, wie es berechnet werden soll, z. B. aus Aktualität und der Häufigkeit der Interaktion.

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.

Bewährte Methoden für die Bewertung

Um die Relevanz der Kontakte Ihrer App in der Vorschlagszeile des Share Sheet zu maximieren, befolgen Sie diese Rankingprinzipien:

Nach Aktualität und Häufigkeit sortieren

Berechnen Sie den Rang als Kombination aus:

  • Reency: Wann der Benutzer zuletzt mit jedem Kontakt interagiert hat
  • Häufigkeit: Wie oft der Benutzer mit jedem Kontakt interagiert

Da niedrigere Rangfolgen Vorrang haben, sortieren Sie Ihre Kontakte nach der Punktzahl von der höchsten zur niedrigsten Punktzahl und weisen Rang 1, 2, 3 usw. zu. Beispielsweise kann ein Kontakt, den der Benutzer gestern angeschrieben hat, den Rang 1 erhalten, während ein Kontakt, der vor 2 Wochen angeschrieben wurde, den Rang 5 erhält.

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

Entfernen veralteter Kontakte

Kontakte, mit denen der Benutzer seit 30 oder mehr Tagen nicht interagiert hat, sollten aus Ihrer Rangliste entfernt werden. Dies hält Vorschläge frisch und relevant:

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

Regelmäßiges Aktualisieren von Rangfolgen

Planen Sie Bewertungsupdates für eine Häufigkeit, die für Ihre App sinnvoll ist – täglich für Messaging-Apps, wöchentlich für E-Mail oder monatlich für Kalender-Apps. Verwenden Sie bei Bedarf Hintergrundaufgaben:

// Example: Update ranks when the app comes to foreground or on a timer
private async void UpdateRanksOnAppActivated()
{
    var topContacts = GetTopContactsByRecentActivity(50);
    await UpdateAnnotationRanksAsync(topContacts);
}

Prüfliste für die Zeile "Vorschläge"

Wenn Sie Ihre Kontakte gemäß den obigen Hinweisen bewerten und verwalten, werden Benutzer die Topkontakte Ihrer App in der Zeile „Vorschläge“ des Windows-Freigabeblatts sehen. Dieser Pfad unterstützt derzeit Kontakte von Personen.

So stellen Sie sicher, dass Ihre Kontakte angezeigt werden:

  1. Erstellen Sie ein UserDataAccount mit DisplayName = "com.microsoft.peoplecontract"
  2. Speichern von Kontakten mit erforderlichen Feldern (FirstName, RemoteId, DisplayPicture)
  3. Erstellen Sie eine ContactAnnotationList mit Rangfolgen (niedrigere Werte haben Vorrang)
  4. Legen Sie SupportedOperations = Share für jede Annotation fest.
  5. Rangfolgen regelmäßig anhand von Aktualität und Häufigkeit aktualisieren
  6. Kontakte aus Ihrer Rangliste entfernen, mit denen der Benutzer seit über 30 Tagen nicht interagiert hat

Siehe Inhalte aus Ihrer App teilen und Inhalte in Ihrer App empfangen für die vollständige Anleitung zur Integration des Share Sheet.