Записать действия контакта

Перед началом работы добавьте свои контакты в Windows.

Вы можете записывать активности контакта, чтобы представлять значимые взаимодействия между пользователем и контактом в приложении. Действия с контактами служат упрощенными сигналами взаимодействия, которые помогают Windows понять, как пользователи взаимодействуют с контактами в таких сценариях, связанных с людьми, как Мини-приложения “Люди”, панель “Поделиться” и поле поиска Windows, на запланированных этапах.

Note

Справочник ContactAnnotationOperations в настоящее время не содержит сведений о версии Windows или SDK для значения Activity, и эта статья не указывает, какие возможности используют действия контакта сегодня. В журнале версий в справочном материале Share (Windows 10 версии 1703, пакет SDK 15063) указан как последнее документированное значение. Проверьте справочник API на наличие обновлений, прежде чем полагаться на Activity в приложении, предназначенном для более старых версий SDK.

Каждое действие записывает три ключевых фрагмента информации:

  • Кто — контакт, участвующий во взаимодействии
  • Что — тип произошедшего взаимодействия
  • Когда — время, когда произошло взаимодействие

Чтобы записать действие контакта, приложение должно создать ContactAnnotation, связанную с контактом, и задать для ContactAnnotationOperations.Activityнего значениеSupportedOperations. Windows интерпретирует заметки с этим типом операции как сигналы взаимодействия, связанные с контактом.

Каждое действие представляет собой одно событие взаимодействия и должно быть записано отдельно. При отправке нескольких действий контакта выполните итерацию по записям взаимодействия и вызовите TrySaveAnnotationAsync для каждого события. Цикл не предоставляет пакетный API и не снижает затраты на синхронизацию.

Полезная нагрузка активности контакта

Чтобы записать действие контакта, задайте для ContactAnnotationProviderProperties["ActivityPayload"] в виде строки JSON, описывающей взаимодействие.

Полезные данные должны содержать следующие свойства:

Property Description
ActivityType Определяет тип взаимодействия.
ActivityTimestampUnix Время, когда произошло взаимодействие, выраженное как время UTC Unix в секундах.

Используйте ключ ActivityPayload и имена свойств payload ActivityType и ActivityTimestampUnix точно так же, как показано. Эти имена образуют контракт на основе строк для описания активности.

Поддерживаемые типы активности контактов

Поле ActivityType определяет взаимодействие, которое произошло между пользователем и контактом. Windows в настоящее время поддерживает следующие типы действий.

ТипАктивности Description
message Отправка или получение сообщения этому контакту.
call Начало или ответ на аудио- или видеозвонок.
email Отправка или получение сообщения электронной почты.
meeting Присоединение или планирование встречи с участием контакта.
share Предоставление общего доступа к содержимому с контактом.
social Взаимодействие с контактом через социальные взаимодействия.
profileInteraction Открытие или взаимодействие с профилем контакта.

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

Пример записи активности контакта

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

long nowUnix = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

var payload = new
{
    ActivityType = "message",
    ActivityTimestampUnix = nowUnix
};

var annotation = new ContactAnnotation
{
    ContactId = contact.Id,
    RemoteId = contact.RemoteId,
    SupportedOperations = ContactAnnotationOperations.Activity
};

annotation.ProviderProperties["ActivityPayload"] =
    JsonSerializer.Serialize(payload);

bool saved = await this.contactAnnotationList.TrySaveAnnotationAsync(annotation);
if (!saved)
{
    // The annotation wasn't saved, so Windows didn't receive this activity.
    // Log the failure or retry later. Don't treat the interaction as recorded.
    System.Diagnostics.Debug.WriteLine(
        $"Failed to save contact activity for contact {contact.RemoteId}.");
}

TrySaveAnnotationAsync возвращает false , когда не удается сохранить заметку, поэтому проверьте результат, прежде чем предположить, что действие было записано. Результат true означает, что аннотация была сохранена. Это не указывает, как Windows позже обрабатывает действие.

Модель доступа к активностям контакта

Активности контактов доступны только для записи с точки зрения вашего приложения. Приложение может отправлять записи действий, но Windows в настоящее время не поддерживает получение или явное удаление ранее отправленных записей действий. Очистка жизненного цикла, управляемая Windows, отделена, как описано в следующем разделе.

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

Жизненный цикл активностей контакта

Действия контактов связаны с контактами с помощью предоставленного приложением RemoteId.

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

Обработка и хранение активности контакта

Действия касания обрабатываются Windows как сигналы взаимодействия.

Срок хранения, срок действия (TTL), агрегирование и оценка действий, связанных с контактами, управляются Windows внутренними средствами. Приложения не контролируют, как долго хранятся активности или как они обрабатываются после отправки.

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