Conectar seu app a ações em um cartão de contato

Seu aplicativo pode aparecer ao lado de ações em um cartão de visita ou mini-cartão de visita. Os usuários podem escolher seu aplicativo para executar uma ação, como abrir uma página de perfil, fazer uma chamada ou enviar uma mensagem.

Cartão de visita e mini cartão de visita

Para começar, encontre contatos existentes ou crie novos. Em seguida, crie uma anotação e algumas entradas de manifesto de pacote para descrever quais ações seu aplicativo dá suporte. Em seguida, escreva o código que executa as ações.

Para obter um exemplo mais completo, consulte Exemplo de integração de cartão de visita.

Localizar ou criar um contato

Se o seu aplicativo ajudar as pessoas a se conectarem com outras pessoas, pesquise contatos no Windows e faça anotações neles. Se o seu aplicativo gerencia contatos, você pode adicioná-los a uma lista de contatos do Windows e anotá-los.

Encontre um contato

Encontre contatos usando um nome, endereço de e-mail ou número de telefone.

ContactStore contactStore = await ContactManager.RequestStoreAsync();

IReadOnlyList<Contact> contacts = null;

contacts = await contactStore.FindContactsAsync(emailAddress);

Contact contact = contacts[0];

Criar um contato

Se o seu aplicativo for mais parecido com um catálogo de endereços, crie contatos e adicione-os a uma lista de contatos.

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

Marque cada contato com uma anotação

Marque cada contato com uma lista de ações (operações) que seu aplicativo pode executar (por exemplo: chamadas de vídeo e mensagens).

Em seguida, associe a ID de um contato a uma ID que seu aplicativo usa internamente para identificar esse usuário.

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

Registre-se para cada operação

No manifesto do pacote, registre-se para cada operação listada na anotação.

Registre-se adicionando manipuladores de protocolo ao Extensions elemento do 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>

Você também pode adicioná-los na guia Declarações do designer de manifesto no Visual Studio.

Guia Declarações do designer de manifesto

Localizar seu aplicativo ao lado de ações em um cartão de visita

Abra o aplicativo Pessoas. Seu aplicativo aparece ao lado de cada ação (operação) que você especificou na anotação e no manifesto do pacote.

Cartão de Visita

Se os usuários escolherem seu aplicativo para uma ação, ele aparecerá como o aplicativo padrão para essa ação na próxima vez que os usuários abrirem um cartão de visita.

Localizar seu aplicativo ao lado de ações em um mini cartão de visita

Em minicartões de visita, seu aplicativo aparece em guias que representam ações.

Mini Cartão de Visita

Aplicativos como o aplicativo Mail abrem mini cartões de contato. Seu aplicativo também pode abri-los. Este código mostra como fazer isso.

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 mais exemplos com mini cartões de visita, consulte Exemplo de cartões de visita.

Assim como o cartão de visita, cada guia lembra o aplicativo que o usuário usou pela última vez, para que seja fácil para ele retornar ao seu aplicativo.

Executar operações quando os usuários selecionam seu aplicativo em um cartão de visita

Substitua o método Application.OnActivated no arquivo App.cs e navegue os usuários para uma página no aplicativo. O Exemplo de Integração de Cartão de Visita mostra uma maneira de fazer isso.

No arquivo code-behind da página, substitua o método Page.OnNavigatedTo . O cartão de visita passa a esse método o nome da operação e a ID do usuário.

Para iniciar uma chamada de vídeo ou áudio, consulte este exemplo: Exemplo de VoIP. Você encontrará a API completa no namespace WIndows.ApplicationModel.Calls .

Para facilitar o sistema de mensagens, consulte o namespace Windows.ApplicationModel.Chat .

Você também pode iniciar outro aplicativo. É isso que este código faz.

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

A args.uri.scheme propriedade contém o nome da operação e a args.uri.Query propriedade contém a ID do usuário.