Partager via


Poursuivre l’activité utilisateur, même sur différents appareils

Cette rubrique explique comment aider les utilisateurs à reprendre ce qu’ils faisaient dans votre application sur leur PC et sur les appareils.

Remarque

À compter de juillet 2021, les utilisateurs dont l’historique des activités est synchronisé sur leurs appareils Windows par le biais de leur compte Microsoft (MSA) n’auront plus la possibilité de charger une nouvelle activité dans Chronologie. Ils pourront toujours utiliser Chronologie et voir l’historique de leurs activités (informations sur les applications récentes, les sites web et les fichiers) sur leur PC local. Les comptes connectés à AAD ne seront pas affectés.

Activités et chronologie des utilisateurs

Notre temps chaque jour est réparti sur plusieurs appareils. Nous pourrions utiliser notre téléphone pendant le bus, un PC pendant la journée, puis un téléphone ou une tablette le soir. À compter de Windows 10 Build 1803 ou version ultérieure, la création d’une activité utilisateur permet d’afficher cette activité dans la chronologie Windows et dans la fonctionnalité Pick-up de Cortana où j’ai quitté la fonctionnalité. La chronologie est une vue de tâche riche qui tire parti des activités utilisateur pour afficher une vue chronologique de ce que vous avez travaillé. Il peut également inclure ce que vous travailliez sur tous les appareils.

Image de chronologie Windows

De même, la liaison de votre téléphone à votre PC Windows vous permet de continuer ce que vous faisiez précédemment sur votre appareil iOS ou Android.

Considérez un UserActivity comme un élément spécifique sur lequel l’utilisateur travaillait au sein de votre application. Par exemple, si vous utilisez un lecteur RSS, un UserActivity peut être le flux que vous lisez. Si vous jouez à un jeu, UserActivity peut être le niveau que vous jouez. Si vous écoutez une application musicale, UserActivity peut être la playlist que vous écoutez. Si vous travaillez sur un document, userActivity peut être là où vous avez quitté le travail, et ainsi de suite. En bref, un UserActivity représente une destination au sein de votre application afin de permettre à l’utilisateur de reprendre ce qu’il faisait.

Lorsque vous interagissez avec un UserActivity en appelant UserActivity.CreateSession, le système crée un enregistrement d’historique indiquant l’heure de début et de fin de cette UserActivity. Lorsque vous repartez avec userActivity au fil du temps, plusieurs enregistrements d’historique sont enregistrés pour celui-ci.

Ajouter des activités utilisateur à votre application

UserActivity est l’unité d’engagement utilisateur dans Windows. Il comporte trois parties : un URI utilisé pour activer l’application à laquelle appartient l’activité, les visuels et les métadonnées qui décrivent l’activité.

  1. ActivationUri est utilisé pour reprendre l’application avec un contexte spécifique. En règle générale, ce lien prend la forme d’un gestionnaire de protocole pour un schéma (par exemple, « my-app ://page2 ?action=edit ») ou d’un AppUriHandler (par exemple, http://contoso.com/page2?action=edit).
  2. VisualElements expose une classe qui permet à l’utilisateur d’identifier visuellement une activité avec un titre, une description ou des éléments de carte adaptative.
  3. Enfin, le contenu est l’endroit où vous pouvez stocker les métadonnées de l’activité qui peuvent être utilisées pour regrouper et récupérer des activités dans un contexte spécifique. Souvent, cela prend la forme de https://schema.org données.

Pour ajouter un UserActivity à votre application :

  1. Générer des objets UserActivity lorsque le contexte de votre utilisateur change dans l’application (par exemple, navigation de page, nouveau niveau de jeu, etc.)
  2. Remplissez les objets UserActivity avec l’ensemble minimal de champs obligatoires : ActivityId, ActivationUri et UserActivity.VisualElements.DisplayText.
  3. Ajoutez un gestionnaire de schéma personnalisé à votre application afin qu’elle puisse être réactivée par un UserActivity.

Un UserActivity peut être intégré à une application avec seulement quelques lignes de code. Par exemple, imaginez ce code dans MainPage.xaml.cs, à l’intérieur de la classe MainPage (remarque : suppose) using Windows.ApplicationModel.UserActivities;:

UserActivitySession _currentActivity;
private async Task GenerateActivityAsync()
{
    // Get the default UserActivityChannel and query it for our UserActivity. If the activity doesn't exist, one is created.
    UserActivityChannel channel = UserActivityChannel.GetDefault();
    UserActivity userActivity = await channel.GetOrCreateUserActivityAsync("MainPage");
 
    // Populate required properties
    userActivity.VisualElements.DisplayText = "Hello Activities";
    userActivity.ActivationUri = new Uri("my-app://page2?action=edit");
     
    //Save
    await userActivity.SaveAsync(); //save the new metadata
 
    // Dispose of any current UserActivitySession, and create a new one.
    _currentActivity?.Dispose();
    _currentActivity = userActivity.CreateSession();
}

La première ligne de la GenerateActivityAsync() méthode ci-dessus obtient UserActivityChannel d’un utilisateur. Il s’agit du flux dans lequel les activités de cette application seront publiées. La ligne suivante interroge le canal d’une activité appelée MainPage.

  • Votre application doit nommer des activités de telle sorte que le même ID soit généré chaque fois que l’utilisateur se trouve dans un emplacement particulier dans l’application. Par exemple, si votre application est basée sur une page, utilisez un identificateur pour la page ; si son document est basé, utilisez le nom du document (ou un hachage du nom).
  • S’il existe une activité existante dans le flux avec le même ID, cette activité est retournée à partir du canal avec UserActivity.State la valeur Publiée). S’il n’existe aucune activité portant ce nom, et que la nouvelle activité est retournée avec UserActivity.State la valeur Nouveau.
  • Les activités sont limitées à votre application. Vous n’avez pas besoin de vous soucier de votre ID d’activité en collision avec les ID dans d’autres applications.

Après avoir obtenu ou créé UserActivity, spécifiez les deux autres champs obligatoires : UserActivity.VisualElements.DisplayTextet UserActivity.ActivationUri.

Ensuite, enregistrez les métadonnées UserActivity en appelant SaveAsync et enfin CreateSession, qui retourne une UserActivitySession. UserActivitySession est l’objet que nous pouvons utiliser pour gérer lorsque l’utilisateur est réellement engagé avec UserActivity. Par exemple, nous devons appeler Dispose() userActivitySession lorsque l’utilisateur quitte la page. Dans l’exemple ci-dessus, nous appelons Dispose() _currentActivity également avant d’appeler CreateSession(). Cela est dû au fait que nous avons créé _currentActivity un champ membre de notre page et que nous voulons arrêter toute activité existante avant de commencer la nouvelle (remarque : il ? s’agit de l’opérateur conditionnel Null qui teste la valeur Null avant d’effectuer l’accès au membre).

Étant donné que, dans ce cas, il ActivationUri s’agit d’un schéma personnalisé, nous devons également inscrire le protocole dans le manifeste de l’application. Cette opération est effectuée dans le fichier XML Package.appmanifest ou à l’aide du concepteur.

Pour apporter la modification au concepteur, double-cliquez sur le fichier Package.appmanifest dans votre projet pour lancer le concepteur, sélectionnez l’onglet Déclarations et ajoutez une définition de protocole . La seule propriété à remplir, pour l’instant, est Name. Il doit correspondre à l’URI que nous avons spécifié ci-dessus. my-app

Nous devons maintenant écrire du code pour indiquer à l’application ce qu’il faut faire lorsqu’elle a été activée par un protocole. Nous allons remplacer la OnActivated méthode dans App.xaml.cs pour passer l’URI sur la page principale, comme suit :

protected override void OnActivated(IActivatedEventArgs e)
{
    if (e.Kind == ActivationKind.Protocol)
    {
        var uriArgs = e as ProtocolActivatedEventArgs;
        if (uriArgs != null)
        {
            if (uriArgs.Uri.Host == "page2")
            {
                // Navigate to the 2nd page of the  app
            }
        }
    }
    Window.Current.Activate();
}

Ce que fait ce code permet de détecter si l’application a été activée via un protocole. Si c’était le cas, il semble voir ce que l’application doit faire pour reprendre la tâche pour laquelle elle est activée. Étant une application simple, la seule activité que cette application reprend est de vous placer sur la page secondaire lorsque l’application apparaît.

Utiliser des cartes adaptatives pour améliorer l’expérience de chronologie

Les activités utilisateur s’affichent dans Cortana et chronologie. Lorsque les activités apparaissent dans chronologie, nous les affichons à l’aide de l’infrastructure de carte adaptative. Si vous ne fournissez pas de carte adaptative pour chaque activité, la chronologie crée automatiquement une carte d’activité simple en fonction du nom et de l’icône de votre application, du champ de titre et du champ de description facultatif. Vous trouverez ci-dessous un exemple de charge utile de carte adaptative et la carte qu’elle produit.

Carte adaptative]

Exemple de chaîne JSON de charge utile de carte adaptative :

{ 
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", 
  "type": "AdaptiveCard", 
  "version": "1.0",
  "backgroundImage": "https://winblogs.azureedge.net/win/2017/11/eb5d872c743f8f54b957ff3f5ef3066b.jpg", 
  "body": [ 
    { 
      "type": "Container", 
      "items": [ 
        { 
          "type": "TextBlock", 
          "text": "Windows Blog", 
          "weight": "bolder", 
          "size": "large", 
          "wrap": true, 
          "maxLines": 3 
        }, 
        { 
          "type": "TextBlock", 
          "text": "Training Haiti’s radiologists: St. Louis doctor takes her teaching global", 
          "size": "default", 
          "wrap": true, 
          "maxLines": 3 
        } 
      ] 
    } 
  ]
}

Ajoutez la charge utile cartes adaptatives en tant que chaîne JSON à userActivity comme suit :

activity.VisualElements.Content = 
Windows.UI.Shell.AdaptiveCardBuilder.CreateAdaptiveCardFromJson(jsonCardText); // where jsonCardText is a JSON string that represents the card

Intégration multiplateforme et service à service

Si votre application exécute plusieurs plateformes (par exemple sur Android et iOS) ou conserve l’état utilisateur dans le cloud, vous pouvez publier UserActivities via Microsoft Graph. Une fois que votre application ou service est authentifié avec un compte Microsoft, il suffit d’effectuer deux appels REST simples pour générer des objets d’activité et d’historique , en utilisant les mêmes données que celles décrites ci-dessus.

Résumé

Vous pouvez utiliser l’API UserActivity pour faire apparaître votre application dans Chronologie et Cortana.

API clés