Windows 앱 SDK 앱에서 사용자 활동 만들기

사용자 활동은 사용자가 앱에서 수행하는 작업을 나타냅니다. 사용자가 중단한 지점부터 다시 이어서 할 수 있도록 활동을 만듭니다. 활동은 로컬 활동 기록에 표시되며 사용자가 이전 작업으로 돌아가는 데 도움이 되는 Windows 기능으로 표시될 수 있습니다.

메모

타임라인 클라우드 동기화는 2021년 7월에 더 이상 사용되지 않습니다. 앱에서 만든 사용자 활동은 로컬로 저장되고 더 이상 Microsoft Graph 타임라인을 통해 디바이스 간에 동기화되지 않습니다. 디바이스의 로컬 활동 기록은 여전히 작동합니다.

사전 요구 사항

  • 앱은 패키지(MSIX)되거나 패키지 ID가 있어야 합니다.
  • 특별한 기능 선언이 필요하지 않습니다. 모든 패키지된 앱에서 UserActivity API를 사용할 수 있습니다.

사용자 활동 만들기

UserActivityChannelUserActivity 클래스를 사용합니다.

using Windows.ApplicationModel.UserActivities;

private UserActivitySession? _currentSession;

private async Task CreateActivityAsync()
{
    var channel = UserActivityChannel.GetDefault();
    var activity = await channel.GetOrCreateUserActivityAsync("document-123");

    activity.ActivationUri = new Uri("myapp://open?doc=123");
    activity.VisualElements.DisplayText = "Quarterly Report";
    activity.VisualElements.Description = "Working on Q4 financial summary";

    await activity.SaveAsync();
    _currentSession = activity.CreateSession();
}

활동 세션은 사용자가 현재 이 작업에 참여하고 있음을 나타냅니다. 사용자가 다른 작업으로 전환할 때 삭제합니다.

풍부한 시각적 세부 정보 설정

UserActivityVisualElements의 속성을 사용하여 사용자에게 활동을 설명합니다.

UserActivity activity = new UserActivity("quarterly-report");

activity.VisualElements.DisplayText = "Quarterly Report";
activity.VisualElements.Description = "Last edited: Section 3 - Revenue Analysis";
activity.VisualElements.Attribution = new UserActivityAttribution(
    new Uri("ms-appx:///Assets/AppIcon.png"));

메모

AdaptiveCardBuilder (Windows.UI.Shell)를 사용하면 전체 Adaptive Card를 활동의 시각적 요소로 렌더링할 수 있지만, 해당 표시 영역은 Windows Timeline의 일부였으며 Microsoft에서 종료했습니다. 새 코드에서는 사용하지 AdaptiveCardBuilder 마세요. 위에 표시된 속성을 대신 사용합니다 VisualElements .

활동에서 활성화 처리

사용자가 다시 시작할 활동을 선택하면 앱이 프로토콜 URI를 사용하여 활성화됩니다. 활성화 로직에서 처리하세요:

var activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();

if (activatedArgs.Kind == ExtendedActivationKind.Protocol)
{
    var protocolArgs = activatedArgs.Data as Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs;
    if (protocolArgs?.Uri.Scheme == "myapp")
    {
        // Parse the query string manually; System.Web.HttpUtility isn't
        // available to apps that target .NET (as opposed to .NET Framework).
        string? docId = protocolArgs.Uri.Query
            .TrimStart('?')
            .Split('&', StringSplitOptions.RemoveEmptyEntries)
            .Select(pair => pair.Split('=', 2))
            .FirstOrDefault(pair => pair[0] == "doc")
            ?.ElementAtOrDefault(1);
        // Navigate to the document
    }
}

세션 종료

사용자가 작업 작업을 중지하면 세션을 삭제합니다.

UserActivitySession? _currentSession = null;

_currentSession?.Dispose();
_currentSession = null;

모범 사례

  • 의미 있는 활동 ID 사용 - ID는 작업(예: 문서 경로 또는 프로젝트 이름)을 고유하게 식별해야 합니다.
  • 작업 업데이트 - 사용자가 진행 중일 때 호출 SaveAsync() 하여 설명을 최신 상태로 유지합니다.
  • 활성화 URI 설정 - 활동이 앱을 올바른 상태로 다시 실행할 수 있도록 항상 URI를 제공합니다.
  • 한 번에 하나의 세션 만들기 - 새 세션을 만들기 전에 이전 세션을 삭제합니다.

자세한 지침은 사용자 활동 모범 사례를 참조하세요.