Compartir a través de


Conectar la aplicación a acciones en una tarjeta de contacto

La aplicación puede aparecer junto a acciones en una tarjeta de contacto o en una tarjeta de contacto mini. Los usuarios pueden elegir tu aplicación para realizar una acción, como abrir una página de perfil, realizar una llamada o enviar un mensaje.

Tarjeta de contacto y tarjeta de contacto mini

Para empezar, busque contactos existentes o cree nuevos. A continuación, cree una anotación y algunas entradas de manifiesto de paquete para describir qué acciones admite la aplicación. A continuación, escriba código que realice las acciones.

Para obtener un ejemplo más completo, consulte Ejemplo de integración de tarjetas de contacto.

Buscar o crear un contacto

Si la aplicación ayuda a los usuarios a conectarse con otros usuarios, busque contactos de Windows y anotelos. Si la aplicación administra contactos, puedes agregarlos a una lista de contactos de Windows y anotarlos.

Buscar un contacto

Busque contactos mediante un nombre, una dirección de correo electrónico o un número de teléfono.

ContactStore contactStore = await ContactManager.RequestStoreAsync();

IReadOnlyList<Contact> contacts = null;

contacts = await contactStore.FindContactsAsync(emailAddress);

Contact contact = contacts[0];

Cree contactos

Si la aplicación es más similar a una libreta de direcciones, cree contactos y agréguelos a una lista de contactos.

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

Etiquetar cada contacto con una anotación

Etiquete cada contacto con una lista de acciones (operaciones) que la aplicación puede realizar (por ejemplo: videollamadas y mensajería).

A continuación, asocie el identificador de un contacto a un identificador que la aplicación usa internamente para identificar a ese usuario.

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

Registro para cada operación

En el manifiesto del paquete, regístrese para cada operación que aparecen en la anotación.

Regístrese agregando controladores de protocolo al Extensions elemento del manifiesto.

<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>

También puede agregarlos en la pestaña Declaraciones del diseñador de manifiestos en Visual Studio.

Pestaña Declaraciones del diseñador de manifiestos

Buscar la aplicación junto a acciones en una tarjeta de contacto

Abra la aplicación Contactos. La aplicación aparece junto a cada acción (operación) que especificó en el manifiesto de anotación y paquete.

Tarjeta de contacto

Si los usuarios eligen la aplicación para una acción, aparece como la aplicación predeterminada para esa acción la próxima vez que los usuarios abran una tarjeta de contacto.

Buscar la aplicación junto a acciones en una tarjeta de mini contacto

En las tarjetas de mini contacto, la aplicación aparece en pestañas que representan acciones.

Mini Contact Card

Las aplicaciones, como la aplicación Correo, abren tarjetas de contacto mini. La aplicación también puede abrirlas. Este código muestra cómo hacerlo.

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

}

Para ver más ejemplos con tarjetas de contacto mini, consulte Ejemplo de tarjetas de contacto.

Al igual que la tarjeta de contacto, cada pestaña recuerda la aplicación que el usuario usó por última vez para que sea fácil volver a la aplicación.

Realizar operaciones cuando los usuarios seleccionan la aplicación en una tarjeta de contacto

Invalide el método Application.OnActivated en el archivo App.cs y navegue a los usuarios a una página de la aplicación. El ejemplo de integración de tarjeta de contacto muestra una manera de hacerlo.

En el archivo de código subyacente de la página, invalide el método Page.OnNavigatedTo . La tarjeta de contacto pasa este método el nombre de la operación y el identificador del usuario.

Para iniciar una llamada de vídeo o audio, consulte este ejemplo: Ejemplo de VoIP. Encontrará la API completa en el espacio de nombres WIndows.ApplicationModel.Calls .

Para facilitar la mensajería, consulte el espacio de nombres Windows.ApplicationModel.Chat .

También puede iniciar otra aplicación. Eso es lo que hace este código.

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 args.uri.scheme propiedad contiene el nombre de la operación y la args.uri.Query propiedad contiene el identificador del usuario.