Freigeben über


watchOS Proaktive Vorschläge in Xamarin

In diesem Artikel wird gezeigt, wie Sie proaktive Vorschläge in einer WatchOS 3-App verwenden, um das Engagement zu fördern, indem das System hilfreiche Informationen proaktiv dem Benutzer präsentieren kann.

Neu bei watchOS 3 präsentieren proaktive Vorschläge Nachrichtenmöglichkeiten für Benutzer, um mit einer Xamarin.iOS-App zu interagieren, indem sie dem Benutzer proaktiv hilfreiche Informationen zu geeigneten Zeiten proaktiv präsentieren.

Informationen zu proaktiven Vorschlägen

Neu bei watchOS 3, enthält eine MapItem Eigenschaft, NSUserActivity mit der die App Standortinformationen bereitstellen kann, die in anderen Kontexten verwendet werden können. Wenn die App z. B. Hotelbewertungen anzeigt und einen MapItem Ort bereitstellt, wenn der Benutzer zur Karten App gewechselt hat, wäre der Ort des Hotels, das sie gerade anzeigen würden, verfügbar.

Die App macht diese Funktionalität für das System verfügbar, indem eine Sammlung von Technologien wie NSUserActivityMapKit, Medienwiedergabe und UIKit verwendet wird. Darüber hinaus erhält die Siri-Integration durch die Bereitstellung von proaktiver Vorschlagsunterstützung für die App kostenlos eine tiefere Siri-Integration.

Standortbasierte Vorschläge

Neu bei watchOS 3 enthält die NSUserActivity Klasse eine MapItem Eigenschaft, mit der der Entwickler Standortinformationen bereitstellen kann, die in anderen Kontexten verwendet werden können. Wenn die App beispielsweise Restaurantbewertungen anzeigt, kann der Entwickler die MapItem Eigenschaft auf den Standort des Restaurants festlegen, das der Benutzer in der App anzeigt. Wenn der Benutzer zur Karten App wechselt, ist der Standort des Restaurants automatisch verfügbar.

Wenn die App die App-Suche unterstützt, kann sie die neuen Adresskomponenten der CSSearchableItemAttributesSet Klasse verwenden, um Speicherorte anzugeben, die der Benutzer möglicherweise besuchen möchte. Durch Festlegen der MapItem Eigenschaft werden die anderen Eigenschaften automatisch ausgefüllt.

Zusätzlich zum Festlegen der Latitude Eigenschaften der Longitude Adresskomponente wird empfohlen, auch die App die und PhoneNumbers die NamedLocation Eigenschaften anzugeben, damit Siri einen Aufruf an den Standort initiieren kann.

Kontextbezogene Siri-Erinnerungen

Ermöglicht es dem Benutzer, Siri zu verwenden, um schnell eine Erinnerung zu erstellen, um die Inhalte anzuzeigen, die er aktuell in der App zu einem späteren Zeitpunkt anzeigt. Wenn sie beispielsweise eine Restaurantbewertung in der App anzeigen, könnten sie Siri aufrufen und sagen : "Erinnern Sie mich daran, wenn ich nach Hause komme." Siri würde die Erinnerung mit einem Link zur Rezension in der App generieren.

Implementieren proaktiver Vorschläge

Das Hinzufügen einer proaktiven Vorschlagsunterstützung zur Xamarin.iOS-App ist in der Regel so einfach wie die Implementierung einiger APIs oder das Erweitern einiger APIs, die die App möglicherweise bereits implementiert.

Proaktive Vorschläge arbeiten mit den Apps auf drei Standard Weisen zusammen:

  • NSUserActivity – Hilft dem System zu verstehen, mit welchen Informationen der Benutzer derzeit auf dem Bildschirm arbeitet.
  • Standortvorschläge – Wenn die App standortbasierte Informationen anbietet oder nutzt, bieten diese API-Erweiterung neue Möglichkeiten, diese Informationen über Apps hinweg freizugeben.

Und wird in der App unterstützt, indem Folgendes implementiert wird:

  • Kontextbezogene Siri Erinnerungen - In iOS 10 wurde erweitert, um Siri schnell eine Erinnerung zu machen, um die Inhalte anzuzeigen, NSUserActivity die sie derzeit zu einem späteren Zeitpunkt in der App anzeigen.
  • Standortvorschläge – iOS 10 verbessert NSUserActivity die Erfassung von Orten, die innerhalb der App angezeigt werden, und fördert sie an vielen Stellen im gesamten System.
  • Kontextbezogene Siri-Anforderungen - NSUserActivity bieten Kontext zu den Informationen, die innerhalb der App präsentiert werden, für Siri, damit der Benutzer Wegbeschreibungen erhalten oder einen Anruf tätigen kann, um Siri innerhalb der App aufzurufen.

Alle diese Features haben eine gemeinsame Sache, sie verwenden alle NSUserActivity in einer Form oder einer anderen, um ihre Funktionalität bereitzustellen.

NSUserActivity

Wie oben erwähnt, hilft das System zu verstehen, NSUserActivity mit welchen Informationen der Benutzer derzeit auf dem Bildschirm arbeitet. NSUserActivity ist ein Mechanismus für die Zwischenspeicherung mit geringem Gewicht, um die Aktivität des Benutzers während der Navigation durch die App zu erfassen. Beispiel: Betrachten Sie die Restaurant-App:

Die Restaurant-App

Mit den folgenden Interaktionen:

  1. Wenn der Benutzer mit der App arbeitet, wird eine NSUserActivity erstellt, um den Zustand der App später neu zu erstellen.
  2. Wenn der Benutzer nach einem Restaurant sucht, wird das gleiche Muster der Erstellung von Aktivitäten befolgt.
  3. Und erneut, wenn der Benutzer ein Ergebnis anzeigt. In diesem letzten Fall zeigt der Benutzer einen Ort und in iOS 10 an, das System kennt bestimmte Konzepte (z. B. Standort- oder Kommunikationsinteraktionen).

Werfen Sie einen genaueren Blick auf den letzten Bildschirm:

Die NSUserActivity-Nutzlast

Hier erstellt die App eine NSUserActivity und wurde mit Informationen aufgefüllt, um den Zustand später neu zu erstellen. Die App enthält auch einige Metadaten, z. B. den Namen und die Adresse des Speicherorts. Mit dieser erstellten Aktivität informiert die App iOS, dass sie den aktuellen Zustand des Benutzers darstellt.

Die App entscheidet dann, ob die Aktivität zur Übergabe über die Luft angekündigt wird, als temporärer Wert für Standortvorschläge gespeichert oder dem Spotlight-Index auf dem Gerät zum Anzeigen in Suchergebnissen hinzugefügt wird.

Weitere Informationen zur Handoff- und Spotlight-Suche finden Sie in unseren Leitfäden "Handoff " und "iOS 9 Neue Such-APIs ".

Erstellen einer Aktivität

Vor dem Erstellen einer Aktivität muss ein Aktivitätstypbezeichner erstellt werden, um ihn zu identifizieren. Der Aktivitätstypbezeichner ist eine kurze Zeichenfolge, die dem NSUserActivityTypes Array der App-Datei hinzugefügt wird, die verwendet wird, um einen bestimmten Benutzeraktivitätstyp Info.plist eindeutig zu identifizieren. Es gibt einen Eintrag im Array für jede Aktivität, die die App unterstützt und für die App-Suche verfügbar macht. Weitere Details finden Sie in unserer Referenz zu Erstellen von Aktivitätstypbezeichnern.

Sehen Sie sich ein Beispiel für eine Aktivität an:

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Inform system of Activity
activity.BecomeCurrent();

Eine neue Aktivität wird mithilfe eines Aktivitätstypbezeichners erstellt. Als Nächstes werden einige Metadaten erstellt, die die Aktivität definieren, damit dieser Zustand zu einem späteren Zeitpunkt wiederhergestellt werden kann. Anschließend erhält die Aktivität einen aussagekräftigen Titel und wird den Benutzerinformationen angefügt. Schließlich sind einige Funktionen aktiviert, und die Aktivität wird an das System gesendet.

Der obige Code könnte weiter verbessert werden, um Metadaten einzuschließen, die Kontext zu der Aktivität bieten, indem die folgenden Änderungen vorgenommen werden:

...

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Inform system of Activity
activity.BecomeCurrent();

Wenn der Entwickler über eine Website verfügt, die dieselben Informationen wie die App anzeigen kann, kann die App die URL enthalten, und der Inhalt kann auf anderen Geräten angezeigt werden, auf denen die App nicht installiert ist (über Handoff):

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

Wiederherstellen einer Aktivität

Um auf ein Suchergebnis (NSUserActivity) für die App zu reagieren, bearbeiten Sie die AppDelegate.cs Datei, und überschreiben Sie die ContinueUserActivity Methode. Zum Beispiel:

public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{

    // Take action based on the activity type
    switch (userActivity.ActivityType) {
    case "com.xamarin.platform":
        // Restore the state of the app here...
        break;
    }

    return true;
}

Stellen Sie sicher, dass dies derselbe Aktivitätstypbezeichner (com.xamarin.platform) ist wie die oben erstellte Aktivität. Die App verwendet die im Zustand NSUserActivity gespeicherten Informationen, um den Zustand wiederherzustellen, an dem der Benutzer aufgehört hat.

Vorteile der Erstellung einer Aktivität

Mit der minimalen Menge an Code, der oben dargestellt wird, kann die App jetzt drei neue iOS 10-Features nutzen:

  • Handoff
  • Blickpunktsuche
  • Kontextbezogene Siri-Erinnerungen

Im folgenden Abschnitt werden zwei weitere neue iOS 10-Features aktiviert:

  • Standortvorschläge
  • Kontextbezogene Siri-Anforderungen

Standortbasierte Vorschläge

Nehmen Sie sich das Beispiel der oben aufgeführten App für die Restaurantsuche an. Wenn sie alle Metadaten und Attribute implementiert NSUserActivity und ordnungsgemäß aufgefüllt hat, kann der Benutzer folgende Aktionen ausführen:

  1. Suchen Sie ein Restaurant in der App, bei dem sie einen Freund treffen möchten.
  2. Wenn der Benutzer zur Karten App wechselt, wird die Adresse des Restaurants automatisch als Ziel vorgeschlagen.
  3. Dies funktioniert auch für Drittanbieter-Apps (die unterstützung NSUserActivity), damit der Benutzer zu einer Ride-Sharing-App wechseln kann und die Adresse des Restaurants dort automatisch als Ziel vorgeschlagen wird.
  4. Es bietet auch Kontext zu Siri, sodass der Benutzer Siri innerhalb der Restaurant-App aufrufen und fragen kann "Wegbeschreibungen abrufen..." und Siri stellt Wegbeschreibungen zum Restaurant bereit, das der Benutzer anzeigt.

Alle oben genannten Funktionen haben eine gemeinsame Sache, sie geben an, wo der Vorschlag ursprünglich stammt. Im Fall des obigen Beispiels handelt es sich um die fiktive Restaurantbewertungs-App.

watchOS 3 wurde verbessert, um diese Funktionalität für eine App durch mehrere kleine Änderungen und Ergänzungen zu vorhandenen Frameworks zu ermöglichen:

  • NSUserActivity enthält zusätzliche Felder zum Erfassen von Standortinformationen, die innerhalb der App angezeigt werden.
  • Es wurden mehrere Ergänzungen an MapKit und CoreSpotlight vorgenommen, um die Position zu erfassen.
  • Funktionen für standortbewusste Standorte wurden Siri, Karten, Multitasking und anderen Apps innerhalb des Systems hinzugefügt.

Um standortbasierte Vorschläge zu implementieren, beginnen Sie mit dem oben dargestellten Aktivitätscode:

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

// Inform system of Activity
activity.BecomeCurrent();

Wenn die App MapKit verwendet, ist sie so einfach wie das Hinzufügen der aktuellen Karte MKMapItem zur Aktivität:

// Save MKMapItem location
activity.MapItem = myMapItem;

Wenn die App mapKit nicht verwendet, kann sie die App-Suche übernehmen und die folgenden neuen Attribute für den Standort angeben:

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
...

attributes.NamedLocation = "Apple Inc.";
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Sehen Sie sich den obigen Code im Detail an. Zuerst ist der Name des Speicherorts in jeder Instanz erforderlich:

attributes.NamedLocation = "Apple Inc.";

Anschließend wird die textbasierte Beschreibung, die für textbasierte Instanzen erforderlich ist (z. B. die QuickType-Tastatur):

attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";

Der Breiten- und Längengrad sind optional, stellen Sie jedoch sicher, dass der Benutzer an den genauen Ort weitergeleitet wird, an den die App sie senden möchte:

attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;

Durch Festlegen der Telefonnummern kann die App Zugriff auf Siri erhalten, damit der Benutzer Siri aus der App aufrufen kann, indem er etwas wie "Diesen Ort anrufen" sagt:

attributes.PhoneNumbers = new string[]{"(800) 275-2273"};

Schließlich kann die App angeben, ob die Instanz für Navigations- und Telefonanrufe geeignet ist:

attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Bewährte Methoden für Aktivitäten

Apple schlägt beim Arbeiten mit Aktivitäten die folgenden bewährten Methoden vor:

  • Wird für faule Nutzlastupdates verwendet NeedsSave .
  • Stellen Sie sicher, dass ein starker Verweis auf die aktuelle Aktivität erhalten bleibt.
  • Übertragen Sie nur kleine Nutzlasten, die nur genügend Informationen enthalten, um den Zustand wiederherzustellen.
  • Stellen Sie sicher, dass die Aktivitätstypbezeichner eindeutig und beschreibend sind, indem Sie die Reverse-DNS-Notation verwenden, um sie anzugeben.

Nutzung von Standortvorschlägen

In diesem nächsten Abschnitt wird der Verbrauch des Standortvorschlags behandelt, der aus anderen Teilen des Systems (z. B. der Karten-App) oder anderen Drittanbieter-Apps stammt.

Vorschläge zum Routing von Apps und Speicherorten

In diesem Abschnitt wird die Verwendung von Standortvorschlägen direkt in einer Routing-App erläutert. Damit die Routing-App diese Funktionalität hinzufügen kann, nutzt der Entwickler das vorhandene MKDirectionsRequest Framework wie folgt:

  • So bewerben Sie die App in Multitasking.
  • So registrieren Sie die App als Routing-App.
  • So behandeln Sie das Starten der App mit einem MapKit-Objekt MKDirectionsRequest .
  • Bieten Sie watchOS die Möglichkeit, die App basierend auf der Benutzerbindung vorzuschlagen.

Wenn die App mit einem MapKit-Objekt MKDirectionsRequest gestartet wird, sollte sie dem Benutzer automatisch Wegbeschreibungen zum angeforderten Speicherort geben oder eine Benutzeroberfläche präsentieren, die es dem Benutzer erleichtert, Wegbeschreibungen zu erhalten. Zum Beispiel:

using System;
using Foundation;
using UIKit;
using MapKit;
using CoreLocation;

namespace MonkeyChat
{
    [Register ("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate, IUISplitViewControllerDelegate
    {
        ...

        public override bool OpenUrl (UIApplication app, NSUrl url, NSDictionary options)
        {
            if (MKDirectionsRequest.IsDirectionsRequestUrl (url)) {
                var request = new MKDirectionsRequest (url);
                var coordinate = request.Destination?.Placemark.Location?.Coordinate;
                var address = request.Destination.Placemark.AddressDictionary;
                if (coordinate.IsValid()) {
                    var geocoder = new CLGeocoder ();
                    geocoder.GeocodeAddress (address, (place, err) => {
                        // Handle the display of the address

                    });
                }
            }

            return true;
        }
    }
}

Sehen Sie sich diesen Code im Detail an. Es überprüft, ob es sich um eine gültige Zielanforderung handelt:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Wenn dies der Grund ist, wird eine MKDirectionsRequest aus der URL erstellt:

var request = new MKDirectionsRequest(url);

Neu in watchOS 3 kann die App eine Adresse senden, die keine Geokoordinaten enthält, sodass der Entwickler die Adresse codieren muss:

var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
    // Handle the display of the address

});

Zusammenfassung

In diesem Artikel wurden proaktive Vorschläge behandelt und gezeigt, wie der Entwickler sie verwenden kann, um den Datenverkehr zu einer Xamarin.iOS-App für watchOS zu steuern. Er behandelte den Schritt zur Implementierung proaktiver Vorschläge und präsentierter Nutzungsrichtlinien.