Conectar seu app a ações em um cartão de contatoConnect your app to actions on a contact card

Seu aplicativo pode aparecer ao lado de ações em um cartão de contato ou um minicartão de contato.Your app can appear next to actions on a contact card or mini contact card. 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.Users can choose your app to perform an action such as open a profile page, place a call, or send a message.

Cartão de contato e minicartão de contato

Para começar, localize os contatos existentes ou crie novos.To get started, find existing contacts or create new ones. Em seguida, crie uma anotação e algumas entradas de manifesto do pacote para descrever as ações que seu aplicativo aceita.Next, create an annotation and a few package manifest entries to describe which actions your app supports. Depois, escreva um código que execute as ações.Then, write code that perform the actions.

Para obter um exemplo mais completo, consulte o Exemplo de integração com cartão de contato.For a more complete sample, see Contact Card Integration Sample.

Localizar ou criar um contatoFind or create a contact

Se seu aplicativo ajuda as pessoas a interagir com outras pessoas, procure contatos no Windows e anote-os.If your app helps people connect with others, search Windows for contacts and then annotate them. Se seu aplicativo gerencia contatos, você pode adicioná-los a uma lista de contatos do Windows e anotá-los.If your app manages contacts, you can add them to a Windows contact list and then annotate them.

Localizar um contatoFind a contact

Localize contatos por nome, endereço de email ou número de telefone.Find contacts by using a name, email address, or phone number.

ContactStore contactStore = await ContactManager.RequestStoreAsync();

IReadOnlyList<Contact> contacts = null;

contacts = await contactStore.FindContactsAsync(emailAddress);

Contact contact = contacts[0];

Criar um contatoCreate a contact

Se seu aplicativo for mais como uma agenda, crie contatos e depois adicione-os a uma lista de contatos.If your app is more like an address book, create contacts and then add them to a contact list.

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

Marcar cada contato com uma anotaçãoTag each contact with an annotation

Marque cada contato com uma lista de ações (operações) que seu aplicativo pode executar (por exemplo: chamadas de vídeo e mensagens).Tag each contact with a list of actions (operations) that your app can perform (for example: video calls and messaging).

Em seguida, associe a ID de um contato a uma ID que seu aplicativo usa internamente para identificar esse usuário.Then, associate the ID of a contact to an ID that your app uses internally to identify that user.

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

Registrar para cada operaçãoRegister for each operation

No manifesto do pacote, registre-se para cada operação listada em sua anotação.In your package manifest, register for each operation that you listed in your annotation.

Registre adicionando manipuladores de protocolo ao elemento Extensions do manifesto.Register by adding protocol handlers to the Extensions element of the manifest.

<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 à guia Declarações do designer de manifesto no Visual Studio.You can also add these in the Declarations tab of the manifest designer in Visual Studio.

Guia Declarações do designer de manifesto

Localizar seu aplicativo ao lado de ações em um cartão de contatoFind your app next to actions in a contact card

Abra o aplicativo Pessoas.Open the People app. Seu aplicativo aparecerá ao lado de cada ação (operação) que você especificou na anotação e no manifesto do pacote.Your app appears next to each action (operation) that you specified in your annotation and package manifest.

Cartão de contato

Se o usuário escolher 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 contato.If users choose your app for an action, it appears as the default app for that action the next time users open a contact card.

Localizar seu aplicativo ao lado de ações em um minicartão de contatoFind your app next to actions in a mini contact card

Nos minicartões de contato, seu aplicativo aparecerá em guias que representam ações.In mini contact cards, your app appears in tabs that represent actions.

Minicartão de contato

Aplicativos como o Email abrem mincartões de contato.Apps such as the Mail app open mini contact cards. Seu aplicativo também pode abri-los.Your app can open them too. Este código mostra para você como fazer isso.This code shows you how to do that.

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 minicartões de contato, consulte o Exemplo de cartões de contato.To see more examples with mini contact cards, see Contact cards sample.

Assim como o cartão de contato, cada guia lembra o aplicativo que o usuário usou pela última vez para que seja fácil retornar ao seu aplicativo.Just like the contact card, each tab remembers the app that the user last used so it's easy for them to return to your app.

Executar operações quando os usuários selecionam seu aplicativo em um cartão de contatoPerform operations when users select your app in a contact card

Substitua o método Application.OnActivated em seu arquivo App.cs e direcione os usuários a uma página em seu aplicativo.Override the Application.OnActivated method in your App.cs file and navigate users to a page in your app. O Exemplo de integração de cartão de contato mostra uma maneira de fazer isso.The Contact Card Integration Sample shows one way to do that.

No arquivo code-behind da página, substitua o método Page.OnNavigatedTo.In the code behind file of the page, override the Page.OnNavigatedTo method. O cartão de contato passa o nome da operação e a ID do usuário para esse método.The contact card passes this method the name of operation and the ID of the user.

Para iniciar uma chamada de vídeo ou áudio, veja este exemplo: Exemplo de VoIP.To start a video or audio call, see this sample: VoIP sample. Você encontrará a API completa no namespace WIndows.ApplicationModel.Calls.You'll find the complete API in the WIndows.ApplicationModel.Calls namespace.

Para facilitar a troca de mensagens, veja o namespace Windows.ApplicationModel.Chat.To facilitate messaging, see the Windows.ApplicationModel.Chat namespace.

Você também pode iniciar outro aplicativo.You can also start another app. É isso que este código faz.That's what this code does.

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 propriedade args.uri.scheme contém o nome da operação, e a propriedade args.uri.Query contém a ID do usuário.The args.uri.scheme property contains the name of the operation, and the args.uri.Query property contains the ID of the user.