
Eine der nützlichen (meiner Meinung nach) iOS 12-Funktionen, die auf der WWDC 2018 vorgestellt wurden, sind Siri Shortcuts .
Verknüpfung ( Verknüpfung ) - ein schneller Befehl, eine kurze Möglichkeit, eine Aktion unter Umgehung des Standardskripts auszuführen.
In Ihren Anwendungen können Sie Verknüpfungen für einige Aktionen ausrichten. Als Siri erfährt, wie und wann der Benutzer sie implementiert, beginnt er geschickt, zur richtigen Zeit und am richtigen Ort, um ihm diese Verknüpfungen anzubieten, und das Beste ist, dass der Benutzer sie mit Phrasen aufrufen kann, die er ihnen anhängen wird! Unter der Katze mehr.
Wie funktioniert es?
Wir verwenden Anwendungen, die mit bestimmten Aktionen Verknüpfungen erstellen und an das System senden.
Sie können diese Verknüpfungen unter Einstellungen → Siri und Suche anzeigen.

Der Screenshot oben zeigt die letzten drei Verknüpfungen, die das System von verschiedenen Anwendungen abgefangen hat. Wenn Sie auf die Schaltfläche "Weitere Verknüpfungen" klicken, werden alle Verknüpfungen angezeigt, die von jeder Anwendung an das System gesendet wurden.
Mit bestimmten Einstellungen im Verknüpfungserstellungscode bietet Siri dem Benutzer diese Verknüpfungen auf dem gesperrten Bildschirm, im Benachrichtigungs- und Suchcenter an und konzentriert sich darauf, wie oft wir diese Aktionen zu welcher Zeit, an welchen Wochentagen und wo auf andere Faktoren anwenden.
Wenn Sie beispielsweise am Freitagabend normalerweise nach Geldautomaten suchen und dann trainiert haben, bietet Ihnen Siri am Freitagabend eine Verknüpfung mit dieser Aktion an.

Wir können unseren Sprachbefehl zu jeder Verknüpfung hinzufügen, wenn wir auf das Symbol " + " klicken.
Wir sagen einen Sprachbefehl, drücken "Fertig" und jetzt können wir die Aktion hinter der Verknüpfung mit der Stimme über Siri ausführen. Es stellt sich heraus, dass der Benutzer die Funktionalität Ihrer Anwendung über Siri ausführen kann, ohne die Anwendung selbst zu öffnen. Die Verknüpfung mit der Phrase bleibt in "Meine Verknüpfungen" erhalten.
Verknüpfungen erstellen
Für die Entwicklung benötigen wir Xcode 10 und iOS 12. Zum Zeitpunkt des Schreibens befinden sich beide in der Beta- Phase.
Eine Verknüpfung kann entweder über NSUserActivity
oder über Intent
.
Der erste Fall:
Der Benutzer klickt auf die Verknüpfung, die den Befehl mit den Parametern ( NSUserActivity
) an unsere Anwendung NSUserActivity
, und entscheidet, wie dieser Befehl verarbeitet werden soll (öffnen Sie das Fenster des aktuellen USD-Kurses oder das NSUserActivity
unserer Lieblingspizza). Dies ist die gute alte Spotlight-Verknüpfung, die wir alle kennen, die Siri jedoch geschickt anbietet.
Zweiter Fall:
Interessanter Intent
über Intent
erstellte Verknüpfungen, mit denen Sie einen Befehl sofort in der Siri-Oberfläche ausführen können, ohne Ihre Anwendung zu starten. Zuvor waren die Intent
für Apple schwierig: Geld überweisen, Nachrichten senden und andere . Jetzt haben wir Entwickler die Möglichkeit, unsere Intent
zu erstellen!
Unabhängig davon, wie die Verknüpfung erstellt wurde, durchläuft sie drei Phasen des Lebenszyklus:
- Ankündigung ( Definieren )
- Lieferung an das System ( Spenden )
- Bearbeitung nach Anwendung ( Handle )

Meine Forschung hat gezeigt, dass eine Anwendung nicht mehr als 20 Verknüpfungen zum System liefern kann.
Darüber hinaus werden wir uns überlegen, wie wir unserer Anwendung die Möglichkeit geben können, Verknüpfungen zu erstellen und mit ihnen darin zu arbeiten.
Erstellen von Verknüpfungen über NSUserActivity
Lassen Sie uns den ersten einfachen Typ von Verknüpfungen analysieren, die über NSUserActivity
geöffnet werden.
Zum Beispiel haben wir in der mobilen Bankanwendung einen Geldautomaten-Suchbildschirm und ich suche oft nach ihnen. Um mit einer Geldautomatenkarte auf den Bildschirm zu gelangen, muss ich die Anwendung starten, auf der Registerkarte zur Registerkarte „Mehr“ gehen, den Abschnitt „Info“ auswählen und dort auf die Schaltfläche „Geldautomaten“ klicken.
Wenn wir eine Verknüpfung erstellen, die sofort zu diesem Bildschirm führt, kann der Benutzer mit einer Berührung darauf zugreifen, wenn Siri sie ihm beispielsweise auf einem gesperrten Bildschirm anbietet.
Verknüpfung deklarieren
Der erste Schritt besteht darin, einen Typ wie unsere NSUserActivity
(wir können sagen, dass dies die Kennung ist) in der info.playlist zu deklarieren :
<key>NSUserActivityTypes</key> <array> <string>ru.tinkoff.demo.show-cashMachine</string> </array>
Angekündigt.
Liefern Sie die Verknüpfung an das System (Spenden)
Nach der Deklaration können wir NSUserActivity
im Code unserer Anwendung mit dem Typ erstellen, den wir oben in info.playlist festgelegt haben :
let activity = NSUserActivity(activityType: "ru.tinkoff.demo.show-cashMachine")
Damit die Aktivität in die Liste der Verknüpfungen des Systems aufgenommen werden kann, muss sie auf title
und die Eigenschaft isEligibleForSearch
auf true
. Andere Eigenschaften sind für das Hinzufügen zu Verknüpfungen nicht erforderlich, aber ihre Anwesenheit macht die Verknüpfung lesbarer und benutzerfreundlicher.
Feuer! NSUserActivity
ist, um es an das System zu liefern, der letzte Schritt.
ViewConroller
verfügt über eine userActivity
Eigenschaft, der wir die oben erstellte activity
zuweisen müssen:
self.userActivity = activity
Sobald diese Zeile ausgeführt wird, wird aus dieser Aktivität eine Verknüpfung erstellt. Es wird an das System geliefert und in den Siri-Einstellungen ( Einstellungen → Siri und Suche ) angezeigt. Dann kann Siri es dem Benutzer anbieten und der Benutzer kann ihm seinen Sprachbefehl zuweisen.
Hinweis : In der Apple-Dokumentation heißt es, dass es nicht ausreicht, dem View Controller Aktivität becomeCurrent()
, sondern die Methode becomeCurrent()
für die becomeCurrent()
. Diese Aktion hat jedoch keine Aktivität auf mein System übertragen, und die Verknüpfung wurde nicht in der Liste angezeigt
Rufen Sie als becomeCurrent()
Methode becomeCurrent()
für das Benutzeraktivitätsobjekt auf, um es als aktuell zu markieren, wodurch die Aktivität an Siri becomeCurrent()
. Alternativ können Sie das Objekt an ein UIViewController- oder UIResponder-Objekt anhängen, das die Aktivität auch als aktuell markiert.
Um zu überprüfen, ob alles funktioniert hat, öffnen Sie Einstellungen> Siri und suchen Sie - die Verknüpfung, die auf unserer Aktivität basiert, sollte in der Liste enthalten sein.
Verarbeiten von Verknüpfungen nach Anwendung (Handle)
Wenn ein Benutzer vom Benachrichtigungscenter aus durch die Verknüpfung navigiert oder diese per Spracheingabe aktiviert, wird die Anwendung gestartet, und wir müssen diese Verknüpfung verarbeiten.
activity
uns in AppDelegate
'eine Methode geworfen:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.activityType == "ru.tinkoff.demo.show-cashMachine" {
Insgesamt
Eine NSUserActivity- NSUserActivity
wird wie folgt erstellt:
- Deklarieren Sie den Typ (Bezeichner) von
NSUserActivity
in NSUserActivity
. - Wir erstellen
NSUserActivity
im Code und konfigurieren viewController'
.
Erstellen von Sprachbefehlen aus einer Anwendung
Wenn der Benutzer also Einstellungen> Siri öffnet und sucht , wird eine Liste seiner Verknüpfungen angezeigt, die von verschiedenen Anwendungen erstellt wurden, einschließlich unserer. Durch Klicken auf das „ + “ kann der Benutzer einen beliebigen Sprachbefehl erstellen und ihn der ausgewählten Verknüpfung zuordnen. Jedes Mal, wenn die Eingabe der Einstellungen für den Benutzer unpraktisch ist, erkennen viele diese Möglichkeit nicht einmal.
Es ist cool, dass Sie einer bestimmten Aktion direkt in der Anwendung einen Sprachbefehl hinzufügen können.
Angenommen, ein Benutzer führt eine Aktion aus, die an das System übermittelt wird und die er speichern möchte. Wir können die Schaltfläche " Aktion zu Siri hinzufügen " (Sie können die Schaltfläche nach Belieben benennen und zeichnen) auf dem Bildschirm unserer Anwendung hinzufügen. Durch Klicken darauf kann der Benutzer diese Aktion einem Sprachbefehl innerhalb der Anwendung zuordnen, ohne die Einstellungen aufzurufen.
Durch Klicken auf die Schaltfläche sollten Sie den Bildschirm zum Hinzufügen eines Sprachbefehls zu einer Verknüpfung in Siri INUIAddVoiceShortcutViewController
oder den Bildschirm zum Bearbeiten eines Sprachbefehls INUIEditVoiceShortcutViewController
, falls bereits einer erstellt wurde, modal öffnen. Die nicht umgesetzte action
solchen Knopfes ist ungefähr wie folgt:
@IBAction func addToSiriAction() { // 1. , INVoiceShortcutCenter.shared.getAllVoiceShortcuts { (shortcuts, error) in guard error == nil, let shortcuts = shortcuts else { // TODO: Handle error return } // 2. , let donatedShortcut: INVoiceShortcut? = shortcuts.first(where: { (shorcut) -> Bool in return shorcut.__shortcut.userActivity?.activityType == "com.ba" }) if let shortcut = donatedShortcut { // 3. - . // let editVoiceShortcutViewController = INUIEditVoiceShortcutViewController(voiceShortcut: shortcut) editVoiceShortcutViewController.delegate = self self.present(editVoiceShortcutViewController, animated: true, completion: nil) } else { // 4. let shortcut = INShortcut(userActivity: self.userActivity!) let addVoiceShortcutViewController = INUIAddVoiceShortcutViewController(shortcut: shortcut) addVoiceShortcutViewController.delegate = self } } }
Die Bildschirme zum Hinzufügen und Bearbeiten eines Sprachbefehls für die Siri-Verknüpfung sehen also folgendermaßen aus:

Wir müssen auch die Delegate-Methoden dieser viewController implementieren, in denen sie dismiss(animated: true, completion: nil)
ausblenden und gegebenenfalls den aktuellen Bildschirm aktualisieren müssen. Wenn beispielsweise früher auf dem Bildschirm die Schaltfläche "Sprachbefehl hinzufügen" angezeigt wurde, sollte diese Schaltfläche nach dem Hinzufügen eines Sprachbefehls entweder verschwinden oder in "Sprachbefehl bearbeiten" geändert werden.
Absichtsverknüpfungen
Bisher haben wir nur über Verknüpfungen gesprochen, die eine Anwendung öffnen und dort NSUserActivity
Daten an NSUserActivity
.
Zurück zu den über Intent
erstellten Verknüpfungen, mit denen Sie einige Aktionen ausführen können, ohne die Anwendung zu öffnen. Hier beginnt der Spaß.
Stellen Sie sich vor, ein Benutzer bestellt seine Lieblingspizza. Er wird es viele Male bestellen, wann immer er will, und er hat der Abkürzung dieser Pizza sogar einen Sprachbefehl hinzugefügt - und das vereinfacht sein Leben. Aber wir können mehr für ihn tun - wir können sicherstellen, dass das System den Siri-Sprachbefehl nicht in die Anwendung wirft, sondern Bestellinformationen anzeigt und Pizza sofort in der Siri-Oberfläche bestellt! Dies ist nur dann der Fall, wenn der Benutzer die Anwendung selbst nicht öffnen muss, um eine Aktion auszuführen.
Gehen Sie zunächst zu den Projekteinstellungen, wählen Sie das Hauptziel und die Registerkarte Funktionen aus und aktivieren Sie den Zugriff auf Siri.
Unsere Anwendung kann mit Siri interagieren, dies geschieht jedoch nicht im Hauptcode der Anwendung, sondern in einer separaten Zielerweiterung Intents Extensions
Zu Beginn muss dieses Ziel erstellt werden: Datei → Neu → Ziel , Intents Extensions auswählen. Xcode bietet an, eine weitere Zielerweiterung für das Fenster zu erstellen, in dem Ihre Aktionen in Siri angezeigt werden. Wenn dies erforderlich ist, stimmen wir zu.

Verknüpfung deklarieren
Die Hauptinnovation von SiriKit in iOS 12 ist die Möglichkeit, Ihre Inetnts
zu erstellen, wie sie früher waren.

Erstellen Sie dazu eine neue Datei: Datei → Neu → Datei , und wählen Sie im Abschnitt Ressource die Option SiriKit Intent Definition File aus.

Als Ergebnis wird eine Datei mit der Erweiterung .intentdefinition angezeigt , in der Sie Ihre eigenen Absichten erstellen können. Wir öffnen die Datei und wo unten " No Intents " steht, befindet sich ein " + " - Symbol - klicken Sie darauf. " Neue Absicht ". In der Liste wird eine Absicht angezeigt, zu der Sie Parameter hinzufügen können. Bei einer Pizza-Bestellung können Sie die Anzahl der Pizzen und die Art der zu bestellenden Pizza als Parameter hinzufügen. Für die Menge wählen wir den Typ Integer
und für den INObject
den Typ Custom
, der im Code durch die Klasse INObject
.
Nun ein paar Zeilen Frustration:
Der Benutzer kann keine unterschiedlichen Parameter an denselben gespeicherten Sprachbefehl übertragen. Ach!

Was sind die Parameter für:
Angenommen, Sie erstellen eine Entität "Rate %currency
", wobei currency
ein Entitätsparameter ist. Dies bedeutet nicht, dass der Benutzer die Sätze "Den Wechselkurs des Dollars anzeigen", "Den Bitcoin-Wechselkurs anzeigen" usw. sagen kann. Standardmäßig funktioniert dies nicht so. Dies bedeutet jedoch, dass, wenn der Benutzer den Dollar-Wechselkurs betrachtete, die Verknüpfung "USD-Kurs anzeigen" erstellt wurde, dann, wenn er den Bitcoin-Wechselkurs betrachtete, die Verknüpfung "BTC-Kurs anzeigen" erstellt wurde Mit anderen Worten, er kann mehrere Shorkatas haben, die auf derselben Absicht basieren, aber unterschiedliche Parameter haben. Bei jeder der Verknüpfungen kann der Benutzer seinen Sprachbefehl erfragen.
Wenn Sie eine Absicht in der .intentdefinition- Datei erstellen, generiert Xcode automatisch eine Klasse für diese Absicht (Hinweis: Sie wird nicht in den Projektdateien angezeigt, steht jedoch zur Verwendung zur Verfügung). Diese automatisch generierte Datei befindet sich nur in den Zielen, die die .intentdefinition- Datei besitzen.
Nachdem wir die Absicht in der .intentdefinition-Datei erstellt haben , können wir unsere Absichten im Code erstellen.
let intent = OrderPizzaIntent()
Liefern Sie die Verknüpfung an das System (Spenden)
Damit diese Entität in die Liste der Verknüpfungen aufgenommen wird, müssen Sie sie einbetten. Zu diesem Zweck wird ein INInteraction
Objekt mit einer Instanz Ihrer Absicht erstellt und die .donate-Methode wird für diese .donate
aufgerufen
let intent = OrderPizzaIntentf() // ... let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // ... / }
Nach dem Ausführen dieses Codes wird die absichtsbasierte Verknüpfung an das System gesendet und in den Siri-Einstellungen angezeigt.
Wir bearbeiten die Verknüpfungsanwendung (Handle)
Der nächste Schritt besteht darin, die Absicht zu verarbeiten, wenn der Benutzer im Sirjest des Siri darauf klickt oder sie mit einem Sprachbefehl anruft.
Wir haben bereits eine Zielerweiterung für Siri erstellt und sie verfügt über eine vorab erstellte IntentHandler-Klasse, die eine einzige Methode hat - `` handle (for intent) ``
class IntentHandler: INExtension { override func handler(for intent: INIntent) -> Any { guard intent is OrderPizzaIntent else { fatalError("Unhandled intent type: \(intent)") } return OrderPizzaIntentHandler() } }
Hinweis: Wenn der Compiler die Klasse Ihrer Absicht nicht sieht, haben Sie die Zielerweiterungsdatei .intentdefinition für Siri nicht hinzugefügt.
Bei dieser Methode bestimmen wir den Typ der eingehenden Absicht und erstellen für jeden Typ ein Handlerobjekt, das diese Absicht verarbeitet. Erstellen Sie einen Handler für unser OrderPizzaIntent
und implementieren Sie das OrderPizzaIntentHandling
Protokoll darin, das bereits automatisch generiert wird, nachdem Sie Ihre Absicht in .intentdefinition erstellt haben .
Das Protokoll enthält zwei Methoden zur confirm
und handle
. Zunächst wird die confirm
aufgerufen, bei der alle Daten überprüft und die Verfügbarkeit der Aktion überprüft werden. Dann funktioniert der handle
in einer kurzen Aktion, die ausgeführt werden muss.
public class OrderPizzaIntentHandler: NSObject, OrderPizzaIntentHandling { public func confirm(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) {
Beide Methoden müssen definitiv die completion
mit der Antwort OrderPizzaIntentResponse
(sie wird ebenfalls automatisch generiert), andernfalls wartet Siri nur lange und gibt dann einen Fehler aus.
Detailliertere Antworten von Siri
Es gibt einen standardmäßigen, automatisch generierten Satz von Antwortcodes - enum OrderPizzaIntentResponseCode
, aber diese reichen möglicherweise nicht für eine enum OrderPizzaIntentResponseCode
Oberfläche aus. In der confirm
beispielsweise verschiedene Fehler auftreten - die Pizza ist aufgebraucht, die Pizzeria funktioniert derzeit nicht usw. und der Benutzer sollte anstelle der Standardnachricht "Anwendungsfehler" mehr über diese Fakten erfahren. Denken Sie daran, dass wir Intent
in der .intentdefinition- Datei erstellt haben? Zusammen mit der Absicht selbst wurde die Response
in der Sie Ihre eigenen Optionen für Fehler und erfolgreiche Antworten hinzufügen und diese mit den folgenden Parametern konfigurieren können:

Jetzt können wir dem Benutzer informativere Fehler und Antworten mitteilen:
public func confirm(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) { guard let pizzaKindId = intent.kind?.identifier else { // - completion(OrderPizzaIntentResponse(code: .failure, userActivity: nil)) return } if pizzeriaManager.isPizzeriaClosed == true { /// - completion(OrderPizzaIntentResponse(code: .failurePizzeriaClosed, userActivity: nil)) return } else if pizzeriaManager.menu.isPizzaUnavailable(identifier: pizzaKindId) { /// - completion(OrderPizzaIntentResponse(code: .failurePizzaUnavailable(kind: intent.kind), userActivity: nil)) return } // - completion(OrderPizzaIntentResponse(code: .ready, userActivity: nil)) }
Intent
Rendern
Wenn wir eine Zielerweiterung für die Absichtserweiterungs- Benutzeroberfläche erstellt haben , können wir in Siri eine benutzerdefinierte Ansicht für die von uns benötigten Absichten zeichnen. Wir haben MainInterface.storyboard
und IntentViewController
in denen wir ihr Design skizzieren können. Dieser Ansichtscontroller implementiert das INUIHostedViewControlling-Protokoll und die Ansicht wird in der configureView
Methode configureView
// Prepare your view controller for the interaction to handle. func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) { // Do configuration here, including preparing views and calculating a desired size for presentation. completion(true, parameters, self.desiredSize) } var desiredSize: CGSize { return self.extensionContext!.hostedViewMaximumAllowedSize }
Damit diese Methode aufgerufen werden kann, müssen Sie den Namen unserer Absicht zum Array NSExtension
-> NSExtensionAttributes
-> IntentsSupported
, das sich auf die Benutzeroberfläche des Erweiterungsziels Intents bezieht
<key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>IntentsSupported</key> <array> <string>OrderPizzaIntent</string> </array> </dict>
Abhängig vom Design Ihrer Ansicht in Siri und der interaction.intent
, die in die Methode eingeflossen ist, können Sie diese Ansicht nach Ihren Wünschen zeichnen. Unten finden Sie Screenshots, wie unsere Absicht in Siri aussieht, auf der Suche und auf einem gesperrten Bildschirm.

Es ist zu beachten, dass der Benutzer nicht mit Schaltflächen, Bildlauf und anderen Steuerelementen in Ihrer Ansicht interactiveBehavior = .none
, da die Methode mit dem ParameterinteractiveBehavior interactiveBehavior = .none
wird. Dies führt sicherlich zu einer Reihe von Einschränkungen.
Insgesamt
Eine Intent
Verknüpfung kann in der Siri-Oberfläche oder im Benachrichtigungscenter gerendert werden und eine Aktion ausführen, ohne die Anwendung zu öffnen. Um es zu erstellen, benötigen Sie:
- Aktivieren Sie die Funktionen zur Verwendung von Siri
- Erstellen Sie Intents Extensions und Intents Extensions UI
- Erstellen Sie eine SiriKit Intent Definition-Datei
- Wir erstellen unsere
Intent
in dieser Datei und weisen ihr Parameter zu. - Erstellen Sie einen
IntentHandler
in dem wir die hanlde
und hanlde
implementieren
Empfehlungen
Generischer Code im Siri-Erweiterungsziel und in der Hauptanwendung
Wenn Sie Code haben, der sowohl im Ziel für Siri als auch im Ziel des Hauptprojekts verwendet wird, gibt es zwei Möglichkeiten, um dieses Problem zu lösen:
- Markieren Sie gemeinsame Klassen und fügen Sie sie beiden Zielen hinzu. ( Ansicht → Dienstprogramme → Dateiinspektor anzeigen , fügen Sie im Abschnitt Zielmitgliedschaft Häkchen zu Zielen hinzu, die Zugriff auf die ausgewählte Datei benötigen.)
- Erstellen Sie ein oder mehrere Ziel-Frameworks und übernehmen Sie dort den allgemeinen Code.
Die letztere Methode ist vorzuziehen, da Sie diese Frameworks dann in anderen Erweiterungen und Projekten verwenden können. Es ist auch erwähnenswert, dass es für diese Frameworks ratsam ist, das Flag " Allow app extension API only
zu setzen. Bei der Entwicklung des Frameworks schwört der Compiler, wenn Sie versuchen, eine API zu verwenden, die für die Entwicklung von Erweiterungen illegal ist (z. B. UIApplication
).
Freigegebene Ressourcen können über App-Gruppen zwischen Zielen durchsucht werden
Debuggen
Das Testen von Verknüpfungen hilft dabei:
- Telefoneinstellungen Einstellungen → Entwickler : Letzte Verknüpfungen anzeigen und Spenden auf Sperrbildschirmschaltern anzeigen :

- Um Intens zu testen, können Sie die Zielerweiterung sofort starten, indem Sie in Xcode die Phrase angeben, mit der Siri öffnet. Wählen Sie dazu das Schema für die Zielerweiterung Siri aus

Klicken Sie auf dieses Ziel, klicken Sie auf Schema bearbeiten ...

Geben Sie im Feld Siri Intent Query eine Phrase ein, mit der Siri bereits beginnt, als ob Sie es bereits gesagt hätten.
Insgesamt
Ich schlage vor, anzuhalten und zusammenzufassen, was wir getan haben:
- Verknüpfungen können über
NSUserActivity
oder über INIntent
- Verknüpfungen müssen deklariert (deklarieren), an das System gemeldet (spenden) und verarbeitet (handhaben) werden.
- Sie können der Anwendung die Schaltfläche " Zu Siri hinzufügen" hinzufügen, indem Sie darauf klicken, dass der Benutzer eine Phrase für die Aktion hinzufügen und diese anschließend mit seiner Stimme aufrufen kann.
- Sie können zusätzlich zu den integrierten
Intents
Ihre eigenen Intents
erstellen. - Über absichtsbasierte
Intents
Sie Aktionen erstellen, die über die Siri-Oberfläche ausgeführt werden (entweder auf einem gesperrten Bildschirm oder bei der Suche), ohne die Anwendung selbst öffnen zu müssen.
In der Apple-Dokumentation befindet sich ein Link zum Demo-Projekt , der zum Herunterladen und Fokussieren während der Entwicklung hilfreich ist.
Ich möchte betonen, dass dieser Artikel zum Zeitpunkt des Schreibens eine API in der beta
Phase ist. Und ich fange oft Probleme und Fehler. Während der Arbeit stieß ich regelmäßig auf Folgendes:
- Sprachbefehle, die Intent in Siri öffnen, werden nicht geöffnet.
- Das Anzeigen von Siri-Angeboten funktioniert nicht über den Sperrbildschirm.
- Das Problem mit asynchronen Operationen in Zielen für Siri.
Referenzen
- WWDC 2018, Sitzung 211: Einführung in Siri Shortcuts
- WWDC 2018, Sitzung 214: Bauen für Sprache mit Siri-Verknüpfungen
- Apple Entwickler: SiriKit
- Apple Entwickler: INUIHostedViewControlling
- Apple Demo Suppe Chef Projekt