Подключение приложения к действиям в карточке контакта
Приложение может отображаться рядом с действиями на карточке контакта или мини-карточке контакта. Пользователи могут выбрать свое приложение, чтобы выполнить действие, например открыть страницу профиля, разместить звонок или отправить сообщение.
Чтобы приступить к работе, найдите существующие контакты или создайте новые. Затем создайте заметку и несколько записей манифеста пакета, чтобы описать действия, поддерживаемые приложением. Затем напишите код, выполняющий действия.
Полный пример см . в примере интеграции с карточками контакта.
Поиск или создание контакта
Если приложение помогает пользователям подключаться к другим пользователям, выполните поиск контактов в 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
свойство содержит идентификатор пользователя.