Partager via


Activer la relance de votre contenu à partir de Recall

Recall enregistre automatiquement les captures instantanées de votre application, mais les utilisateurs ne pourront pas relancer votre contenu, sauf si vous fournissez un UserActivity au moment de l’instantané. Cela permet à Recall de replonger l'utilisateur dans ce qui était en train d'être vu à ce moment-là.

Un UserActivity fait référence à quelque chose de spécifique sur lequel l’utilisateur travaillait au sein de votre appli. Par exemple, lorsqu’un utilisateur écrit un document, un UserActivity peut faire référence à l’emplacement spécifique dans le document où l’utilisateur a quitté l’écriture. Lorsque vous écoutez une appli musicale, le UserActivity peut être la playlist que l’utilisateur a écoutée pour la dernière fois. Lorsque vous dessinez sur un espace, le UserActivity peut être l’emplacement où l’utilisateur a réalisé une marque pour la dernière fois. En résumé, un UserActivity représente une destination dans votre application Windows à laquelle un utilisateur peut revenir afin qu’il puisse reprendre ce qu’il faisait.

Envoi (push) d’activités utilisateur

Chaque fois que le contenu principal de votre application change (par exemple, l’utilisateur ouvrant un e-mail différent, l’ouverture d’une page web différente, etc.), votre application doit journaliser un nouveau UserActivitySession afin que le système sache quel contenu est actuellement ouvert. Recall associera ensuite le plus récent UserActivity avec l'instantané qu'il enregistre, et utilisera le ActivationUri dans l'activité pour permettre à l'utilisateur de revenir à ce contenu.

Nous vous recommandons de transmettre les activités utilisateur sur tous les PC, même ceux qui n'exécutent pas Recall.

UserActivitySession _previousSession;

private async Task OnContentChangedAsync()
{
    // Dispose of any previous session (which automatically logs the end of the interaction with that content)
    _previousSession?.Dispose();

    // Generate an identifier that uniquely maps to your new content.
    string id = "doc135.txt";

    // Create a new user activity that represents your new content
    var activity = await UserActivityChannel.GetDefault().GetOrCreateUserActivityAsync(id);

    // Populate the required properties
    activity.DisplayText = "doc135.txt";
    activity.ActivationUri = new Uri("my-app://docs/doc135.txt");

    // Save the activity
    await activity.SaveAsync();

    // And start a new session tracking the engagement with this new activity
    _previousSession = activity.CreateSession();
}

Note

La méthode GetOrCreateUserActivityAsync retourne toujours une nouvelle activité sur les dernières versions de Windows. La possibilité d’obtenir vos activités enregistrées précédemment a été supprimée, et Windows ne stocke plus les activités précédentes de votre application de manière à pouvoir les récupérer.

Facultatif : gestion de l’événement demandé

Outre les activités push, votre application peut choisir d’implémenter l’événement UserActivityRequested , que Windows peut déclencher pour s’assurer qu’elle dispose de la dernière activité de votre application.

public void OnLaunched()
{
    UserActivityRequestManager.GetForCurrentView().UserActivityRequested += UserActivityRequested;
}

private async void UserActivityRequested(
    Windows.ApplicationModel.UserActivities.UserActivityRequestManager sender,
    Windows.ApplicationModel.UserActivities.UserActivityRequestedEventArgs args)
{
    // Start a deferral so you can use async code
    var deferral = args.GetDeferral();

    try
    {
        // Generate an identifier that uniquely maps to your current content.
        string id = "doc135.txt";

        // Create a user activity that represents your current content
        var activity = await UserActivityChannel.GetDefault().GetOrCreateUserActivityAsync(id);

        // Populate the required properties
        activity.DisplayText = "doc135.txt";
        activity.ActivationUri = new Uri("my-app://docs/doc135.txt");

        // And return the activity to the event handler
        args.Request.SetUserActivity(activity);
    }

    finally
    {
        // And complete the deferral
        deferral.Complete();
    }
}