Poursuivre l’activité des utilisateurs, même sur les appareils
Cette rubrique explique comment aider les utilisateurs à reprendre ce qu’ils faisaient dans votre application sur leur PC et sur les appareils.
Note
À compter de juillet 2021, les utilisateurs qui ont synchronisé l’historique des activités sur leurs appareils Windows via leur compte Microsoft (MSA) n’ont plus la possibilité de charger une nouvelle activité dans la chronologie. Ils pourront toujours utiliser chronologie et afficher leur historique d’activité (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. À partir de Windows 10 Build 1803 ou version ultérieure, la création d'une activité utilisateur fait apparaître cette activité dans l'aperçu des activités de Windows et dans la fonctionnalité Reprendre là où je m'étais arrêté de Cortana. La chronologie est une vue de tâche riche qui tire parti des activités utilisateur pour afficher une vue chronologique de ce sur quoi vous avez travaillé. Il peut également inclure ce sur quoi vous travailliez sur tous les appareils.
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 dans votre application. Par exemple, si vous utilisez un lecteur RSS, un UserActivity peut être le flux que vous lisez. Si vous jouez à un jeu, le UserActivity pourrait être le niveau auquel vous jouez. Si vous écoutez une application musicale, la UserActivity peut être la playlist que vous écoutez. Si vous travaillez sur un document, l'UserActivity pourrait être là où vous vous êtes arrêté de travailler dessus, 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 interagissez de nouveau avec cette UserActivity au fil du temps, plusieurs enregistrements d'historique y sont consignés.
Ajouter des activités utilisateur à votre application
Un 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é.
- Le ActivationUri est utilisé pour réactiver 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
). - 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.
- Enfin, 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 données https://schema.org.
Pour ajouter un "UserActivity" à votre application :
- Générez des objets UserActivity lorsque le contexte de votre utilisateur change dans l’application (par exemple, navigation entre les pages, nouveau niveau de jeu, etc.).
- Remplissez les objets UserActivity avec le minimum de champs requis : ActivityId, ActivationUriet UserActivity.VisualElements.DisplayText.
- Ajoutez un gestionnaire de schémas personnalisés à votre application afin qu'elle puisse être activée à nouveau 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 méthode GenerateActivityAsync()
ci-dessus obtient un UserActivityChanneld’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 des pages, utilisez un identificateur pour la page ; si elle est basée sur des documents, utilisez le nom du document (ou un hachage du nom).
- S'il existe une activité dans le flux avec le même ID, cette activité sera récupérée depuis le canal avec
UserActivity.State
défini sur Publiée). S’il n’existe aucune activité portant ce nom et que la nouvelle activité est retournée avecUserActivity.State
définie sur Nouvelle. - Les activités sont limitées à votre application. Vous n’avez pas besoin de vous soucier du fait que votre identifiant d’activité entre en conflit avec les identifiants dans d’autres applications.
Après avoir obtenu ou créé le UserActivity, spécifiez les deux autres champs obligatoires : UserActivity.VisualElements.DisplayText
et UserActivity.ActivationUri
.
Ensuite, enregistrez les métadonnées UserActivity en appelant SaveAsync , et enfin CreateSession , qui retourne un UserActivitySession . La UserActivitySession est l'objet que nous pouvons utiliser pour gérer l'engagement réel de l'utilisateur avec le UserActivity. Par exemple, nous devons appeler Dispose()
sur le UserActivitySession lorsque l’utilisateur quitte la page. Dans l’exemple ci-dessus, nous appelons également Dispose()
sur _currentActivity
avant d’appeler CreateSession()
. Cela est dû au fait que nous avons rendu _currentActivity
un champ de membre de notre page, et que nous devons arrêter toute activité existante avant de lancer la nouvelle activité (remarque : le ?
est l’opérateur conditionnel null qui teste la valeur null avant d’effectuer l’accès au membre).
Étant donné que, dans ce cas, le ActivationUri
est 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é à compléter, 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 méthode OnActivated
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, elle vérifie ce que l’application doit faire pour reprendre la tâche pour laquelle elle est mise en marche. Étant une application simple, la seule action que cette application effectue est de vous placer sur la deuxième page lorsque l'application est lancée.
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 Timeline, 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.
]
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 des cartes adaptatives en tant que chaîne JSON à l'élément 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 interservices
Si votre application exécute plusieurs plateformes (par exemple sur Android et iOS) ou gère 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 de deux simples appels REST pour générer des objets d’activité et des objets d’historique , en utilisant les mêmes données que celles décrites ci-dessus.
Résumé
Vous pouvez utiliser l'API UserActivity pour que votre application apparaisse dans la Chronologie et Cortana.
- En savoir plus sur l’API UserActivity
- Consultez l’exemple de code .
- Consultez cartes adaptatives plus sophistiquées.
- Publiez un UserActivity à partir d’iOS, Android ou de votre service web via Microsoft Graph.
- En savoir plus sur Project Rome sur GitHub.
API clés
Rubriques connexes
- activités des utilisateurs (documentation du projet Rome)
- cartes adaptatives
- visualiseur de cartes adaptatives , exemples
- Gérer l'activation des URI
- S’engager avec vos clients sur n’importe quelle plateforme à l’aide de Microsoft Graph, du flux d’activité et des cartes adaptatives
- Microsoft Graph