Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp wordt beschreven hoe gebruikers kunnen hervatten wat ze in uw app op hun pc en op verschillende apparaten deden.
Opmerking
Vanaf juli 2021 hebben gebruikers die een activiteitengeschiedenis hebben gesynchroniseerd op hun Windows-apparaten via hun Microsoft-account (MSA) niet langer de mogelijkheid om nieuwe activiteiten in de tijdlijn te uploaden. Ze kunnen de tijdlijn nog steeds gebruiken en hun activiteitengeschiedenis (informatie over recente apps, websites en bestanden) bekijken op hun lokale pc. AAD-verbonden accounts zullen geen invloed ondervinden.
Gebruikersactiviteiten en tijdlijn
Onze tijd wordt elke dag verspreid over meerdere apparaten. We kunnen onze telefoon gebruiken tijdens de bus, een pc overdag en vervolgens 's avonds een telefoon of tablet. Vanaf Windows 10 Build 1803 of hoger, maakt het aanmaken van een Gebruikersactiviteit dat deze activiteit wordt weergegeven in de Windows Tijdlijn en in Cortana's Ophalen waar ik gebleven was-functie. Tijdlijn is een uitgebreide taakweergave die gebruikmaakt van gebruikersactiviteiten om een chronologische weergave weer te geven van waaraan u hebt gewerkt. Het kan ook omvatten waaraan u op verschillende apparaten werkte.
Als u uw telefoon koppelt aan uw Windows-pc, kunt u doorgaan met wat u eerder op uw iOS- of Android-apparaat deed.
Denk aan een UserActivity als iets specifieks waar de gebruiker aan werkte in uw app. Als u bijvoorbeeld een RSS-lezer gebruikt, kan een UserActivity de feed zijn die u leest. Als u een game speelt, kan de UserActivity het niveau zijn dat u speelt. Als u naar een muziek-app luistert, kan de UserActivity de afspeellijst zijn waarnaar u luistert. Als u aan een document werkt, is de UserActivity- mogelijk waar u gebleven was, enzovoort. Kortom, een UserActivity vertegenwoordigt een bestemming in uw app, zodat de gebruiker kan hervatten wat ze deden.
Wanneer u een UserActivity aanroept door UserActivity.CreateSession-aan te roepen, maakt het systeem een geschiedenisrecord die de begin- en eindtijd aangeeft voor die UserActivity. Wanneer u na verloop van tijd deze UserActivity opnieuw gebruikt, worden er meerdere historische gegevens vastgelegd.
Gebruikersactiviteiten toevoegen aan uw app
Een UserActivity is de eenheid van gebruikersbetrokkenheid in Windows. Het heeft drie delen: een URI die wordt gebruikt om de app te activeren waartoe de activiteit behoort, visuals en metagegevens die de activiteit beschrijft.
- De ActivationUri- wordt gebruikt om de toepassing te hervatten met een specifieke context. Normaal gesproken heeft deze koppeling de vorm van protocolhandler voor een schema (bijvoorbeeld 'my-app://page2?action=edit') of van een AppUriHandler (bijvoorbeeld
http://contoso.com/page2?action=edit). - VisualElements een klasse beschikbaar maakt waarmee de gebruiker een activiteit visueel kan identificeren met een titel, beschrijving of adaptieve kaartelementen.
- Ten slotte Inhoud kunt u metagegevens opslaan voor de activiteit die kan worden gebruikt om activiteiten onder een specifieke context te groeperen en op te halen. Dit komt vaak in de vorm van https://schema.org gegevens.
Een UserActivity- toevoegen aan uw app:
- Genereer UserActivity objecten wanneer de context van uw gebruiker in de app verandert (zoals paginanavigatie, nieuw gameniveau, enzovoort)
- Vul UserActivity-objecten in met de minimale set vereiste velden: ActivityId, ActivationUrien UserActivity.VisualElements.DisplayText.
- Voeg een aangepaste schemahandler toe aan uw app, zodat deze opnieuw kan worden geactiveerd door een UserActivity.
Een UserActivity kan worden geïntegreerd in een app met slechts een paar regels code. Stel bijvoorbeeld deze code in MainPage.xaml.cs, in de klasse MainPage (opmerking: wordt ervan uitgegaan 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();
}
De eerste regel in de bovenstaande GenerateActivityAsync() methode haalt de UserActivityChannel-van een gebruiker op. Dit is de feed waarnaar de activiteiten van deze app worden gepubliceerd. De volgende regel voert een query uit op het kanaal van een activiteit met de naam MainPage.
- Uw app moet activiteiten op een zodanige manier noemen dat dezelfde id wordt gegenereerd wanneer de gebruiker zich op een bepaalde locatie in de app bevindt. Als uw app bijvoorbeeld op pagina's is gebaseerd, gebruikt u een id voor de pagina; als het document is gebaseerd, gebruikt u de naam van het document (of een hash van de naam).
- Als er een bestaande activiteit in de feed is met dezelfde ID, wordt die activiteit geretourneerd vanuit het kanaal met
UserActivity.Stateingesteld op Gepubliceerd). Als er geen activiteit met die naam is, wordt een nieuwe activiteit metUserActivity.Stateingesteld op Nieuweteruggegeven. - Activiteiten zijn beperkt tot uw app. U hoeft zich geen zorgen te maken over uw activiteits-id die botst met id's in andere apps.
Geef na het verkrijgen of maken van de UserActivityde andere twee vereiste velden op: UserActivity.VisualElements.DisplayTexten UserActivity.ActivationUri.
Sla vervolgens de UserActivity metagegevens op door SaveAsync-aan te roepen en ten slotte CreateSession-, waarmee een UserActivitySession-wordt geretourneerd. De UserActivitySession is het object dat we kunnen gebruiken om te beheren wanneer de gebruiker daadwerkelijk bezig is met de UserActivity. We moeten bijvoorbeeld Dispose() aanroepen op de UserActivitySession wanneer de gebruiker de pagina verlaat. In het bovenstaande voorbeeld roepen we ook Dispose() aan op _currentActivity voordat we CreateSession()aanroepen. Dit komt doordat we _currentActivity een veldeigenschap van onze pagina hebben gemaakt en we alle actieve activiteiten willen beëindigen voordat we de nieuwe activiteit starten (opmerking: de ? is de null-voorwaardelijke operator die op null controleert voordat de eigenschapstoegang plaatsvindt).
Omdat in dit geval het ActivationUri een aangepast schema is, moeten we ook het protocol registreren in het toepassingsmanifest. Dit wordt gedaan in het XML-bestand Package.appmanifest of met behulp van de ontwerpfunctie.
Als u de wijziging wilt aanbrengen met de ontwerpfunctie, dubbelklikt u op het bestand Package.appmanifest in uw project om de ontwerpfunctie te starten, selecteert u het tabblad Declaraties en voegt u een Protocol definitie toe. De enige eigenschap die voorlopig moet worden ingevuld, is Naam. Deze moet overeenkomen met de URI die we hierboven hebben opgegeven, my-app.
Nu moeten we code schrijven om de app te laten weten wat er moet worden gedaan wanneer deze door een protocol is geactiveerd. We overschrijven de OnActivated methode in App.xaml.cs om de URI door te geven aan de hoofdpagina, zoals:
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();
}
Wat deze code doet, is detecteren of de app is geactiveerd via een protocol. Als dit het geval is, ziet de app wat de app moet doen om de taak te hervatten waarvoor deze wordt geactiveerd. Aangezien het een eenvoudige app is, is de enige activiteit die de app hervat het plaatsen van u op de secundaire pagina wanneer de app wordt geopend.
Adaptieve kaarten gebruiken om de tijdlijnervaring te verbeteren
Gebruikersactiviteiten worden weergegeven in Cortana en tijdlijn. Wanneer activiteiten worden weergegeven in de tijdlijn, geven we ze weer met behulp van het Adaptieve kaart framework. Als u geen adaptieve kaart voor elke activiteit opgeeft, maakt Tijdlijn automatisch een eenvoudige activiteitskaart op basis van de naam en het pictogram van uw toepassing, het titelveld en het optionele beschrijvingsveld. Hieronder ziet u een voorbeeld van een payload van een Adaptive Card en de kaart die deze oplevert.
]
Voorbeeld van JSON-tekenreeks voor adaptieve kaartlading:
{
"$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
}
]
}
]
}
Voeg de payload voor Adaptive Cards in de vorm van een JSON-tekenreeks toe aan de UserActivity als volgt:
activity.VisualElements.Content =
Windows.UI.Shell.AdaptiveCardBuilder.CreateAdaptiveCardFromJson(jsonCardText); // where jsonCardText is a JSON string that represents the card
Platformoverschrijdende integratie en service-naar-service-integratie
Als uw app platformoverschrijdend wordt uitgevoerd (bijvoorbeeld op Android en iOS) of de gebruikersstatus in de cloud onderhoudt, kunt u UserActivities publiceren via Microsoft Graph. Zodra uw toepassing of service is geverifieerd met een Microsoft-account, duurt het slechts twee eenvoudige REST-aanroepen om Activity en History-objecten te genereren, met behulp van dezelfde gegevens als hierboven beschreven.
Samenvatting
U kunt de UserActivity-API gebruiken om uw app in tijdlijn en Cortana weer te geven.
- Meer informatie over de UserActivity API-
- Bekijk de voorbeeldcode.
- Zie geavanceerdere adaptieve kaarten.
- Publiceer een UserActivity vanuit iOS, Android of uw webservice via Microsoft Graph.
- Meer informatie over Project Rome op GitHub.