Suchen mit NSUserActivity in Xamarin.iOS

NSUserActivity wurde in iOS 8 eingeführt und wird verwendet, um die Daten für Handoff bereitzustellen. Sie können Aktivitäten in bestimmten Teilen Ihrer App erstellen, die dann an eine andere Instanz Ihrer App übergeben werden können, die auf einem anderen iOS-Gerät ausgeführt wird. Das empfangende Gerät kann dann die aktivität fortsetzen, die auf dem vorherigen Gerät gestartet wurde, und nimmt direkt dort auf, wo der Benutzer aufgehört hat. Weitere Informationen zur Verwendung von Handoff finden Sie in unserer Dokumentation Einführung in Handoff.

Neu bei iOS 9, NSUserActivity kann indiziert (sowohl öffentlich als auch privat) und über Spotlight Search und Safari durchsucht werden. Durch Markieren einer NSUserActivity als durchsuchbaren und Hinzufügen von indizierbaren Metadaten kann die Aktivität in den Suchergebnissen auf dem iOS-Gerät aufgeführt werden.

The App History overview

Wenn der Benutzer ein Suchergebnis auswählt, das zu einer Aktivität aus Ihrer App gehört, wird die App gestartet, und die vom NSUserActivity Benutzer beschriebene Aktivität wird neu gestartet und dem Benutzer angezeigt.

Die folgenden Eigenschaften NSUserActivity werden verwendet, um die App-Suche zu unterstützen:

  • EligibleForHandoff – Wenn true, kann diese Aktivität in einem Handoff-Vorgang verwendet werden.
  • EligibleForSearch – Wenn truediese Aktivität dem On-Device-Index hinzugefügt und in den Suchergebnissen angezeigt wird.
  • EligibleForPublicIndexing – Wenn truediese Aktivität dem cloudbasierten Index von Apple hinzugefügt und Benutzern (über die Suche) angezeigt wird, die Ihre App noch nicht auf ihrem iOS-Gerät installiert haben. Weitere Informationen finden Sie im Abschnitt "Öffentliche Suchindizierung" weiter unten.
  • Title – Stellt einen Titel für Ihre Aktivität bereit und wird in den Suchergebnissen angezeigt. Benutzer können auch nach dem Text des Titels selbst suchen.
  • Keywords – Ist ein Array von Zeichenfolgen, die verwendet werden, um Ihre Aktivität zu beschreiben, die vom Endbenutzer indiziert und durchsucht werden kann.
  • ContentAttributeSet – Wird CSSearchableItemAttributeSet verwendet, um Ihre Aktivität detailliert zu beschreiben und umfassende Inhalte in den Suchergebnissen bereitzustellen.
  • ExpirationDate – Wenn eine Aktivität nur bis zu einem bestimmten Datum angezeigt werden soll, können Sie dieses Datum hier angeben.
  • WebpageURL – Wenn die Aktivität im Web angezeigt werden kann oder Wenn Ihre App Safaris Deep-Links unterstützt, können Sie den Link festlegen, den Sie hier besuchen möchten.

NSUserActivity – Schnellstart

Führen Sie die folgenden Anweisungen aus, um eine durchsuchbare NSUserActivity App zu implementieren:

Es gibt einige zusätzliche Vorteile , die Sie verwenden NSUserActivity können, um Ihre Inhalte durchsuchbar zu machen.

Erstellen von Aktivitätstypbezeichnern

Bevor Sie eine Suchaktivität erstellen können, müssen Sie einen Aktivitätstypbezeichner erstellen, um sie zu identifizieren. Der Aktivitätstypbezeichner ist eine kurze Zeichenfolge, die dem NSUserActivityTypes Array der Info.plist-Datei der App hinzugefügt wird, die verwendet wird, um einen bestimmten Benutzeraktivitätstyp 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.

Apple schlägt vor, eine Reverse-DNS-Schreibweise für den Aktivitätstypbezeichner zu verwenden, um Kollisionen zu vermeiden. Beispiel: com.company-name.appname.activity für bestimmte appbasierte Aktivitäten oder com.company-name.activity für Aktivitäten, die über mehrere Apps hinweg ausgeführt werden können.

Der Aktivitätstypbezeichner wird beim Erstellen einer NSUserActivity Instanz verwendet, um den Aktivitätstyp zu identifizieren. Wenn eine Aktivität als Ergebnis des Tippens auf ein Suchergebnis fortgesetzt wird, bestimmt der Aktivitätstyp (zusammen mit der Team-ID der App), welche App gestartet werden soll, um die Aktivität fortzusetzen.

Um die erforderlichen Aktivitätstypbezeichner zu erstellen, um dieses Verhalten zu unterstützen, bearbeiten Sie die Info.plist-Datei , und wechseln Sie zur Quellansicht . Fügen Sie einen NSUserActivityTypes Schlüssel hinzu, und erstellen Sie Bezeichner im folgenden Format:

The NSUserActivityTypes key and required identifiers in the plist editor

Im obigen Beispiel haben wir einen neuen Aktivitätstypbezeichner für die Suchaktivität (com.xamarin.platform) erstellt. Ersetzen Sie beim Erstellen Ihrer eigenen Apps den Inhalt des NSUserActivityTypes Arrays durch die Aktivitätstypbezeichner, die für die von Ihrer App unterstützten Aktivitäten spezifisch sind.

Erstellen einer Aktivität

Im Folgenden finden Sie ein Beispiel zum Erstellen einer Aktivität für eine gehostete Suche auf einem Gerät:

// Create App Search 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;

// Add App Search ability
activity.EligibleForSearch = true;
activity.BecomeCurrent();

Wir könnten weitere Details hinzufügen, indem wir die ContentAttributeSet Eigenschaft unserer NSUserActivity wie folgt festlegen:

Addition Search Details overview

Mithilfe eines ContentAttributeSet Steuerelements können Sie umfangreiche Suchergebnisse erstellen, die den Endbenutzer dazu verleiten, mit ihnen zu interagieren.

Reagieren auf eine Aktivität

Um auf ein Suchergebnis (NSUserActivity) für unsere 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;
}

Beachten Sie, dass dies die gleiche Methodenüberschreibung ist, die verwendet wird, um auf Handoffanforderungen zu reagieren. Wenn der Benutzer nun in den Spotlight-Suchergebnissen auf einen Link aus unserer App klickt, wird unsere App in den Vordergrund gebracht (oder gestartet, wenn sie noch nicht ausgeführt wird), und der Inhalt, die Navigation oder das Feature, das durch diesen Link dargestellt wird, werden angezeigt:

Restore Previous State from Search

Öffentliche Suchindizierung

Wie oben gezeigt, erleichtert iOS 9 das Bereitstellen des Suchzugriffs auf App-Inhalte und -Features, die der Benutzer bereits auf einem bestimmten iOS-Gerät entdeckt und verwendet hat. Mit der öffentlichen Indizierung bietet iOS 9 benutzern, die noch keine Inhalte oder Features gefunden haben (oder die die App noch nicht installiert haben), um diese Ergebnisse auch in ihren Suchvorgängen zu erhalten.

Die öffentliche Indizierung funktioniert wie folgt:

  1. Wenn Sie eine Aktivität für Ihre App erstellen, können Sie sie als öffentlich markieren.
  2. Öffentliche Aktivitäten werden an Apple gesendet und in der Cloud indiziert.
  3. Wenn mehr Benutzer mit Ihrer App auf einem Gerät interagieren und die spezifischen Features oder Inhalte verwenden, die durch die Aktivität dargestellt werden, steigt sie in der Rangfolge.
  4. Beliebte öffentliche Ergebnisse stehen anderen Benutzern zur Verfügung, auch wenn sie die App nicht installiert haben.
  5. Diese öffentlichen Ergebnisse werden in der Spotlight-Suche und Safari angezeigt (wenn die Aktivität eine URL enthält).

Wir können die oben erstellte private Suchaktivität übernehmen und erweitern, um öffentlich zu sein:

// Create App Search 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;

// Add App Search ability
activity.EligibleForSearch = true;
activity.EligibleForPublicIndexing = true;
activity.BecomeCurrent();

Da eine Aktivität für die öffentliche Indizierung durch Festlegen EligibleForPublicIndexing = truefestgelegt wurde, bedeutet dies nicht, dass sie automatisch zum öffentlichen Cloudindex von Apple hinzugefügt wird. Die folgenden Bedingungen müssen zuerst erfüllt sein:

  1. Sie muss in Suchergebnissen angezeigt und von vielen Benutzern ausgewählt werden. Die Ergebnisse werden erneut Standard privat, bis ein Schwellenwert für den Aktivitätseinsatz erreicht wurde.
  2. Die App-Bereitstellung verhindert, dass benutzerspezifische Daten indiziert und öffentlich gemacht werden.

Zusätzliche Vorteile

Durch die Übernahme der App-Suche über NSUserActivity Ihre App erhalten Sie auch die folgenden Features:

  • Handoff – Da die App-Suche Inhalte, Navigation und/oder Features mit demselben Mechanismus wie Handoff (NSUserActivity) verfügbar macht, können Sie benutzern Ihrer App ganz einfach erlauben, eine Aktivität auf einem Gerät zu starten und auf einem anderen Gerät fortzusetzen.
  • Siri-Vorschläge – Zusammen mit den Standardvorschlägen, die Siri-Vorschläge normalerweise machen, können Aktive aus Ihrer App automatisch vorgeschlagen werden.
  • Siri Smart Reminders – Benutzer können Siri bitten, sie an Aktivitäten ihrer App zu erinnern.