Поделиться через


Подключение приложения к действиям в карточке контакта

Приложение может отображаться рядом с действиями на карточке контакта или мини-карточке контакта. Пользователи могут выбрать свое приложение, чтобы выполнить действие, например открыть страницу профиля, разместить звонок или отправить сообщение.

Карточка контакта и карточка мини-контакта

Чтобы приступить к работе, найдите существующие контакты или создайте новые. Затем создайте заметку и несколько записей манифеста пакета, чтобы описать действия, поддерживаемые приложением. Затем напишите код, выполняющий действия.

Полный пример см . в примере интеграции с карточками контакта.

Поиск или создание контакта

Если приложение помогает пользователям подключаться к другим пользователям, выполните поиск контактов в Windows и заметьте их. Если приложение управляет контактами, их можно добавить в список контактов Windows, а затем запишите их.

Поиск контакта

Поиск контактов с помощью имени, адреса электронной почты или номера телефона.

ContactStore contactStore = await ContactManager.RequestStoreAsync();

IReadOnlyList<Contact> contacts = null;

contacts = await contactStore.FindContactsAsync(emailAddress);

Contact contact = contacts[0];

Создание контакта

Если приложение больше похоже на адресную книгу, создайте контакты и добавьте их в список контактов.

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

Тег каждого контакта с заметкой

Пометьте каждый контакт со списком действий (операций), которые может выполнять ваше приложение (например, видеозвонки и обмен сообщениями).

Затем свяжите идентификатор контакта с идентификатором, который приложение использует внутренне для идентификации этого пользователя.

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

Регистрация для каждой операции

В манифесте пакета зарегистрируйтесь для каждой операции, указанной в заметке.

Зарегистрируйтесь путем добавления обработчиков протокола в Extensions элемент манифеста.

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

Вы также можете добавить их на вкладке "Объявления" конструктора манифестов в Visual Studio.

Вкладка

Поиск приложения рядом с действиями в карточке контакта

Откройте приложение "Люди". Приложение отображается рядом с каждым действием (операцией), указанными в манифесте заметки и пакета.

Карточка контакта

Если пользователи выбирают приложение для действия, оно отображается как приложение по умолчанию для этого действия при следующем открытии карточки контакта.

Поиск приложения рядом с действиями в мини-карточке контакта

В мини-карточках контактов приложение отображается на вкладках, представляющих действия.

Карточка мини-контакта

Такие приложения, как почтовое приложение, открывают мини-карточки контакта. Приложение также может открыть их. В этом коде показано, как это сделать.

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

}

Дополнительные примеры с мини-карточками контакта см . в примере карточек контактов.

Как и карточка контакта, каждая вкладка запоминает приложение, которое последний раз использовал пользователь, чтобы они легко возвращались в приложение.

Выполнение операций при выборе приложения в карточке контакта

Переопределите метод Application.OnActivated в файле App.cs и перейдите пользователей на страницу в приложении. В примере интеграции с карточками контакта показан один из способов этого.

В файле кода страницы переопределите метод Page.OnNavigatedTo . Карточка контакта передает этому методу имя операции и идентификатор пользователя.

Чтобы запустить видео или аудиозвонок, ознакомьтесь с этим примером: пример VoIP. Полный API можно найти в пространстве имен WIndows.ApplicationModel.Calls .

Сведения об упрощении обмена сообщениями см. в пространстве имен Windows.ApplicationModel.Chat .

Вы также можете запустить другое приложение. Вот что делает этот код.

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

Свойство args.uri.scheme содержит имя операции, а args.uri.Query свойство содержит идентификатор пользователя.