Freigeben über


SiriKit-Updates in iOS 11

SiriKit wurde in iOS 10 eingeführt, mit einer Reihe von Servicedomänen (einschließlich Training, Fahrbuchung und Tätigen von Anrufen). Lesen Sie den Abschnitt SiriKit für SiriKit-Konzepte und die Implementierung von SiriKit in Ihrer App.

Siri-Aufgabenlistendemo

SiriKit in iOS 11 fügt diese neuen und aktualisierten Intent-Domänen hinzu:

  • Listen und Notizen – Neu! Stellt eine API für Apps zum Verarbeiten von Aufgaben und Notizen bereit.
  • Visuelle Codes – Neu! Siri kann QR-Codes anzeigen, um Kontaktinformationen freizugeben oder an Zahlungstransaktionen teilzunehmen.
  • Zahlungen – Such- und Überweisungsabsichten für Zahlungsinteraktionen hinzugefügt.
  • Fahrtbuchung – Hinzugefügte Stornierungs- und Feedbackabsichten.

Zu weiteren neuen Features gehören:

  • Alternative App-Namen – Bietet Aliase, mit denen Kunden Siri mitteilen können, ihre App als Ziel zu verwenden, indem alternative Namen/Aussprachen angeboten werden.
  • Starten von Workouts – Bietet die Möglichkeit, ein Training im Hintergrund zu starten.

Einige dieser Features werden unten erläutert. Weitere Details zu den anderen Finden Sie in der SiriKit-Dokumentation von Apple.

Listen und Notizen

Die neue Liste und Notizendomäne bietet eine API für Apps zum Verarbeiten von Aufgaben und Notizen über Siri-Sprachanforderungen.

Aufgaben

  • Haben Sie einen Titel und einen Abschlussstatus.
  • Optional können Sie einen Stichtag und einen Ort angeben.

Hinweise

  • Haben Sie einen Titel und ein Inhaltsfeld.

Sowohl Aufgaben als auch Notizen können in Gruppen organisiert werden.

So verarbeiten Sie eine SiriKit-Anforderung

Verarbeiten Sie eine SiriKit-Anforderung, indem Sie die folgenden Schritte ausführen:

  1. Resolve – Überprüfen Sie Parameter, und fordern Sie weitere Informationen vom Benutzer an (falls erforderlich).
  2. Confirm – Endgültige Überprüfung und Überprüfung, ob die Anforderung verarbeitet werden kann.
  3. Handle – Ausführen des Vorgangs (Aktualisieren von Daten oder Ausführen von Netzwerkvorgängen).

Die ersten beiden Schritte sind optional (obwohl empfohlen), und der letzte Schritt ist erforderlich. Ausführlichere Anweisungen finden Sie im Abschnitt SiriKit.

Auflösen und Bestätigen von Methoden

Diese optionalen Methoden ermöglichen es Ihrem Code, Überprüfungen durchzuführen, Standardwerte auszuwählen oder zusätzliche Informationen vom Benutzer anzufordern.

Als Beispiel für die IINCreateTaskListIntent Schnittstelle ist HandleCreateTaskListdie erforderliche Methode . Es gibt vier optionale Methoden, die mehr Kontrolle über die Siri-Interaktion bieten:

  • ResolveTitle – Überprüft den Titel, legt einen Standardtitel fest (falls zutreffend), oder signalisiert, dass die Daten nicht erforderlich sind.
  • ResolveTaskTitles – Überprüft die Liste der vom Benutzer gesprochenen Aufgaben.
  • ResolveGroupName – Überprüft den Gruppennamen, wählt eine Standardgruppe oder signalisiert, dass die Daten nicht erforderlich sind.
  • ConfirmCreateTaskList – Überprüft, ob Ihr Code den angeforderten Vorgang ausführen kann, aber nicht (nur die Handle* Methoden sollten Daten ändern).

Behandeln der Absicht

Es gibt sechs Absichten in der Listen- und Notizendomäne, drei für Aufgaben und drei für Notizen. Die Methoden, die Sie zum Behandeln dieser Absichten implementieren müssen, sind:

  • Für Vorgänge:
    • HandleAddTasks
    • HandleCreateTaskList
    • HandleSetTaskAttribute
  • Für Notizen:
    • HandleCreateNote
    • HandleAppendToNote
    • HandleSearchForNotebookItems

Jede Methode hat einen bestimmten Absichtstyp übergeben, der alle Informationen enthält, die Siri aus der Anforderung des Benutzers analysiert hat (und möglicherweise in den Resolve* Und Confirm* Methoden aktualisiert). Ihre App muss die bereitgestellten Daten analysieren, dann einige Aktionen ausführen, um die Daten zu speichern oder anderweitig zu verarbeiten, und ein Ergebnis zurückgeben, das Siri spricht und dem Benutzer anzeigt.

Antwortcodes

Die erforderlichen Handle* und optionalen Confirm* Methoden geben einen Antwortcode an, indem sie einen Wert für das Objekt festlegen, das sie an den Abschlusshandler übergeben. Antworten stammen aus der INCreateTaskListIntentResponseCode Aufzählung:

  • Ready – Gibt während der Bestätigungsphase (dh aus einer Confirm* Methode, aber nicht aus einer Handle* Methode) zurück.
  • InProgress – Wird für lange ausgeführte Aufgaben (z. B. einen Netzwerk-/Servervorgang) verwendet.
  • Success – Antwortet mit den Details des erfolgreichen Vorgangs (nur von einer Handle* Methode).
  • Failure – Bedeutet, dass ein Fehler aufgetreten ist und der Vorgang nicht abgeschlossen werden konnte.
  • RequiringAppLaunch – Kann nicht von der Absicht verarbeitet werden, aber der Vorgang ist in der App möglich.
  • Unspecified – Verwenden Sie nicht: Fehlermeldung wird dem Benutzer angezeigt.

Erfahren Sie mehr über diese Methoden und Antworten in den SiriKit-Listen und Notizendokumentationen von Apple.

Implementieren von Listen und Notizen

Führen Sie zunächst die folgenden Schritte für Ihre iOS-App aus, um SiriKit-Unterstützung hinzuzufügen:

  1. Tick SiriKit in Entitlements.plist.
  2. Fügen Sie den Schlüssel "Datenschutz – Siri Usage Description " zu "Info.plist" zusammen mit einer Nachricht für Ihre Kunden hinzu.
  3. Rufen Sie die INPreferences.RequestSiriAuthorization Methode in der App auf, um den Benutzer aufzufordern, Siri-Interaktionen zuzulassen.
  4. Fügen Sie SiriKit zu Ihrer App-ID im Entwicklerportal hinzu, und erstellen Sie Ihre Bereitstellungsprofile erneut, um die neue Berechtigung einzuschließen.

Fügen Sie dann Ihrer App ein neues Erweiterungsprojekt hinzu, um Siri-Anforderungen zu verarbeiten:

  1. Klicken Sie mit der rechten Maustaste auf Ihre Projektmappe, und wählen Sie "Neues Projekt hinzufügen > " aus.
  2. Wählen Sie die Vorlage für die Erweiterung der iOS-Erweiterung > > "Intents" aus.
  3. Es werden zwei neue Projekte hinzugefügt: Intent und IntentUI. Das Anpassen der Benutzeroberfläche ist optional, sodass das Beispiel nur Code im Intent-Projekt enthält.

Das Erweiterungsprojekt ist der Ort, an dem alle SiriKit-Anforderungen verarbeitet werden. Als separate Erweiterung verfügt sie nicht automatisch über eine Möglichkeit, mit Ihrer Haupt-App zu kommunizieren – dies wird in der Regel gelöst, indem die freigegebene Dateispeicherung mithilfe von App-Gruppen implementiert wird.

Konfigurieren des IntentHandlers

Die IntentHandler Klasse ist der Einstiegspunkt für Siri-Anforderungen – jede Absicht wird an die GetHandler Methode übergeben, die ein Objekt zurückgibt, das die Anforderung verarbeiten kann.

Der folgende Code zeigt eine einfache Implementierung:

[Register("IntentHandler")]
public partial class IntentHandler : INExtension, IINNotebookDomainHandling
{
  protected IntentHandler(IntPtr handle) : base(handle)
  {}
  public override NSObject GetHandler(INIntent intent)
  {
    // This is the default implementation.  If you want different objects to handle different intents,
    // you can override this and return the handler you want for that particular intent.
    return this;
  }
  // add intent handlers here!
}

Die Klasse muss von INExtensionerben, und da das Beispiel Listen und Notizenabsichten IINNotebookDomainHandlingverarbeitet, wird sie ebenfalls implementiert.

Hinweis

  • Es gibt eine Konvention in .NET für Schnittstellen, die einem Großbuchstaben Ivorangestellt werden sollen, das Xamarin beim Binden von Protokollen aus dem iOS SDK einhält.
  • Xamarin behält auch Typnamen von iOS bei, und Apple verwendet die ersten beiden Zeichen in Typnamen, um das Framework widerzuspiegeln, zu dem ein Typ gehört.
  • Für das Intents Framework werden Typen mit IN* präfix (z. B. INExtension) vorangestellt, dies sind jedoch keine Schnittstellen.
  • Es folgt auch, dass Protokolle (die zu Schnittstellen in C#werden) mit zwei Is enden, z IINAddTasksIntentHandling. B. . .

Behandeln von Absichten

Jede Absicht (Aufgabe hinzufügen, Aufgabenattribute festlegen usw.) wird in einer einzigen Methode implementiert, die dem unten gezeigten ähnelt. Die Methode sollte drei Hauptfunktionen ausführen:

  1. Verarbeiten der Absicht – Die von Siri analysierten Daten werden in einem intent Objekt verfügbar gemacht, das für den Typ der Absicht spezifisch ist. Ihre App hat möglicherweise überprüft, dass Daten mit optionalen Resolve* Methoden verwendet werden.
  2. Überprüfen und Aktualisieren des Datenspeichers – Speichern Sie Daten im Dateisystem (mithilfe von App-Gruppen, damit die iOS-Haupt-App auch darauf zugreifen kann) oder über eine Netzwerkanforderung.
  3. Antwort bereitstellen – Verwenden Sie den completion Handler, um eine Antwort an Siri zurückzusenden, um den Benutzer zu lesen/anzuzeigen:
public void HandleCreateTaskList(INCreateTaskListIntent intent, Action<INCreateTaskListIntentResponse> completion)
{
  var list = TaskList.FromIntent(intent);
  // TODO: have to create the list and tasks... in your app data store
  var response = new INCreateTaskListIntentResponse(INCreateTaskListIntentResponseCode.Success, null)
  {
    CreatedTaskList = list
  };
  completion(response);
}

Beachten Sie, dass null als zweiter Parameter an die Antwort übergeben wird – dies ist der Benutzeraktivitätsparameter, und wenn er nicht angegeben wird, wird ein Standardwert verwendet. Sie können einen benutzerdefinierten Aktivitätstyp festlegen, solange Ihre iOS-App ihn über den NSUserActivityTypes Schlüssel in Info.plist unterstützt. Sie können diesen Fall dann behandeln, wenn Ihre App geöffnet wird, und bestimmte Vorgänge ausführen (z. B. öffnen mit einem relevanten Ansichtscontroller und Laden der Daten aus dem Siri-Vorgang).

Im Beispiel wird auch das Success Ergebnis hartcodiert, aber in realen Szenarien sollte die ordnungsgemäße Fehlerberichterstattung hinzugefügt werden.

Testausdrücke

Die folgenden Testausdrücke sollten in der Beispiel-App funktionieren:

  • "Machen Sie eine Einkaufsliste mit Äpfeln, Bananen und Birnen in TasksNotes"
  • "Aufgabe WWDC in TasksNotes hinzufügen"
  • "Aufgaben-WWDC zur Schulungsliste in TasksNotes hinzufügen"
  • "WwDC als erledigt markieren" in TasksNotes
  • "In TasksNotes erinnert mich daran, ein iPhone zu kaufen, wenn ich zu Hause bin"
  • "Mark buy iPhone as completed in TasksNotes"
  • "Erinnern Sie mich, um 8 Uhr in TasksNotes zu Hause zu bleiben"

Erstellen eines neuen Listenbeispiels Festlegen einer Aufgabe als vollständiges Beispiel

Hinweis

Der iOS 11 Simulator unterstützt Tests mit Siri (im Gegensatz zu früheren Versionen).

Wenn Sie auf echten Geräten testen, vergessen Sie nicht, Ihre App-ID und Bereitstellungsprofile für die SiriKit-Unterstützung zu konfigurieren.

Alternative Namen

Dieses neue iOS 11-Feature bedeutet, dass Sie alternative Namen für Ihre App konfigurieren können, damit Benutzer sie mit Siri richtig auslösen können. Fügen Sie der Info.plist-Datei des iOS-App-Projekts die folgenden Schlüssel hinzu:

Info.plist mit alternativen App-Namensschlüsseln und -werten

Wenn die alternativen App-Namen festgelegt sind, funktionieren die folgenden Ausdrücke auch für die Beispiel-App (die eigentlich "TasksNotes" genannt wird):

  • "Machen Sie eine Einkaufsliste mit Äpfeln, Bananen und Birnen in MonkeyNotes"
  • "Aufgabe WWDC in MonkeyTodo hinzufügen"

Problembehandlung

Einige Fehler, die beim Ausführen des Beispiels auftreten oder SiriKit zu Ihren eigenen Anwendungen hinzufügen:

NSInternalInconsistencyException

Objective-C Ausnahme ausgelöst. Name: NSInternalInconsistencyException Reason: Use of the class <INPreferences: 0x60400082ff00> from an app requires the entitlement com.apple.developer.siri. Haben Sie die Siri-Funktion in Ihrem Xcode-Projekt aktiviert?

  • SiriKit wird in "Entitlements.plist" angekreuzt.

  • Entitlements.plist ist in der Project Options > Build > iOS Bundle Signing konfiguriert.

    Project-Optionen mit ordnungsgemäß festgelegten Berechtigungen

  • (für die Gerätebereitstellung) Die App-ID hat SiriKit aktiviert und das Bereitstellungsprofil heruntergeladen.