Wie integriere ich Siri in Apps von Drittanbietern?

Seit Apple 2011 seinen Spracherkennungsassistenten eingeführt hat, ist die auf künstlicher Intelligenz (KI) basierende Technologie ein echter Hingucker. Nach dem erfolgreichen Start gab es weitere Verbesserungen und auf dem WWDC Apple Event im Jahr 2017 wurde die Integration von Siri in Apps von Drittanbietern angekündigt.

Diese Integration war jedoch nur auf wenige Apps beschränkt, z. B. Messaging, Zahlungen, Fotosuche und Buchungs-Apps. Mit der Veröffentlichung von iOS 11 wurde diese Liste weiter erweitert und man sah auch die Einführung von SiriKit.

Die Einführung von SiriKit hat der Kappe eine weitere Feder hinzugefügt. Dieses Framework hat die Aufgabe der iOS-App-Entwickler erheblich vereinfacht. Es ist viel einfacher geworden, Siri neue angepasste Funktionen hinzuzufügen, die dann in die Apps von Drittanbietern integriert werden. Es ist jedoch zu beachten, dass Sie nur dann auf die Vorteile von SiriKit zugreifen können, wenn Sie iOS 10 oder die erweiterten Versionen verwenden.

Einer der Hauptfaktoren, die zu einer Zunahme der Popularität von Siri geführt haben, ist, dass die Benutzer nur einen Sprachbefehl geben müssen und die Aufgabe ausgeführt wird. Egal, ob Sie eine monatliche Stromrechnung bezahlen oder einen neuen Artikel in Ihren Online-Warenkorb legen, verwenden Sie den Sprachbefehl, um die Arbeit zu erledigen.

Wenn wir über die Statistik und die Zahlen sprechen, dann laut Business InsiderEtwa 70% der iPhone-Nutzer stimmen zu, dass sie Siri manchmal oder selten verwendet haben. Andererseits, Statista, Berichte dass 51% der Amerikaner die Verwendung von Siri in ihren Geräten umfassend und klar verstehen.

Tatsächlich ist das Hinzufügen von Funktionen einfacher geworden, da sie mithilfe von SiriKit implementiert werden müssen.

Hier haben wir eine ausführliche Diskussion darüber, wie der Siri in eine Drittanbieter-App integriert werden kann.

Auswahl einer bestimmten Nische

Zuerst müssen Sie eine bestimmte Domain oder Nische oder die App basierend auf der App-Aktivität auswählen. Es ist jedoch zu beachten, dass SiriKit nicht alle App-Domänen unterstützt. Sie haben also nur eine begrenzte Auswahl. Sie können beispielsweise Messaging-Apps, Bezahlung, Training, Bildsuche, Klima und Radio usw. auswählen. Weitere Optionen finden Sie im SiriKit-Programmierhandbuch.

Siri nutzt die Absichten, um die Aufgaben auszuführen. Wenn der Benutzer möchte, dass Siri eine Aufgabe erfüllt, sendet er die Benutzerabsicht mit anderen Details an den Handler dieser Absicht. Die Absicht besteht aus einem eigenen Protokoll, das der Manager für diese Absicht einbezieht. Sie haben auch den Vorteil, dass Sie die Standardbenutzeroberfläche im Siri-Fenster erweitern können.

Erstellen eines Cocoa Touch Frameworks

Nachdem Sie die App-Domäne ausgewählt haben, besteht die nächste Aufgabe darin, ein Cocoa Touch-Framework für die Anwendung zu erstellen. Sie sollten daran denken, den Siri-Support durch die Integration der Intents Extension zu erhalten und die Codes nicht direkt verwenden zu können.

Daher müssen Sie die Hilfe des Cocoa Touch-Frameworks in Anspruch nehmen. Dazu müssen Sie zuerst das Xcode-Menü aufrufen und dann Datei–> Neu–> Ziel wählen. Dadurch wird das Cocoa Touch Framework eingerichtet.

Im nächsten Schritt werden Sie aufgefordert, die Vorlage auszuwählen, die Sie für das Ziel verwenden möchten. Dann würden Sie über ein Fenster gelangen, in dem Sie die Vorlagenoption ändern und Ihr Framework benennen können. Sie müssen sorgfältig überprüfen, ob das Framework das ähnliche Projekt enthält, und die Einfügung im Anwendungsfeld überprüfen.

Das Hinzufügen von Klassen zum Framework

Nach Abschluss der obigen Aufgabe fügt der nächste Job die Klassen zum Framework hinzu. Sie können die Klassen hinzufügen, die Ihre Domäne der Benutzeranforderung hervorheben, die die Anforderungen für den Backend-Entwicklungsprozess sendet.

Falls Ihre Klasse bereits integriert ist, fahren Sie mit dem Namen Ihres Frameworks fort. Jetzt müssen Sie die Klasse aus dem Schlüsselziel entfernen und sie manuell zum Framework-Ziel hinzufügen.

Die Integration des Intent Handlers

Jetzt haben wir den wichtigsten Schritt zur Integration des Siri in Apps von Drittanbietern erreicht. Hier müssen wir den Intent Handler implementieren. Bevor Sie jedoch auf die Details eingehen, müssen Sie Ihrer App zunächst ein Ziel für die Absichtserweiterung hinzufügen.

Sie können dies durch den folgenden Prozess tun: Datei–> Neu–> Ziel. Wählen Sie als Nächstes die Absichtserweiterung. In diesem Stadium müssen Sie einen Namen wie den ausfüllen SiriIntentExtension. ”

Jetzt müssen Sie auch einige Daten zur Datei Info.plist hinzufügen.SiriIntentExtension

<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsSupported</key>
<array>
<string>INSendMessageIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
</dict>

Sie müssen die Liste der unterstützten Absichten angeben. Wenn Sie die Zugänglichkeit der Absichten für die gesperrten Geräte verringern, ist es wichtig, die Liste der eingeschränkten Absichten mit Hilfe von detailliert darzustellen IntentsRestrictedWhileLocked Taste.

Auf der anderen Seite haben wir die NSExtensionPrincipalClass Schlüssel mit dem Namen der Klasse in der IntentsExtension Festlegen des Namens des Handlers für die Absicht. Sie können diese Klasse als benennen IntentHandler.

Dies ist ein einfacher Schritt:

import Intents
class IntentHandler: INExtension {
   override func handler(for intent: INIntent) -> Any? {
     return MessagesIntentHandler()
   }
}

Wie wir sehen können, gibt es eine Rückkehr der Instanz von MessagesIntentHandler für die angegebene Absicht, da wir uns nur auf einen einzelnen Absichtstyp konzentriert haben. Bei verschiedenen Absichten müssen Sie jedoch den Intent-Handler überprüfen

if intent is INSendMessageIntent {
  return MessagesIntentHandler()
}

Der Name MessagesIntentHandler ist eine Klasse und der Ort, an dem etwas passiert. Wenn Sie diese Klasse einbinden möchten, können Sie dem folgenden Code folgen.

class MessagesIntentHandler: NSObject, 
INSendMessageIntentHandling {
...
}

Sie brauchen die Unterstützung von NSObjectProtocol Wenn Sie das ausführen möchten INSendMessageIntentHandling Protokoll. Dieses Protokoll verfügt über eine obligatorische und vier weitere optionale Funktionen. Wenn wir über die vier optionalen Funktionen sprechen, dann sind dies:

Der erste ist als der bekannt resolveRecipients (forSendMessage: with 🙂 Hier müssen Sie den Namen des Empfängers für die angegebene Absicht angeben. Wenn Sie eine einzelne Absicht verwenden, bestätigen Sie bitte die gesamten vorgeschlagenen Empfänger. Dadurch wird verhindert, dass Siri die Benutzer auffordert, das Empfängerproblem zu beheben.

func resolveRecipients(forSendMessage intent: INSendMessageIntent, with completion: @escaping ([INPersonResolutionResult]) -> Void) {
  guard let recipients = intent.recipients else {
    completion([])
    return
   }
   let resolutionResults = recipients.map { 
  INPersonResolutionResult.success(with: $0) }
    completion(resolutionResults)
}

Mit dem obigen Code haben Sie die Empfänger aus der Absicht ausgewählt, für jede dieser Lösungen eine Lösung anzubieten.

Die zweite optionale Funktion ist resolveContent (forSendMessage: mit 🙂. Es hilft bei der Validierung des Eingabetests. Überprüfen Sie den folgenden Code zum Filtern leerer Anforderungen.

func resolveContent(forSendMessage intent: INSendMessageIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
   if let text = intent.content, !text.isEmpty {
     completion(INStringResolutionResult.success(with: text))
   } else {
     completion(INStringResolutionResult.needsValue())  
   } 
 }

Die Benutzer müssen autorisiert werden, bevor sie die App verwenden und Zugriff auf die App erhalten können SiriIntentExtentionFunktionalität. Wenn Sie die Autorisierung der Benutzer überprüfen möchten, stellen Sie sicher, dass die INSendMessageIntentHandling Protokoll hat die Bestätigung (sendMessage: Fertigstellung 🙂 Funktion.

func confirm(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
   let userActivity = NSUserActivity(activityType: String(describing: INSendMessageIntent.self))
   let responseCode: INSendMessageIntentResponseCode
   if !NetworkReachability.isReachable {
     userActivity.userInfo = ["error": SiriIntentError.noInternetConnection]
     responseCode = .failureMessageServiceNotAvailable
   } else if !UserSession.hasAuthorizedSession() {
     userActivity.userInfo = ["error": SiriIntentError.notAuthorized]  
     responseCode = .failureRequiringAppLaunch
   } else {
    responseCode = .success
   }
   let response = INSendMessageIntentResponse(code: responseCode, userActivity: userActivity)
  completion(response)
}

Sie müssen die Autorisierung des Benutzers sowie die Internetverbindung überprüfen. Denken Sie daran NSUserActivity ist nur zugänglich, wenn die Anwendung geöffnet ist. Wenn Sie nicht überprüfen können, erhalten Sie eine Fehlermeldung wie z failRequiringAppLaunch.

Siri fordert den Benutzer auf, seine Anwendung zu öffnen. Sobald die App geöffnet wird, würden Sie die sortieren Benutzeraktivität und wahrscheinlich versuchen Sie es erneut mit der Autorisierung. Wir können wie den Code für die letzte Hauptfunktion bekommen wie z

func handle(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
  MessageResolver.resolveSiriRequest(with: intent.content) { message in
   self.apiClient.send(message: message) { error in
    let responseCode: INSendMessageIntentResponseCode
    let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self))
    if let error = error {
      userActivity.userInfo = ["error": error]
      responseCode = .failure
    } else {
      responseCode = .success
    }
    let response = INSendMessageIntentResponse(code: responseCode, userActivity: userActivity)
completion(response)
    }
  }
}

Hier versuchen wir, das Problem mit der Benutzerdomäne zu lösen, indem wir eine umschlossene Nachricht an den Server senden Vorsatz. Dies ist die vom Benutzer aufgezeichnete Textnachricht. Falls die Aufgabe nicht erfolgreich ist, können Sie einen Fehlerantwortcode senden. In einem solchen Fall würde der Siri den Benutzer darüber informieren, dass seine Anfrage nicht erfolgreich gesendet wurde.

Wenn Sie weitere Informationen zur Integration der erhalten möchten MessageIntentHandler, konsultieren Sie den GitHub. Vergessen Sie nicht, das hinzuzufügen NSSiriUsageDescription Schlüssel zur Info.plist der App.

Das Testen

Die letzte Aufgabe besteht nun darin, zu testen, ob die Integration von Siri in die Drittanbieter-App erfolgreich war oder nicht. Dazu müssen wir uns beispielsweise einen App-Namen vorstellen, z. B. Beautiful and the NSSiriUsageDescription.

Versuchen Sie danach, Siri zu verwenden, und sagen Sie Beautiful eine Nachricht mit der Aufschrift Testnachricht. Sie gelangen wie folgt zum nächsten Bildschirm:

testen

Nun, es gibt noch eine andere Alternative, bei der Sie mit dem Autorisierungsprozess auf die Funktionalität zugreifen können, die Sie zum folgenden Bildschirm führt:

testen

Erstklassige Apps von Drittanbietern mit Siri

Es ist bemerkenswert, dass einige erstklassige Marken Siri in ihren Apps von Drittanbietern verwenden. Einige würdige Namen sind Uber, Skype, Lyft, Pinterest, WhatsApp, LinkedIn und andere.

Wichtige Tipps zum Entwickeln der Erweiterung

  • Wenn Sie die Netzwerkanforderungen verwenden, müssen Sie die Domänen sowohl für die App als auch für die App zwangsweise hinzufügen SiriIntentExtension zu Erweiterungen für die Nutzung der App Transport-Sicherheitseinstellungen.
  • Die Apple-Dokumente bieten Ihnen die Möglichkeit, Ihr eigenes maßgeschneidertes Wörterbuch mit app- und benutzerspezifischen Wörtern zu integrieren, die Siri tatsächlich falsch interpretieren kann.
  • Mit dem Befehl INPreferences.requestSiriAuthorizationkönnen Sie manuell um Erlaubnis für die Verwendung von Siri bitten.
  • Siri identifiziert die App nur anhand ihres Namens. Bei zwei Sprachen wie der App-Lokalisierung in Englisch und Deutsch kann der Siri dem Benutzer ohne bestimmten Lokalisierungsnamen nicht helfen, wenn der Benutzer Deutsch als Siri-Sprache auswählt. Sie können dieses Problem jedoch lösen, indem Sie die CFBundleDisplayName”Schlüssel zur Lokalisierung mit genauem Wert.

Die abschließenden Zeilen

SiriKit ist immer noch eine neue Funktion, die in letzter Zeit eingeführt wurde. Daher kann es einige Zeit dauern, bis die Entwickler der iOS-App das Framework besser verstanden haben. Einer der Aspekte, die Probleme für den Benutzer verursachen können, sind Wortbeschränkungen. Apple versucht jedoch, dieses Problem zu beheben und das Framework zu aktualisieren, um es flexibler zu gestalten.

Wir wissen, dass Apple seine neueste iOS 12.1-Version mit mehreren neuen Features und Funktionen herausgebracht hat. Das Unternehmen plant, das Angebot an App-Domains zu erweitern und der Liste einige weitere hinzuzufügen.

Wenn Sie Siri in Apps von Drittanbietern integrieren möchten, können Sie sich auf eines der kompetenten Unternehmen für App-Entwicklung verlassen und sich mit den Experten in Verbindung setzen.

Similar Posts

Leave a Reply