ユーザー アクティビティは、ユーザーがアプリで実行するタスクを表します。 アクティビティを作成して、ユーザーが中断した場所を取得できるようにします。 アクティビティはローカルアクティビティ履歴に表示され、ユーザーが以前のタスクに戻るのに役立つWindows機能によって表示できます。
Note
タイムライン クラウド同期は、2021 年 7 月に非推奨になりました。 アプリによって作成されたユーザー アクティビティはローカルに保存され、Microsoft Graphタイムラインを介してデバイス間で同期されなくなります。 デバイスのローカル アクティビティ履歴は引き続き機能します。
前提条件
- アプリはパッケージ化 (MSIX) であるか、パッケージ ID を持っている必要があります。
- 特別な機能宣言は必要ありません。UserActivity API はすべてのパッケージ アプリで使用できます。
ユーザー アクティビティを作成する
UserActivityChannel クラスと UserActivity クラスを使用します。
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"));
Note
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 を指定します。
- 一度に 1 つのセッションを作成 する - 新しいセッションを作成する前に、前のセッションを破棄します。
詳細なガイダンスについては、「 ユーザー アクティビティのベスト プラクティス」を参照してください。
関連するコンテンツ
Windows developer