Connettere l'app ad azioni in una scheda contatto

L'app può essere visualizzata accanto alle azioni in una scheda di contatto o in una mini scheda di contatto. Gli utenti possono scegliere l'app per eseguire un'azione come aprire una pagina del profilo, effettuare una chiamata o inviare un messaggio.

Contact card and mini contact card

Per iniziare, trovare contatti esistenti o crearne di nuovi. Creare quindi una annotazione e alcune voci del manifesto del pacchetto per descrivere le azioni supportate dall'app. Scrivere quindi il codice che esegua le azioni.

Per un esempio più completo, vedere Esempio di integrazione della scheda contatto.

Creare o aggiornare un contatto

Se l'app aiuta gli utenti a connettersi con altri utenti, cercare contatti in Windows e quindi annotarli. Se l'app gestisce i contatti, è possibile aggiungerli a un elenco contatti di Windows e annotarli.

Trovare un contatto

Trovare i contatti usando un nome, un indirizzo di posta elettronica o un numero di telefono.

ContactStore contactStore = await ContactManager.RequestStoreAsync();

IReadOnlyList<Contact> contacts = null;

contacts = await contactStore.FindContactsAsync(emailAddress);

Contact contact = contacts[0];

Creare un contatto

Se l'app è più simile a una rubrica, creare i contatti e quindi aggiungerli a un elenco di contatti.

Contact contact = new Contact();
contact.FirstName = "TestContact";

ContactEmail email = new ContactEmail();
email.Address = "TestContact@contoso.com";
email.Kind = ContactEmailKind.Other;
contact.Emails.Add(email);

ContactPhone phone = new ContactPhone();
phone.Number = "4255550101";
phone.Kind = ContactPhoneKind.Mobile;
contact.Phones.Add(phone);

ContactStore store = await
    ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

ContactList contactList;

IReadOnlyList<ContactList> contactLists = await store.FindContactListsAsync();

if (0 == contactLists.Count)
    contactList = await store.CreateContactListAsync("TestContactList");
else
    contactList = contactLists[0];

await contactList.SaveContactAsync(contact);

Contrassegnare ogni contatto con un'annotazione

Contrassegnare ogni contatto con un elenco di azioni (operazioni) che l'app può eseguire (ad esempio, videochiamate e messaggistica).

Associare quindi l'ID di un contatto a un ID usato dall'app internamente per identificare l'utente.

ContactAnnotationStore annotationStore = await
   ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);

ContactAnnotationList annotationList;

IReadOnlyList<ContactAnnotationList> annotationLists = await annotationStore.FindAnnotationListsAsync();
if (0 == annotationLists.Count)
    annotationList = await annotationStore.CreateAnnotationListAsync();
else
    annotationList = annotationLists[0];

ContactAnnotation annotation = new ContactAnnotation();
annotation.ContactId = contact.Id;
annotation.RemoteId = "user22";

annotation.SupportedOperations = ContactAnnotationOperations.Message |
  ContactAnnotationOperations.AudioCall |
  ContactAnnotationOperations.VideoCall |
 ContactAnnotationOperations.ContactProfile;

await annotationList.TrySaveAnnotationAsync(annotation);

Eseguire la registrazione per ogni operazione

Nel manifesto del pacchetto, eseguire la registrazione per ogni operazione elencata nell'annotazione.

Eseguire la registrazione aggiungendo gestori di protocollo all'elemento Extensions del manifesto.

<Extensions>
  <uap:Extension Category="windows.protocol">
    <uap:Protocol Name="ms-contact-profile">
      <uap:DisplayName>TestProfileApp</uap:DisplayName>
    </uap:Protocol>
  </uap:Extension>
  <uap:Extension Category="windows.protocol">
    <uap:Protocol Name="ms-ipmessaging">
      <uap:DisplayName>TestMsgApp</uap:DisplayName>
    </uap:Protocol>
  </uap:Extension>
  <uap:Extension Category="windows.protocol">
    <uap:Protocol Name="ms-voip-video">
      <uap:DisplayName>TestVideoApp</uap:DisplayName>
    </uap:Protocol>
  </uap:Extension>
  <uap:Extension Category="windows.protocol">
    <uap:Protocol Name="ms-voip-call">
      <uap:DisplayName>TestCallApp</uap:DisplayName>
    </uap:Protocol>
  </uap:Extension>
</Extensions>

È anche possibile aggiungerli nella scheda Dichiarazioni della finestra di progettazione del manifesto in Visual Studio.

Declarations tab of the manifest designer

Trovare l'app accanto alle azioni in una scheda di contatto

Aprire l'app Contatti. L'app viene visualizzata accanto a ogni azione (operazione) specificata nell'annotazione e nel manifesto del pacchetto.

Contact Card

Se gli utenti scelgono l'app per un'azione, verrà visualizzata come app predefinita per tale azione alla successiva apertura di una scheda di contatto.

Trovare l'app accanto alle azioni in una mini scheda di contatto

Nelle mini schede di contatto l'app viene visualizzata nelle schede che rappresentano azioni.

Mini Contact Card

Le app come Posta aprono mini schede di contatto. Anche l'app le può aprire. Questo codice mostra come eseguire questa operazione.

public async void OpenContactCard(object sender, RoutedEventArgs e)
{
    // Get the selection rect of the button pressed to show contact card.
    FrameworkElement element = (FrameworkElement)sender;

    Windows.UI.Xaml.Media.GeneralTransform buttonTransform = element.TransformToVisual(null);
    Windows.Foundation.Point point = buttonTransform.TransformPoint(new Windows.Foundation.Point());
    Windows.Foundation.Rect rect =
        new Windows.Foundation.Rect(point, new Windows.Foundation.Size(element.ActualWidth, element.ActualHeight));

   // helper method to find a contact just for illustrative purposes.
    Contact contact = await findContact("contoso@contoso.com");

    ContactManager.ShowContactCard(contact, rect, Windows.UI.Popups.Placement.Default);

}

Per altri esempi con mini schede di contatto, vedere l'esempio di schede contatto.

Proprio come la scheda di contatto, ogni scheda ricorda l'app usata per l'ultima volta dall'utente in modo che sia facile tornarvi.

Eseguire operazioni quando gli utenti selezionano l'app in una scheda di contatto

Eseguire l'override del metodo Application.OnActivated nel file App.cs e passare agli utenti a una pagina nell'app. L'esempio di integrazione della scheda contatto mostra un modo per eseguire questa operazione.

Nel file code-behind della pagina eseguire l'override del metodo Page.OnNavigatedTo. La scheda di contatto passa questo metodo, il nome dell'operazione e l'ID dell'utente.

Per avviare una chiamata video o audio, vedere questo esempio di VoIP. L'API completa è disponibile nello spazio dei nomi WIndows.ApplicationModel.Calls.

Per facilitare la messaggistica, vedere lo spazio dei nomi tWindows.ApplicationModel.Chat.

È anche possibile avviare un'altra app. Questo è ciò che fa il codice.

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    var args = e.Parameter as ProtocolActivatedEventArgs;
    // Display the result of the protocol activation if we got here as a result of being activated for a protocol.

    if (args != null)
    {
        var options = new Windows.System.LauncherOptions();
        options.DisplayApplicationPicker = true;

        options.TargetApplicationPackageFamilyName = "ContosoApp";

        string launchString = args.uri.Scheme + ":" + args.uri.Query;
        var launchUri = new Uri(launchString);
        await Windows.System.Launcher.LaunchUriAsync(launchUri, options);
    }
}

La proprietà args.uri.scheme contiene il nome dell'operazione e la proprietà args.uri.Query contiene l'ID dell'utente.