Mit iOS 8 und OS X Yosemite hat Apple eine großartige neue Funktion für Entwickler eingeführt, Weiterleiten. Mit Handoff können Apps Daten und Informationen zum Anwendungsstatus über Bluetooth von einem Gerät auf ein anderes übertragen. Auf diese Weise können Benutzer Ihrer Apps eine Aufgabe auf einem ihrer Geräte beginnen und anschließend nahtlos auf einem anderen Gerät fortsetzen.
Ein Beispiel dafür wäre, eine Nachricht auf Ihr iPhone zu schreiben und diese Nachricht anschließend auf Ihrem iPad zu beenden und zu senden. In diesem Tutorial werde ich Ihnen zeigen, wie Sie Handoff in Ihren eigenen Anwendungen über eine sehr einfache Notiz-App übernehmen können.
Für dieses Lernprogramm müssen Sie Xcode 6+ ausführen und über zwei Handoff-kompatible Geräte verfügen. Nicht alle iOS 8-Geräte verfügen über Bluetooth LE (Low Energy), was für Handoff erforderlich ist. Diese Funktion ist daher nur verfügbar und kann nur auf folgenden Geräten getestet werden:
Während des Tests müssen Sie sich auf jedem Gerät bei demselben iCloud-Konto anmelden und in den Geräteeinstellungen die Option Handoff aktivieren.
Erstellen Sie ein neues Projekt in Xcode und wählen Sie das Einzelansicht-Anwendung Vorlage aus der iOS> Anwendung Sektion.
Konfigurieren Sie das Projekt wie unten gezeigt. Beachten Sie, dass Sprache ist eingestellt auf Schnell und Geräte ist eingestellt auf Universal.
Öffnen Sie, nachdem Xcode Ihr Projekt erstellt hat ViewController.swift und ersetzen Sie die Implementierung der ViewController
Klasse mit der folgenden Implementierung:
Klasse ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate var noteTitleField: UITextField! var noteContentView: UITextView! func viewDidAppear überschreiben (animiert: Bool) self.noteTitleField = UITextField (Frame: CGRect (x: 12, y: 28, Breite: self.view.frame.width - 22, height: 20)) self.noteTitleField.placeholder = "Notentitel" self.noteTitleField.delegate = self self.noteContentView = UITextView (Frame: CGRect (x: 8, y: 56, width: self.view.frame.width - 16, height: self.view.frame.height - 64)) self.noteContentView.text = "Note Content" self.noteContentView.delegate = self self.view.addSubview (self.noteTitleField) self.view.addSubview (self.noteContentView) func textViewDidBeginEditing (textView: UITextView) if textView.text == "Note Content" textView.text = "" überschreiben func viewDidLoad () super.viewDidLoad () // Führen Sie nach dem Laden der Ansicht zusätzliche Einstellungen durch, normalerweise aus einer Feder.
Die Implementierung ist ziemlich unkompliziert. Es macht das ViewController
Klasse übernehmen beide UITextFieldDelegate
und UITextViewDelegate
Protokolle, und es fügt ein UITextField
und UITextView
zur Ansicht des View-Controllers für die Texteingabe.
Erstellen und starten Sie Ihre App auf einem Ihrer Testgeräte. Sie sollten eine sehr einfache Benutzeroberfläche mit zwei Eingabefeldern sehen, einem Textfeld für einen Titel und einer Textansicht für den Inhalt der Notiz.
Aktivitäten, die zwischen Geräten mit Handoff übertragen werden, werden durch die modelliert NSUserActivity
Klasse. Weitere Informationen zu dieser Klasse und deren Verwendung finden Sie später in diesem Lernprogramm. Zunächst muss Ihre App konfiguriert sein, damit diese Aktivitäten erfolgreich erstellt werden können.
Jede Art von Aktivität, die Ihre App unterstützt, muss eine eindeutige Kennung erhalten, ähnlich wie jede iOS-Anwendung eine eigene eindeutige ID hat. Diese Bezeichner können beliebig sein, aber Sie sollten die umgekehrte DNS-Notation verwenden, z. B. com.tutsplus.handoff-Einführung.note. Die auf jedem Gerät ausgeführte Instanz der Anwendung muss außerdem vom selben iOS-Entwicklungsteam signiert sein, damit die Aktivitäten ordnungsgemäß erkannt werden.
Sie müssen zunächst die Aktivitäts-IDs, die Ihre App unterstützt, zu den Zielen des Ziels hinzufügen Info.plist. Öffne das Ziel Info.plist und füge das hinzu NSUserActivityTypes Schlüssel. Machen Sie diesen Artikel zu einem Array und fügen Sie einen einzelnen Artikel hinzu, com.tutsplus.handoff-Einführung.note, wie im Screenshot unten gezeigt.
Als nächstes wählen Sie das Projekt in der Projektnavigator und öffnen Sie im Editor rechts die Allgemeines Tab. In dem Identität Abschnitt, Set Mannschaft an das richtige iOS-Entwicklungsteam.
Wenn Sie mit diesen Schritten fertig sind, sind Sie mit demselben iCloud-Konto angemeldet und auf jedem Ihrer Testgeräte mit demselben Wi-Fi-Netzwerk verbunden. Ihre Anwendung kann nun mit der Verwendung von Handoff beginnen.
Als Nächstes müssen Sie Code hinzufügen, damit die Benutzeraktivität von einem Gerät an ein anderes gesendet werden kann. Aktualisieren Sie die viewDidLoad
Methode der ViewController
Klasse wie unten gezeigt.
func viewDidLoad () überschreiben super.viewDidLoad () let activity = NSUserActivity (activityType: "com.tutsplus.handoff-Introduction.note") activity.title = "Note" activity.userInfo = ["title": "", " content ":" "] userActivity = Aktivität userActivity? .becomeCurrent ()
Dies schafft eine Basis NSUserActivity
Objekt mit der Kennung, die Sie zu Ihrem Ziel hinzugefügt haben Info.plist vorhin. Sie geben dieses Aktivitätsobjekt ein Titel
und ein Benutzerinformation
Wörterbuch mit leeren Zeichenfolgewerten für die Titel und Inhalt Schlüssel.
In diesem Tutorial werden wir Zeichenfolgen in unsere Aktivitäten aufnehmen Benutzerinformation
Wörterbuch. Sie können jedoch jeden Eigenschaftslistentyp hinzufügen, z. B. Zahlen, Arrays und Wörterbücher sowie beliebige NSCoding
konformes Objekt.
Diese neue Aktivität weisen Sie dann dem zu Benutzeraktivität
Eigentum Ihrer ViewController
Instanz, so dass die Handoff-API einen Verweis darauf hat. Das UIViewController
Klasse erbt diese Eigenschaft von der UIResponder
Klasse.
Zum Schluss rufst du an werdenCurrent
auf dem Aktivitätsobjekt, um dem System mitzuteilen, dass dies die aktuelle Benutzeraktivität ist, die von der Anwendung gesendet werden soll.
Sie haben Ihre Benutzeraktivität jetzt erfolgreich eingerichtet. Wir müssen sie jedoch mit etwas Inhalt füllen, wenn der Benutzer seine Notiz schreibt. Dazu aktualisieren wir die aktuelle Benutzeraktivität durch Überschreiben des updateUserActivityState (_ :)
Methode in der ViewController
Klasse. Diese Methode wird in regelmäßigen Abständen von der Handoff-API aufgerufen, um die aktuelle Benutzeraktivität zu aktualisieren. Fügen Sie dem folgenden Code hinzu ViewController
Klasse.
func updateUserActivityState (Aktivität: NSUserActivity) überschreiben activity.addUserInfoEntriesFromDictionary (["title": self.noteTitleField.text, "content": self.noteContentView.text]) super.updateUserActivityState (activity) func textField: range: NSRange, replacementString string: String) -> Bool self.updateUserActivityState (userActivity!) gibt true zurück. true. ) true zurückgeben
Das updateUserActivityState (_ :)
Diese Methode gibt uns einen Hinweis auf die aktuelle Benutzeraktivität und ersetzt die Werte in der Aktivität der Aktivität Benutzerinformation
Wörterbuch mit den neuesten Werten aus Ihrer App. Beachten Sie, dass wir diese Methode auch in der Superklasse aufrufen.
Wir haben auch zwei andere Methoden implementiert, textField (_: shouldChangeCharactersInRange: replacementString :)
des UITextFieldDelegate
Protokoll und textView (_: shouldChangeTextInRange: replacementText :)
des UITextViewDelegate
Protokoll. In diesen Methoden aktualisieren wir die aktuelle Benutzeraktivität, wenn sich der Text in einem der Eingabefelder ändert. Dies ist zwar nicht notwendig, stellt jedoch sicher, dass Ihre Aktivität immer die neuesten Informationen enthält.
Jetzt können Sie Ihre App mit Handoff testen. Erstellen Sie Ihre App und führen Sie sie auf beiden Testgeräten aus. Drücken Sie die Sperrtaste an einem Gerät, um das Gerät in den Ruhezustand zu versetzen, während die App auf dem anderen Gerät geöffnet bleibt. Wachen Sie das gerade gesperrte Gerät auf, und das App-Symbol sollte in der unteren linken Ecke des Sperrbildschirms angezeigt werden. Führen Sie auf dieses Symbol eine Wischgeste aus, und Ihre App wird über Handoff fortgesetzt.
Alternativ können Sie auch doppelt auf die Home-Schaltfläche klicken, um den App-Switcher aufzurufen, und Ihre Handoff-fähige App wird auf der linken Seite des Home-Bildschirms angezeigt. Momentan wird Ihre App nur noch mit derselben leeren Schnittstelle fortgesetzt. Lassen Sie uns das jetzt beheben.
Wiederherstellen einer App aus einer Übergabe NSUserActivity
wird von Ihrem Anwendungsdelegierten behandelt. Der App-Delegat übergibt dann das Benutzeraktivitätsobjekt an den Root-View-Controller der Anwendung, um sich selbst wiederherzustellen. Wenn der View Controller, der die Aktivität verarbeiten muss, nicht der Root-View-Controller Ihrer Anwendung ist, übergeben Sie ihn einfach vom Root-View-Controller an die View-Controller-Hierarchie, bis Sie die gewünschte Stelle in Ihrer App erreichen.
Öffnen AppDelegate.swift und fügen Sie der folgenden Methode hinzu AppDelegate
Klasse:
func-Anwendung (Anwendung: UIApplication, continueUserActivity BenutzerAktivität: NSUserActivity, RestorationHandler: ([AnyObject]!) -> Void) -> Bool self.window? .rootViewController? .restoreUserActivityState (Benutzeraktivität) return true
Bei dieser Methode übergeben Sie das Benutzeraktivitätsobjekt an den Root-View-Controller der Anwendung und kehren Sie zurück wahr
, Sie teilen der Anwendung mit, dass Sie die Handoff-Benutzeraktivität erfolgreich erhalten und verarbeitet haben.
Als nächstes öffnen ViewController.swift und fügen Sie der folgenden Methode hinzu ViewController
Klasse:
Überschreiben Sie func restoreUserActivityState (Aktivität: NSUserActivity) self.noteTitleField.text = activity.userInfo? ["title"] as! String self.noteContentView.text = activity.userInfo? ["Content"] as! Zeichenfolge
Ähnlich wie updateUserActivityState (_ :)
Methode von früher in diesem Tutorial, überschreiben Sie die restoreUserActivityState (_ :)
Methode, um die Informationen aus der NSUserActivity
Objekt. In Ihrer Implementierung dieser Methode aktualisieren Sie beide Eingabefelder mit den im Benutzeraktivitätsobjekt gespeicherten Daten.
Erstellen und starten Sie Ihre App auf beiden Testgeräten, und schreiben Sie eine Notiz auf ein Gerät. Öffnen Sie die App entweder über den Sperrbildschirm oder den App-Umschalter auf Ihrem anderen Gerät über Handoff. Der Text, den Sie auf Ihrem ersten Gerät geschrieben haben, sollte auf dem zweiten Gerät angezeigt werden.
Im Gegensatz zu vielen von Apple für iOS bereitgestellten APIs ist die Fehlerbehandlung bei Verwendung von Handoff nicht einfach, wenn Sie nicht wissen, wo diese Fehler behandelt werden müssen. Der erste Punkt, an dem Ihre App über einen Handoff-Fehler informiert wird, ist der Anwendung (_: didFailToContinueUserActivityWithType: Fehler :)
in der App-Delegatenklasse. In dieser Methode können Sie ermitteln, was die Fehlerursache war und auf welche Art von Aktivität sich der Fehler bezieht. Beachten Sie, dass der Typ eines NSUserActivity
Objekt ist identisch mit der eindeutigen Kennung, die Sie ihm zuweisen.
Wenn Ihre Anwendung mit einer Handoff-Aktivität fortfährt, muss sie zunächst die mit der Aktivität verknüpften Daten vom Originalgerät über Bluetooth herunterladen. Bevor dieser Download jedoch abgeschlossen ist, wird eine andere Methode zum Delegieren von Anwendungen aufgerufen: Anwendung (_: willContinueUserActivityWithType :)
. Bei dieser optionalen Methode können Sie einen booleschen Wert zurückgeben, um der Handoff-API mitzuteilen, ob Sie die Benutzeraktivität weiterhin empfangen möchten. In einigen Situationen kann dies hilfreich sein, da Sie einen bestimmten Typ von deaktivieren können NSUserActivity
wenn bestimmte Bedingungen erfüllt sind.
In diesem Tutorial habe ich Ihnen gezeigt, wie Sie das verwenden können NSUserActivity
Klasse für die einfache Übernahme von Handoff in Ihre eigenen iOS 8-Anwendungen. Sie haben eine sehr einfache Anwendung erstellt, mit der Daten drahtlos über Bluetooth an ein anderes Gerät übertragen werden können.
Während die Beispielanwendung, die wir in diesem Lernprogramm durchlaufen haben, sehr einfach war, können Ihre eigenen Anwendungen für eine Vielzahl von Funktionen beliebig viele Benutzeraktivitätstypen aufweisen. Wenn Sie Kommentare oder Fragen haben, lassen Sie sie wie folgt in den Kommentaren.