Classifica i contatti per Windows Share

Le app possono fornire classificazioni per i contatti principali aggiungendo annotazioni di contatto per Windows Share. Questo articolo illustra la creazione di un elenco di annotazioni, l'archiviazione dei ranking con l'operazione Share, l'aggiornamento dell'elenco classificato e le procedure consigliate per la classificazione.

Prima di iniziare, aggiungi i tuoi contatti in Windows.

Archiviazione delle classificazioni per i contatti

È possibile creare un elenco di annotazioni per il UserDataAccount per archiviare le classificazioni dei contatti. Le app possono archiviare le classificazioni per i contatti principali aggiungendo annotazioni ai contatti. Queste annotazioni vengono archiviate come parte di un elenco di annotazioni nell'archivio contatti.

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

È possibile archiviare le classificazioni per i contatti principali usando le annotazioni sui contatti. Le classificazioni vengono archiviate come parte di ProviderProperties in un'annotazione del contatto. Oltre alla classificazione, le app devono impostare SupportedOperations su un'annotazione del contatto come 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);
}

Riferimento del valore di classificazione

Aspect Linee guida
Chiave della proprietà "Rank" nel dizionario dell'annotazione ProviderProperties
Tipo di valore Numero intero non negativo.
Direction I valori inferiori hanno la precedenza all'interno dell'elenco dell'app. Una priorità pari a 0 non è "ignore"; segue lo stesso ordinamento in ordine crescente di valore.
Univocità Assegnare una classificazione univoca a ogni contatto nell'elenco. Il comportamento per i ranghi duplicati non è specificato.
Scope Le posizioni della tua app esprimono la priorità solo all'interno del tuo elenco. Windows legge tutte le Share annotazioni e usa la logica interna in base all'utilizzo per ordinare i contatti tra le app. La lettura di tutte le annotazioni è separata da quanti suggerimenti visualizza Windows.
Chi definisce il valore L'app. Scegliere come calcolarlo, ad esempio dalla recency e dalla frequenza di interazione.

Aggiornamento delle classificazioni dei contatti

È a discrezione delle app quando aggiornare i ranghi dei contatti archiviati in Windows. Windows consiglia di aggiornare regolarmente gli elenchi classificati per offrire un'esperienza utente ottimale. Ogni volta che è necessario aggiornare un elenco classificato, è necessario seguire diversi passaggi.

  1. Elimina il ContactAnnotationList.

    Dopo che l'app ha un elenco aggiornato dei contatti principali, è possibile eliminare l'elenco di annotazioni e creare un nuovo elenco di annotazioni con annotazioni aggiornate per i contatti principali.

    await this.contactAnnotationList.DeleteAsync();
    
  2. Creare un nuovo ContactAnnotationList. Seguire la procedura descritta nella sezione Archiviazione delle classificazioni per i contatti per creare un nuovo elenco di annotazioni e archiviare le classificazioni per i contatti principali.

Procedure consigliate per la classificazione

Per massimizzare la pertinenza dei contatti della tua app nella riga dei suggerimenti del pannello di condivisione, segui questi principi di ranking:

Ordina per data recente e frequenza

Calcolare la classificazione come combinazione di:

  • Recency: Quando l'utente ha interagito l'ultima volta con ciascun contatto
  • Frequenza: frequenza con cui l'utente interagisce con ogni contatto

Poiché i valori di rango inferiore hanno la precedenza, ordinare i contatti in base al punteggio dal più alto al più basso e assegnare classificazioni 1, 2, 3 e così via. Ad esempio, un contatto a cui l'utente ha inviato un messaggio ieri potrebbe ottenere la classificazione 1, mentre un contatto contattato 2 settimane fa potrebbe ottenere il rango 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));

Rimuovere i contatti non aggiornati

I contatti con cui l'utente non ha interagito in più di 30 giorni devono essere rimossi dall'elenco ordinato. In questo modo i suggerimenti vengono aggiornati e pertinenti:

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

Aggiornare regolarmente i ranghi

Pianificare gli aggiornamenti delle classificazioni in base a una cadenza appropriata per l'app: giornaliera per le app di messaggistica, settimanale per la posta elettronica o mensile per le app del calendario. Usare le attività in background, se necessario:

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

Elenco di controllo per la riga dei suggerimenti

Quando si classificano e si mantengono i contatti con le indicazioni precedenti, gli utenti visualizzeranno i contatti principali dell'app nella riga dei suggerimenti del foglio di condivisione Windows. Questo percorso supporta attualmente i contatti di Persone.

Per assicurarsi che i contatti vengano visualizzati:

  1. Crea un UserDataAccount con DisplayName = "com.microsoft.peoplecontract"
  2. Archiviare i contatti con i campi obbligatori (FirstName, RemoteId, DisplayPicture)
  3. Creare un ContactAnnotationList oggetto con classificazioni (i valori inferiori hanno la precedenza)
  4. Imposta SupportedOperations = Share su ogni annotazione
  5. Aggiorna regolarmente le classifiche in base alla frequenza e alla data più recente
  6. Rimuovere i contatti con cui l'utente non ha interagito in più di 30 giorni dall'elenco classificato

Per la guida completa all'integrazione del foglio di condivisione, vedi Condividere contenuto dall'app e Ricevere contenuto nella tua app .