Classer les contacts pour Windows Share

Les applications peuvent fournir des classements pour leurs contacts les mieux classés en ajoutant des annotations de contact pour Windows Share. Cet article traite de la création d’une liste d’annotations, du stockage des rangs avec l’opération Share, de la mise à jour de la liste classée par rang et des meilleures pratiques de classement.

Avant de commencer, ajoutez vos contacts à Windows.

Stockage des classements pour les contacts

Vous pouvez créer une liste d’annotations pour le UserDataAccount afin d’y stocker des classements pour vos contacts. Les applications peuvent stocker les rangs de leurs principaux contacts en ajoutant des annotations aux contacts. Ces annotations sont stockées comme partie d'une liste d’annotations dans le répertoire de contacts.

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

Vous pouvez stocker les rangs de vos principaux contacts à l’aide des annotations sur les contacts. Les classements sont stockés dans ProviderProperties pour une annotation de contact. En plus du classement, les applications doivent définir SupportedOperations comme Share sur une annotation de contact.

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

Référence de la valeur de classement

Aspect Conseils
Clé de propriété "Rank"dans le dictionnaire de l’annotation ProviderProperties
Type de valeur Entier non négatif.
Direction Les valeurs inférieures sont prioritaires dans la liste de votre application. Un rang de 0 n’est pas « ignoré » ; il suit le même ordre croissant de valeur.
Unicité Attribuez un rang unique à chaque contact dans votre liste. Le comportement des rangs en double n’est pas spécifié.
Scope Les classements de votre application indiquent la priorité uniquement dans votre propre liste. Windows lit toutes les Share annotations et utilise une logique interne basée sur l’utilisation pour classer les contacts entre les applications. La lecture de toutes les annotations est distincte du nombre de suggestions Windows affichées.
Qui définit la valeur Votre application. Choisissez comment le calculer, par exemple à partir de la récence et de la fréquence d’interaction.

Mise à jour des niveaux de contact

C'est à la discrétion des applications de décider quand mettre à jour les classements des contacts stockés dans Windows. Windows recommande que les listes classées soient mises à jour régulièrement pour offrir la meilleure expérience utilisateur. Chaque fois que vous devez mettre à jour une liste classée, vous devez suivre plusieurs étapes.

  1. Supprimez ContactAnnotationList.

    Une fois que l’application a une liste mise à jour des principaux contacts, la liste d’annotations peut être supprimée et une nouvelle liste d’annotations avec des annotations mises à jour pour leurs principaux contacts peut être créée.

    await this.contactAnnotationList.DeleteAsync();
    
  2. Créez un ContactAnnotationList. Suivez les étapes décrites dans la section Stockage des rangs des contacts pour créer une liste d’annotations et stocker les rangs de vos principaux contacts.

Meilleures pratiques pour le classement

Pour optimiser la pertinence des contacts de votre application dans la ligne des suggestions de feuille de partage, suivez ces principes de classement :

Classement par récurrence et fréquence

Calculez le rang en tant que combinaison de :

  • Récurrence : quand l’utilisateur a interagité pour la dernière fois avec chaque contact
  • Fréquence : fréquence à laquelle l’utilisateur interagit avec chaque contact

Étant donné que les valeurs de classement inférieures sont prioritaires, triez vos contacts en fonction du score le plus élevé au plus bas et attribuez les rangs 1, 2, 3, et ainsi de suite. Par exemple, un contact que l’utilisateur a contacté hier peut obtenir le rang 1, tandis qu’un contact contacté il y a 2 semaines peut obtenir le 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));

Supprimer les contacts obsolètes

Les contacts avec lesquels l’utilisateur n’a pas interagi dans les 30 jours et plus doivent être supprimés de votre liste classée. Cela permet de garder les suggestions fraîches et pertinentes :

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

Mettre à jour les classements régulièrement

Planifiez les mises à jour de classement à une cadence qui est logique pour votre application : quotidienne pour les applications de messagerie, hebdomadaires pour les e-mails ou mensuelles pour les applications de calendrier. Utilisez les tâches en arrière-plan si nécessaire :

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

Liste de contrôle pour la ligne des suggestions

Lorsque vous classez et gérez vos contacts avec les conseils ci-dessus, les utilisateurs verront les principaux contacts de votre application dans la ligne suggestions de la feuille de partage Windows. Ce chemin prend actuellement en charge les contacts Personnes.

Pour vous assurer que vos contacts apparaissent :

  1. Créer un UserDataAccount avec DisplayName = "com.microsoft.peoplecontract"
  2. Stocker des contacts avec des champs obligatoires (FirstName, RemoteId, DisplayPicture)
  3. Créer un ContactAnnotationList avec des rangs (les valeurs inférieures sont prioritaires)
  4. Définir SupportedOperations = Share sur chaque annotation
  5. Mettre à jour les classements régulièrement en fonction de la récurrence et de la fréquence
  6. Supprimer les contacts avec lesquels l’utilisateur n’a pas interagi dans les 30 jours et plus de votre liste classée

Consultez Partager du contenu à partir de votre application et recevoir du contenu dans votre application pour obtenir le guide complet d’intégration de la feuille de partage.