Siri Shortcuts – wie werden sie implementiert?

Veröffentlicht: 2020-01-16

Siri Shortcuts, eine neue Funktion, die auf der letztjährigen WWDC vorgestellt wurde, bieten die Möglichkeit, bestimmte Funktionalitäten der Anwendung im Hintergrund auszuführen. Wir müssen die Anwendung nicht einschalten, um diese Funktionalitäten in der Anwendung zu nutzen, wir können einfach zu Siri sagen, zB „Burger Time“ und das System weiß, welcher Anwendung dieser Shortcut zugeordnet ist und bestellt einen Burger für uns.

Was sind Siri-Shortcuts?

  • Eine bequeme Möglichkeit, Aufgaben vom Sperrbildschirm oder Suchbereich aus zu erledigen.
  • Shortcuts können auch zu Siri hinzugefügt werden, um mit einer Sprachphrase auf iOS, HomePod und watchOS zu laufen.
  • Entwickler fügen Shortcut-Hooks in ihre Apps ein, die es Siri ermöglichen, sich mit diesen Shortcuts zu verbinden.
  • Verwenden von Machine-Learning-Modellen Ihres Verhaltens, um allgemeine Funktionen zu analysieren, die Sie ausführen, und automatisch Verknüpfungen vorzuschlagen.
  • iOS 12+

In diesem Artikel konzentrieren wir uns auf die Implementierung des Bestellkürzels, einer der beliebtesten Anwendungen von Siri Shortcuts. Wir werden eine einfache Anwendung erstellen, mit der Sie Burger bestellen können

Wie können wir Siri-Shortcuts erstellen?

Prozess zum Erstellen von Siri-Shortcuts
  1. Ganz am Anfang müssen wir darüber nachdenken , welche Funktionalität der Benutzer in unserer Anwendung wirklich vereinfachen möchte . Dies sollte eine Funktionalität sein, die der Benutzer häufig ausführt und die erfordert, dass der Benutzer die Anwendung betritt und darin einen langen Pfad durchläuft. Verknüpfungen ermöglichen das Verkürzen dieses Pfads, um die Funktionalität auszuführen.
  2. Im nächsten Schritt müssen Sie eine Verknüpfung spenden. Was bedeutet das? Wir müssen die Information darüber, dass wir eine Bestellung aufgegeben haben, an das System weitergeben, zum Beispiel einen Burger mit Bacon. Wir geben diese Informationen an das System weiter und Siri kann uns später zu einem bestimmten Zeitpunkt vorschlagen, diese bestimmte Bestellung aufzugeben.
  3. Das letzte, was zu tun ist, ist, diesen Shortcut zu handhaben, der passiert, wenn der Benutzer Siri den zuvor definierten Befehl mitteilt , z. B. „Burgerzeit“, oder wenn der Benutzer den von Siri vorgeschlagenen Shortcut auf dem Sperrbildschirm drückt.

Ok, vielleicht schreiben wir etwas Code? Welche Möglichkeiten haben wir als Entwickler?

NSUserActivity & Intents – Beispiele für Siri-Shortcuts

NSUserActivity – Wir erstellen eine Verknüpfung, mit der wir den Bildschirm zum Aufgeben einer neuen Bestellung starten können

  1. Fügen Sie den Schlüssel zu Info.plist hinzu
 <key>NSUserActivityTypes</key>
<Array>
	<string>com.miquido.SiriShotcutDemo.make-order</string>
</array>

2. Spenden Sie die Verknüpfung, wenn der Benutzer den Bildschirm betritt

 let orderActivity = NSUserActivity (activityType: "com.miquido.SiriShotcutDemo.make-order")
orderActivity.persistentIdentifier = NSUserActivityPersistentIdentifier("com.miquido.SiriShotcutDemo.make-order")
orderActivity.isEligibleForSearch = wahr
orderActivity.isEligibleForPrediction = wahr
orderActivity.title = "Bestellung aufgeben"
orderActivity.suggestedInvocationPhrase = "Burgerzeit"

let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributes.contentDescription = "Leckere Burger!"
attributes.thumbnailData = UIImage(named: "logo")?.pngData()
orderActivity.contentAttributeSet = Attribute
userActivity = Bestellaktivität

3. In AppDelegate müssen Sie den ContinueUserActivity-Delegaten implementieren continueUserActivity der nach Erhalt dieses bestimmten Typs zum angegebenen Bildschirm umgeleitet wird

 func application(_ application: UIApplication,
                 userActivity fortsetzen: NSUserActivity,
                 restoreHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == "com.miquido.SiriShotcutDemo.make-order" {
        // offene App auf dem Bestellbildschirm handhaben
        Rückgabe wahr
    } 
    falsch zurückgeben
} 
Prozess der Implementierung von Siri-Shortcuts zum Bestellen eines Burgers

Absichten — Wir werden eine Verknüpfung implementieren, um Bestellungen aufzugeben

Profi-Tipp vor der Umsetzung:
Absichten treten auf, wenn der Benutzer etwas systematisch tut. Wenn Sie diese Funktion jedoch testen möchten, damit Sie immer einen Vorschlag von Siri erhalten, müssen Sie zwei Optionen aktivieren – „ Letzte Verknüpfungen anzeigen “ und „ Spenden auf dem Sperrbildschirm anzeigen “ in Einstellungen -> Entwickler.

Die Optionen: Letzte Verknüpfungen anzeigen und Spenden auf dem Sperrbildschirm anzeigen
  1. Erstellen Sie eine Absichtsdefinitionsdatei. Der beste Weg ist, es zu einem separaten Framework in meinem Projekt hinzuzufügen, es wird in OrderKit .
Symbol für Sirikit-Intent-Definitionsdatei

2. Wählen Sie eine Kategorie aus, in diesem Fall „Bestellung“. In dieser Datei müssen wir die Parameter auswählen, die wir an das System übergeben, und Kombinationen dieser Parameter erstellen.

Benutzerdefinierte Absicht, Parameter und Verknüpfungstypen
Auftragsdefinition – Erstellen Sie eine benutzerdefinierte Absicht
Auftragsdefinition — Definieren Sie Antworten
Auftragsdefinition — Definieren Sie Antworten

3. Erstellen Sie ein neues Ziel mit einer Erweiterung für Absichten, wählen Sie „UI-Erweiterung einschließen“, wenn Sie es erstellen.

Symbol für die Intents-Erweiterung
Datei -> Neu -> Ziel… -> Absichtserweiterung
So sollte die Zielmitgliedschaft für Order.intentdefinition

4. Erstellen Sie eine Benutzeroberfläche für die Absicht in der Datei MainInterface.storyboard .

Erstellen einer Benutzeroberfläche für die Absicht
Erstellen einer Benutzeroberfläche für unseren Intent

5. Konfigurieren Sie ready und success in IntentViewController .

 func configureView(für Parameter: Set<INParameter>,
                       der Interaktion: INInteraktion,
                       InteractiveBehavior: INUIInteractiveBehavior,
                       Kontext: INUIHostedViewContext,
                       Vervollständigung: @escaping (Bool, Set<INParameter>, CGSize) -> Void) {
        
    Wache lassen Absicht = Interaktion. Absicht als? Bestellabsicht sonst {
        Vervollständigung (false, Set(), .zero)
        Rückkehr
    }
    wenn Interaktion.intentHandlingStatus == .ready {
        setup (mit: absicht)
        waitTime.isHidden = wahr
        Vervollständigung (wahr, Parameter, gewünschte Größe)
    } Sonst, wenn Interaktion.intentHandlingStatus == .success,
        Lassen Sie Antwort = Interaktion.IntentAntwort als? BestellabsichtAntwort {
        setup (mit: absicht)
        waitTime.isHidden = falsch
        if let waitTimeText = response.waitTime {
            waitTime.text = "Bestellung wird in \(waitTimeText) Minuten fertig sein"
        }
        everythingIsOkLabel.text = "Tippen, um Bestellungen anzuzeigen"
        Vervollständigung (wahr, Parameter, gewünschte Größe)
    }

    Vervollständigung (falsch, Parameter, .null)
}

privates Funktions-Setup (mit Absicht: OrderIntent) {
    burgerNameLabel.text = beabsichtigt.burgerName
    if let menge = absicht.menge?.stringValue {
        QuantityLabel.text = "\(Menge) Stk."
    }
    if let additions = intention.additions {
        additionsLabel.text = additions.elements.toString
    }
}

6. Nachdem wir die Benutzeroberfläche erstellt haben, können wir zum Spenden unserer Absicht gehen. In diesem Fall ist es am besten, Absichten bei der Bestellung zu spenden. Wir stellen dem System alle Informationen zur Verfügung, die wir zuvor in der Datei Order.intentdefinition definiert haben, dh Burgername, Menge und Beilagen, und den angezeigten Satzvorschlag für den Fall, dass wir diese Verknüpfung Siri sofort bei der Bestellung hinzufügen möchten .

 private func donateInteraction(für Bestellung: Bestellung) {
    lass Interaktion = INInteraktion (Absicht: order.intent, Antwort: nil)
    
    Interaktion.Spenden { (Fehler) in
        if error != nil {
            // Fehler behandeln
        } anders {
            print("Erfolgreich gespendete Interaktion")
        }
    }
} 
 Öffentliche Erweiterung Bestellung {
    
    var Absicht: OrderIntent {
        lass orderIntent = OrderIntent()
        orderIntent.burgerName = Name
        if let intValue = Int(Menge) {
            orderIntent.quantity = NSNumber(value: intValue)
        }
        orderIntent.suggestedInvocationPhrase = "Burgerzeit"
        
        orderIntent.additions = additions.map { Option -> INObject in
            return INObject(identifier: option.rawValue,
                            Anzeige: option.rawValue)
        }
        RücksendungAbsicht
    }
    
}

7. Jetzt können wir die Situation handhaben, was passieren wird, wenn der Benutzer den Vorschlag einer Verknüpfung erhält und darauf klickt und falls der Benutzer die Verknüpfung von Siri aufruft.

 öffentliche Klasse OrderIntentHandler: NSObject, OrderIntentHandling {
    
    öffentliche Funktion bestätigen (Absicht: OrderIntent,
                        Vervollständigung: @escaping (OrderIntentResponse) -> Void) {
        Vervollständigung (OrderIntentResponse (Code: OrderIntentResponseCode.ready, userActivity: nil))
    }
    
    öffentliches Funktionshandle (Absicht: OrderIntent, 
                       Vervollständigung: @escaping (OrderIntentResponse) -> Void) {
        guard let burgerName = intention.burgerName else {
            Vervollständigung (OrderIntentResponse (Code: .failure, userActivity: nil))
            Rückkehr
        }
        
        Defaults.save (Bestellung: Bestellung (von: Absicht))
        Vervollständigung (OrderIntentResponse.success (BurgerName: BurgerName, Wartezeit: "5"))
    }
    
} 
Siri Shortcut-Demo

Das ist alles, alles funktioniert

Sie können das gesamte Projekt hier auf meinem GitHub überprüfen

Quellen:

  • https://developer.apple.com/videos/play/wwdc2018/211/
  • https://developer.apple.com/videos/play/wwdc2018/214/
  • https://developer.apple.com/documentation/sirikit/donating_shortcuts
  • https://developer.apple.com/design/human-interface-guidelines/sirikit/overview/siri-shortcuts/
  • https://www.raywenderlich.com/6462-siri-shortcuts-tutorial-in-ios-12