Freigeben über


Fortsetzen von Benutzeraktivitäten (auch geräteübergreifend)

In diesem Thema wird beschrieben, wie Sie Benutzern dabei helfen können, ihre Aktivitäten in Ihrer App auf ihrem PC und auf allen Geräten 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 täglich verteilt sich auf mehrere Geräte. Wir können unser Handy während des Busses, eines PCs während des Tages, dann ein Smartphone oder Tablet am Abend verwenden. Ab Windows 10 Build 1803 oder höher wird durch das Erstellen einer Benutzeraktivität diese Aktivität in der Windows-Zeitachse und in Cortanas Abholung angezeigt, wo ich die Funktion aufgehört habe. Die Zeitachse ist eine umfangreiche Aufgabenansicht, in der Benutzeraktivitäten genutzt werden, um eine chronologische Ansicht zu zeigen, an der Sie gearbeitet haben. Es kann auch sein, was Sie auf allen Geräten bearbeitet haben.

Windows-Zeitachsenbild

Ebenso können Sie das Verknüpfen Ihres Smartphones mit Ihrem Windows-PC fortsetzen, was Sie zuvor auf Ihrem iOS- oder Android-Gerät ausgeführt 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, könnte eine UserActivity der Feed sein, den Sie lesen. Wenn Sie ein Spiel spielen, könnte UserActivity das Level sein, das Sie spielen. Wenn Sie eine Musik-App hören, könnte UserActivity die Wiedergabeliste sein, die Sie hören. Wenn Sie an einem Dokument arbeiten, könnte die UserActivity an der Stelle stehen, an der Sie daran gearbeitet haben usw. Kurz gesagt stellt eine UserActivity ein Ziel in 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 mit dieser UserActivity im Laufe der Zeit erneut interagieren, werden mehrere Verlaufsdatensätze dafür aufgezeichnet.

Hinzufügen von Benutzeraktivitäten zu Ihrer App

Eine UserActivity ist die Einheit des Benutzereinsatzes in Windows. Sie verfügt über drei Teile: einen URI, der zum Aktivieren der App verwendet wird, zu der die Aktivität gehört, visuelle Elemente und Metadaten, die die Aktivität beschreiben.

  1. Der ActivationUri wird verwendet, um die Anwendung mit einem bestimmten Kontext fortzusetzen. Normalerweise verwendet dieser Link die Form des Protokollhandlers für ein Schema (z. B. "my-app://page2?action=edit") oder eines AppUriHandlers (z. B http://contoso.com/page2?action=edit. ).
  2. VisualElements macht eine Klasse verfügbar, mit der der Benutzer eine Aktivität visuell mit einem Titel, einer Beschreibung oder einem adaptiven Kartenelement identifizieren kann.
  3. Schließlich können Sie Inhalte für die Aktivität speichern, die zum Gruppieren und Abrufen von Aktivitäten in einem bestimmten Kontext verwendet werden kann. Dies nimmt häufig die Form von https://schema.org-Daten an.

So fügen Sie Ihrer App eine UserActivity hinzu:

  1. Generieren Sie UserActivity-Objekte, wenn sich der Kontext des Benutzers innerhalb der App ändert (z. B. Seitennavigation, neues Level im Spiel usw.)
  2. Auffüllen von UserActivity-Objekten mit dem minimalen Satz der erforderlichen Felder: ActivityId, ActivationUri und UserActivity.VisualElements.DisplayText.
  3. Fügen Sie Ihrer App einen benutzerdefinierten Schemahandler hinzu, damit er von einer UserActivity erneut aktiviert werden kann.

Eine UserActivity kann in eine App mit nur wenigen Codezeilen integriert werden. Stellen Sie sich beispielsweise diesen Code in MainPage.xaml.cs in der MainPage-Klasse vor (Hinweis: geht davon aus 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 ab, die aufgerufen wird MainPage.

  • Ihre App sollte Aktivitäten so benennen, dass dieselbe ID jedes Mal generiert wird, wenn sich der Benutzer an einem bestimmten Ort in der App befindet. Wenn Ihre App zum Beispiel seitenbasiert ist, verwenden Sie einen Bezeichner für die Seite; wenn sie dokumentenbasiert ist, 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, der UserActivity.State auf "Veröffentlicht" festgelegt ist. Wenn keine Aktivität mit diesem Namen vorhanden ist und neue Aktivität mit UserActivity.State dem Wert " Neu" zurückgegeben wird.
  • Aktivitäten sind auf Ihre App eingestellt. Sie müssen sich keine Sorgen machen, dass Ihre Aktivitäts-ID mit IDs in anderen Anwendungen kollidiert.

Geben Sie nach dem Abrufen oder Erstellen der UserActivity die beiden anderen erforderlichen Felder an: UserActivity.VisualElements.DisplayTextund UserActivity.ActivationUri.

Speichern Sie als Nächstes die UserActivity-Metadaten, indem Sie SaveAsync aufrufen und schließlich CreateSession, die 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 rufen Dispose() wir auch vor dem Anruf CreateSession()auf_currentActivity. Dies liegt daran, dass wir ein Elementfeld unserer Seite erstellt _currentActivity haben und alle vorhandenen Aktivitäten beenden möchten, bevor wir den neuen starten (Hinweis: Dies ? ist der nullbedingte Operator, der vor dem Ausführen des Memberzugriffs auf NULL testet).

Da es ActivationUri sich in diesem Fall um ein benutzerdefiniertes Schema handelt, müssen wir das Protokoll auch im Anwendungsmanifest registrieren. Dies erfolgt 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 Protokoll-Definition hinzu. Die einzige Eigenschaft, die jetzt ausgefüllt werden muss, ist Name. Er sollte mit dem oben angegebenen URI übereinstimmen. my-app

Jetzt 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 an die Hauptseite zu übergeben, z. B.:

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 angezeigt, 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 dieser App, Sie auf die sekundäre Seite zu bringen, wenn die App angezeigt wird.

Verwenden von adaptiven Karten zur Verbesserung der Zeitachsenerfahrung

Benutzeraktivitäten werden in Cortana und der Zeitachse angezeigt. Wenn Aktivitäten in der Zeitachse angezeigt werden, zeigen wir sie mithilfe des Frameworks für adaptive Karten an. Wenn Sie keine adaptive Karte für jede Aktivität bereitstellen, erstellt Die Zeitachse automatisch eine einfache Aktivitätskarte basierend auf Ihrem Anwendungsnamen und -symbol, dem Titelfeld und dem optionalen Beschreibungsfeld. Nachfolgend sehen Sie ein Beispiel für eine Nutzlast für adaptive Karten und die karte, die sie erzeugt.

Eine adaptive Karte]

Beispiel für json-Zeichenfolge 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 die Nutzlast adaptiver Karten als JSON-Zeichenfolge der UserActivity wie folgt hinzu:

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

Plattformübergreifende 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 verwaltet, können Sie UserActivities über Microsoft Graph veröffentlichen. Nachdem Ihre Anwendung oder Ihr Dienst mit einem Microsoft-Konto authentifiziert wurde, dauert es nur zwei einfache REST-Aufrufe, um Aktivitäts- und Verlaufsobjekte zu generieren, wobei die gleichen Daten wie oben beschrieben verwendet werden.

Zusammenfassung

Sie können die UserActivity-API verwenden, damit Ihre App auf der Zeitachse und cortana angezeigt wird.

Wichtige APIs