Fortsetzen von Benutzeraktivitäten (auch geräteübergreifend)
In diesem Thema wird beschrieben, wie Sie Benutzern helfen können, ihre Aktivitäten in Ihrer App auf ihrem PC und geräteübergreifend fortzusetzen.
Hinweis
Ab Juli 2021 haben Benutzer, deren Aktivitätsverlauf auf ihren Windows-Geräten über ihr Microsoft-Konto (MSA) synchronisiert wird, nicht mehr die Möglichkeit, neue Aktivitäten auf die Zeitachse hochzuladen. Sie können die Zeitachse weiterhin verwenden und ihren Aktivitätsverlauf (Informationen zu aktuellen Apps, Websites und Dateien) auf ihrem lokalen PC anzeigen. Mit AAD verbundene Konten sind nicht betroffen.
Benutzeraktivitäten und Zeitachse
Unsere Zeit verteilt sich jeden Tag auf mehrere Geräte. Wir können unser Handy im Bus verwenden, einen PC tagsüber, dann ein Smartphone oder Tablet am Abend. Ab Windows 10 Build 1803 oder höher wird diese Aktivität durch das Erstellen einer Benutzeraktivität in der Windows-Zeitachse und in Cortanas Feature "Pick up" angezeigt, wo ich aufgehört habe. Die Zeitachse ist eine umfangreiche Aufgabenansicht, die Benutzeraktivitäten nutzt, um eine chronologische Ansicht der Arbeit anzuzeigen. Es kann auch enthalten, an was Sie geräteübergreifend gearbeitet haben.
Ebenso können Sie durch das Verknüpfen Ihres Smartphones mit Ihrem Windows-PC fortfahren, was Sie zuvor auf Ihrem iOS- oder Android-Gerät getan haben.
Stellen Sie sich eine UserActivity als etwas spezifisches vor, an dem der Benutzer in Ihrer App gearbeitet hat. Wenn Sie beispielsweise einen RSS-Reader verwenden, kann eine UserActivity der Feed sein, den Sie gerade lesen. Wenn Sie ein Spiel spielen, kann die UserActivity die Ebene sein, die Sie spielen. Wenn Sie eine Musik-App hören, kann die UserActivity die Wiedergabeliste sein, die Sie hören. Wenn Sie an einem Dokument arbeiten, kann die UserActivity dort sein, wo Sie aufgehört haben, daran zu arbeiten usw. Kurz gesagt, eine UserActivity stellt ein Ziel innerhalb Ihrer App dar, sodass der Benutzer seine Aktivitäten fortsetzen kann.
Wenn Sie mit einer UserActivity interagieren, indem Sie UserActivity.CreateSession aufrufen, erstellt das System einen Verlaufsdatensatz, der die Start- und Endzeit für diese UserActivity angibt. Wenn Sie diese UserActivity im Laufe der Zeit erneut nutzen, werden mehrere Verlaufsdatensätze dafür aufgezeichnet.
Hinzufügen von Benutzeraktivitäten zu Ihrer App
Eine UserActivity ist die Einheit der Benutzerinteraktion in Windows. Es umfasst drei Teile: einen URI, der zum Aktivieren der App verwendet wird, zu der die Aktivität gehört, Visuals und Metadaten, die die Aktivität beschreiben.
- Der ActivationUri wird verwendet, um die Anwendung mit einem bestimmten Kontext fortzusetzen. In der Regel hat dieser Link die Form eines Protokollhandlers für ein Schema (z. B. "my-app://page2?action=edit") oder einen AppUriHandler (z. B
http://contoso.com/page2?action=edit
. ). - VisualElements macht eine Klasse verfügbar, die es dem Benutzer ermöglicht, eine Aktivität visuell mit einem Titel, einer Beschreibung oder adaptiven Kartenelementen zu identifizieren.
- Schließlich können Sie in Content Metadaten für die Aktivität speichern, die zum Gruppieren und Abrufen von Aktivitäten in einem bestimmten Kontext verwendet werden können. Häufig erfolgt dies in Form von https://schema.org Daten.
So fügen Sie Ihrer App eine UserActivity hinzu:
- Generieren von UserActivity-Objekten , wenn sich der Kontext Ihres Benutzers innerhalb der App ändert (z. B. Seitennavigation, neue Spielebene usw.)
- Füllen Sie UserActivity-Objekte mit dem Mindestsatz der erforderlichen Felder auf: ActivityId, ActivationUri und UserActivity.VisualElements.DisplayText.
- Fügen Sie Ihrer App einen benutzerdefinierten Schemahandler hinzu, damit er von einer UserActivity wieder aktiviert werden kann.
Eine UserActivity kann mit nur wenigen Codezeilen in eine App integriert werden. Stellen Sie sich beispielsweise diesen Code in MainPage.xaml.cs innerhalb der MainPage-Klasse vor (Hinweis: setzt voraus 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();
}
Die erste Zeile in der GenerateActivityAsync()
obigen Methode ruft den UserActivityChannel eines Benutzers ab. Dies ist der Feed, in dem die Aktivitäten dieser App veröffentlicht werden. Die nächste Zeile fragt den Kanal einer Aktivität mit dem Namen ab MainPage
.
- Ihre App sollte Aktivitäten so benennen, dass die gleiche ID jedes Mal generiert wird, wenn sich der Benutzer an einem bestimmten Speicherort in der App befindet. Wenn Ihre App beispielsweise seitenbasiert ist, verwenden Sie einen Bezeichner für die Seite. wenn das Dokument basiert, verwenden Sie den Namen des Dokuments (oder einen Hash des Namens).
- Wenn im Feed eine Aktivität mit derselben ID vorhanden ist, wird diese Aktivität vom Kanal zurückgegeben, wobei
UserActivity.State
auf Veröffentlicht festgelegt ist). Wenn keine Aktivität mit diesem Namen vorhanden ist, und die neue Aktivität mitUserActivity.State
dem Wert Neu zurückgegeben wird. - Aktivitäten sind auf Ihre App ausgerichtet. Sie müssen sich keine Gedanken darüber machen, dass Ihre Aktivitäts-ID mit IDs in anderen Apps kollidieren.
Geben Sie nach dem Abrufen oder Erstellen der UserActivity die beiden anderen erforderlichen Felder an: UserActivity.VisualElements.DisplayText
und UserActivity.ActivationUri
.
Speichern Sie als Nächstes die UserActivity-Metadaten , indem Sie SaveAsync und schließlich CreateSession aufrufen, das eine UserActivitySession zurückgibt. Die UserActivitySession ist das Objekt, das wir verwenden können, um zu verwalten, wenn der Benutzer tatsächlich mit der UserActivity beschäftigt ist. Beispielsweise sollten wir die UserActivitySession aufrufenDispose()
, wenn der Benutzer die Seite verlässt. Im obigen Beispiel wird auch vor dem _currentActivity
Aufrufen CreateSession()
von aufgerufenDispose()
. Dies liegt daran, dass wir ein Memberfeld unserer Seite erstellt haben _currentActivity
, und wir möchten alle vorhandenen Aktivitäten beenden, bevor wir die neue Aktivität starten (Beachten Sie: der ?
NULL-bedingte Operator , der vor dem Ausführen des Memberzugriffs auf NULL testet).
Da es sich in diesem Fall ActivationUri
um ein benutzerdefiniertes Schema handelt, müssen wir das Protokoll auch im Anwendungsmanifest registrieren. Dies geschieht in der XML-Datei Package.appmanifest oder mithilfe des Designers.
Um die Änderung mit dem Designer vorzunehmen, doppelklicken Sie in Ihrem Projekt auf die Datei Package.appmanifest, um den Designer zu starten, wählen Sie die Registerkarte Deklarationen aus, und fügen Sie eine Protokolldefinition hinzu. Die einzige Eigenschaft, die vorerst ausgefüllt werden muss, ist Name. Er sollte mit dem oben my-app
angegebenen URI übereinstimmen.
Nun müssen wir Code schreiben, um der App mitzuteilen, was zu tun ist, wenn sie von einem Protokoll aktiviert wurde. Wir überschreiben die OnActivated
-Methode in App.xaml.cs, um den URI wie folgt an die Hauptseite zu übergeben:
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();
}
Dieser Code erkennt, ob die App über ein Protokoll aktiviert wurde. Wenn dies der Fall war, wird überprüft, was die App tun soll, um die Aufgabe fortzusetzen, für die sie aktiviert wird. Da es sich um eine einfache App handelt, ist die einzige Aktivität, die diese App fortsetzt, Sie auf die sekundäre Seite zu versetzen, wenn die App angezeigt wird.
Verwenden von adaptiven Karten zur Verbesserung der Zeitachse
Benutzeraktivitäten werden in Cortana und der Zeitachse angezeigt. Wenn Aktivitäten in der Zeitachse angezeigt werden, werden sie mithilfe des Frameworks für adaptive Karten angezeigt. Wenn Sie keine adaptive Karte für jede Aktivität bereitstellen, erstellt Timeline automatisch eine einfache Aktivitätskarte basierend auf dem Anwendungsnamen und -symbol, dem Titelfeld und dem optionalen Beschreibungsfeld. Im Folgenden finden Sie ein Beispiel für adaptive Kartennutzlast und die karte, die sie erzeugt.
]
JSON-Beispielzeichenfolge für adaptive Kartennutzlast:
{
"$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
}
]
}
]
}
Fügen Sie der UserActivity die Nutzlast adaptiver Karten als JSON-Zeichenfolge wie folgt hinzu:
activity.VisualElements.Content =
Windows.UI.Shell.AdaptiveCardBuilder.CreateAdaptiveCardFromJson(jsonCardText); // where jsonCardText is a JSON string that represents the card
Plattform- und Service-to-Service-Integration
Wenn Ihre App plattformübergreifend ausgeführt wird (z. B. unter Android und iOS) oder den Benutzerstatus in der Cloud beibehält, können Sie UserActivities über Microsoft Graph veröffentlichen. Nachdem Ihre Anwendung oder Ihr Dienst mit einem Microsoft-Konto authentifiziert wurde, werden nur zwei einfache REST-Aufrufe benötigt, um Aktivitäts- und Verlaufsobjekte zu generieren, wobei dieselben Daten wie oben beschrieben verwendet werden.
Zusammenfassung
Sie können die UserActivity-API verwenden, damit Ihre App in Der Zeitachse und Cortana angezeigt wird.
- Weitere Informationen zur UserActivity-API
- Sehen Sie sich den Beispielcode an.
- Sehen Sie sich anspruchsvollere adaptive Karten an.
- Veröffentlichen Sie eine UserActivity von iOS, Android oder Ihrem Webdienst über Microsoft Graph.
- Erfahren Sie mehr über Project Rome auf GitHub.