Een inleiding tot overdracht

Invoering

Met iOS 8 en OS X Yosemite heeft Apple een geweldige nieuwe functie geïntroduceerd waarmee ontwikkelaars kunnen profiteren, Afgeven. Overdracht stelt apps in staat gegevens en toepassingsstatusinformatie over te dragen van het ene naar het andere apparaat via Bluetooth. Hiermee kunnen gebruikers van uw apps een taak op een van hun apparaten starten en deze vervolgens naadloos op een andere uitvoeren.

Een voorbeeld hiervan is het beginnen met het schrijven van een bericht op uw iPhone en vervolgens afwerken en verzenden van hetzelfde bericht op uw iPad. In deze tutorial laat ik je zien hoe je Handoff in je eigen applicaties kunt adopteren door middel van een zeer eenvoudige notitie-app.

Deze tutorial vereist dat je Xcode 6+ gebruikt en twee Handoff-compatibele apparaten hebt. Niet alle iOS 8-apparaten hebben Bluetooth LE (Low Energy), wat nodig is voor Handoff. Deze functie is daarom alleen beschikbaar - en kan alleen worden getest op - de volgende apparaten:

  • iPhone 5 en hoger
  • iPad 4th Generation, inclusief elk iPad Air-model
  • iPad Mini
  • iPod Touch 5e generatie

Tijdens het testen moet u op elk iCloud-account inloggen op elk apparaat en Handoff inschakelen in de apparaatinstellingen.

1. Projectinstelling

Maak een nieuw project in Xcode en kies het Toepassing enkele weergave sjabloon van de iOS> Applicatie sectie.

Configureer het project zoals hieronder getoond. Let daar op Taal ingesteld op Snel en apparaten ingesteld op universeel.

Nadat Xcode uw project heeft gemaakt, opent u ViewController.swift en vervang de implementatie van de ViewController klasse met de volgende implementatie:

class ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate var noteTitleField: UITextField! var noteContentView: UITextView! override func viewDidAppear (geanimeerd: Bool) self.noteTitleField = UITextField (frame: CGRect (x: 12, y: 28, width: self.view.frame.width - 22, height: 20)) self.noteTitleField.placeholder = "Note Title" 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 = "" overschrijven func viewDidLoad () super.viewDidLoad () // Voer een extra installatie uit nadat de weergave is geladen, meestal vanaf een punt. 

De implementatie is vrij eenvoudig. Het maakt de ViewController klasse adopteer beide UITextFieldDelegate en UITextViewDelegate protocollen en voegt er een toe UITextField en UITextView naar de view van de view controller voor tekstinvoer.

Bouw en run uw app op een van uw testapparaten en u zou een zeer eenvoudige gebruikersinterface moeten zien met twee invoervelden, een tekstveld voor een titel en een tekstweergave voor de inhoud van de notitie.

2. Hand-out instellen

Activiteiten die worden overgedragen tussen apparaten met Handoff worden gemodelleerd door de NSUserActivity klasse. Je zult meer over deze klasse leren en hoe je het later in deze tutorial kunt gebruiken. Ten eerste moet uw app zijn geconfigureerd om deze activiteiten met succes tot stand te brengen.

Elk type activiteit dat door uw app wordt ondersteund, moet een unieke ID krijgen, vergelijkbaar met hoe elke iOS-applicatie zijn eigen unieke ID heeft. Deze ID's kunnen zijn wat u maar wilt, maar de beste methode is om omgekeerd DNS-notatie te gebruiken, zoals com.tutsplus.handoff-introduction.note. Het exemplaar van de toepassing die op elk apparaat wordt uitgevoerd, moet ook door hetzelfde iOS-ontwikkelingsteam worden ondertekend om de activiteiten correct te kunnen herkennen.

U moet eerst de activiteits-ID's die uw app ondersteunt toevoegen aan de doelwitten Info.plist. Open de doelwitten Info.plist en voeg de NSUserActivityTypes sleutel. Maak dit item een reeks en voeg een enkel item toe, com.tutsplus.handoff-introduction.note, zoals getoond in de onderstaande screenshot.

Selecteer vervolgens het project in de Project Navigator en, in de editor aan de rechterkant, open de Algemeen tab. In de Identiteit sectie, instellen Team naar het juiste iOS-ontwikkelingsteam.

Als deze stappen zijn voltooid, mits u bent ingelogd op hetzelfde iCloud-account en bent verbonden met hetzelfde Wi-Fi-netwerk op elk van uw testapparaten, is uw toepassing klaar om Handoff te gaan gebruiken.

3. Een gebruikersactiviteit verzenden

Vervolgens moet u een code toevoegen om de gebruikersactiviteit van het ene naar het andere apparaat te verzenden. Werk het viewDidLoad methode van de ViewController klasse zoals hieronder getoond.

override func viewDidLoad () super.viewDidLoad () let activity = NSUserActivity (activityType: "com.tutsplus.handoff-introduction.note") activity.title = "Opmerking" activity.userInfo = ["title": "", " content ":" "] userActivity = activity userActivity? .becomeCurrent ()

Dit creëert een basis NSUserActivity object met de ID die u aan uw doelwitten heeft toegevoegd Info.plist eerder. U geeft dit activiteitsobject een titel en een gebruikers informatie woordenboek met lege tekenreekswaarden voor de titel en inhoud sleutels.

In deze zelfstudie gaan we onze activiteiten onder de aandacht brengen gebruikers informatie woordenboek. U kunt echter elk soort eigenschappentype toevoegen, zoals cijfers, arrays en woordenboeken, evenals andere NSCoding compliant object.

Vervolgens wijst u deze nieuwe activiteit toe aan de gebruikersactiviteit eigendom van jouw ViewController bijvoorbeeld zodat de Handoff-API ernaar verwijst. De UIViewController klasse erft deze eigenschap van de UIResponder klasse.

Ten slotte, bel je becomeCurrent op het activiteitsobject om het systeem te vertellen dat dit de huidige gebruikersactiviteit is die door de toepassing wordt verzonden.

U hebt nu uw gebruikersactiviteit met succes ingesteld, maar we moeten deze ook vullen met bepaalde inhoud als de gebruiker zijn notitie schrijft. Om dit te doen, werken we de huidige gebruikersactiviteit bij door de updateUserActivityState (_ :) methode in de ViewController klasse. Deze methode wordt periodiek door de Handoff-API genoemd om de huidige gebruikersactiviteit bij te werken. Voeg de volgende code toe aan de ViewController klasse.

override func updateUserActivityState (activiteit: NSUserActivity) activity.addUserInfoEntriesFromDictionary (["title": self.noteTitleField.text, "content": self.noteContentView.text]) super.updateUserActivityState (activiteit) func textField (textField: UITextField, shouldChangeCharactersInRange bereik: NSRange, replacementString string: String) -> Bool self.updateUserActivityState (userActivity!) return true func textView (textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool self.updateUserActivityState (userActivity! ) return true

De updateUserActivityState (_ :) methode geeft ons een verwijzing naar de huidige gebruikersactiviteit en vervangt de waarden in de activiteiten gebruikers informatie woordenboek met de nieuwste waarden van uw app. Merk op dat we deze methode ook aanroepen in de superklasse.

We hebben ook twee andere methoden geïmplementeerd, textField (_: shouldChangeCharactersInRange: replacementString :) van de UITextFieldDelegate protocol en TextView (_: shouldChangeTextInRange: replacementText :) van de UITextViewDelegate protocol. In deze methoden werken we de huidige gebruikersactiviteit bij wanneer de tekst in een van de invoervelden verandert. Hoewel dit niet noodzakelijk is, zorgt dit ervoor dat uw activiteit altijd de nieuwste informatie bevat.

U bent nu klaar om uw app uit te testen met Handoff. Bouw en run uw app op beide testapparaten. Druk op de vergrendelknop op een apparaat om het apparaat in te slapen terwijl de app op de andere open blijft. Maak het apparaat dat u net hebt vergrendeld wakker en u zou het app-pictogram in de linkerbenedenhoek van het vergrendelingsscherm moeten zien verschijnen. Voer een uithaalbeweging uit op dit pictogram en je app wordt hervat via Handoff.

Je kunt ook dubbelklikken op de startknop om de app-switcher te openen en de app Handoff capable verschijnt links op het startscherm. Op dit moment wordt je app alleen hervat naar dezelfde lege interface. Laten we dat nu oplossen.

4. Herstel van een gebruikersactiviteit

Een app uit een overdracht herstellen NSUserActivity wordt afgehandeld door de gedelegeerde van uw toepassing. De app-deelnemer geeft vervolgens het gebruikersactiviteit-object door aan de rootview-controller van de toepassing om zichzelf te herstellen. Als de weergavecontroller die de activiteit moet verwerken niet de root view-controller van uw toepassing is, geeft u deze gewoon door vanuit de root view-controller naar de hiërarchie van de weergavecontroller tot u de gewenste plaats in uw app bereikt.

Open AppDelegate.swift en voeg de volgende methode toe aan de AppDelegate klasse:

toepassing func (toepassing: UIApplication, continueUserActivity-gebruikerActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool self.window? .rootViewController? .restoreUserActivityState (userActivity) return true

In deze methode geeft u het gebruikersactiviteit-object door aan de rootview-controller van de toepassing en door terug te sturen waar, u vertelt de toepassing dat u de Handoff-gebruikersactiviteit met succes hebt ontvangen en verwerkt.

Open vervolgens ViewController.swift en voeg de volgende methode toe aan de ViewController klasse:

override func restoreUserActivityState (activiteit: NSUserActivity) self.noteTitleField.text = activity.userInfo? ["title"] as! String self.noteContentView.text = activity.userInfo? ["Content"] as! Draad 

Vergelijkbaar met de updateUserActivityState (_ :) methode van eerder in deze tutorial overschrijf je de restoreUserActivityState (_ :) methode om de informatie uit de NSUserActivity voorwerp. Bij de implementatie van deze methode werkt u beide invoervelden bij met de gegevens die zijn opgeslagen in het gebruikersactiviteitsobject.

Bouw en voer uw app uit op beide testapparaten en begin met het schrijven van een notitie op één apparaat. Open vanuit het vergrendelingsscherm of de app-switcher op je andere apparaat de app via Handoff en je zou de tekst moeten zien die je op je eerste apparaat had geschreven op je tweede apparaat.

5. Foutafhandeling en delegeren van methoden

In tegenstelling tot veel API's die door Apple voor iOS worden geleverd, is foutafhandeling niet eenvoudig wanneer Handoff wordt gebruikt als u niet weet waar deze fouten moeten worden afgehandeld. Het eerste punt waarop uw app op de hoogte wordt gesteld van een overdrachtfout, is via de applicatie (_: didFailToContinueUserActivityWithType: error :) in de klasse voor de deelnemers aan de app. In deze methode kunt u bepalen wat de oorzaak van de fout was en welk type activiteit de fout heeft. Merk op dat het type van een NSUserActivity object is hetzelfde als de unieke identifier die u eraan toewijst.

Wanneer uw toepassing doorgaat met een Handoff-activiteit, moet deze eerst de gegevens downloaden die zijn gekoppeld aan de activiteit van het oorspronkelijke apparaat via Bluetooth. Voordat deze download voltooid is, wordt een andere methode voor het delegeren van toepassingen aangeroepen: applicatie (_: willContinueUserActivityWithType :). In deze optionele methode kunt u een Booleaanse waarde retourneren om de Handoff API te vertellen of u de gebruikersactiviteit wilt blijven ontvangen. In sommige situaties kan dit nuttig zijn omdat u een bepaald type kunt uitschakelen NSUserActivity wanneer aan bepaalde voorwaarden is voldaan.

Conclusie

In deze zelfstudie heb ik je laten zien hoe je de kunt gebruiken NSUserActivity klasse om Handoff gemakkelijk in uw eigen iOS 8-toepassingen te implementeren. U hebt een zeer eenvoudige applicatie gemaakt, die in staat is draadloos gegevens over te dragen naar een ander apparaat via Bluetooth.

Hoewel de voorbeeldtoepassing die we in deze zelfstudie hebben doorlopen heel eenvoudig was, kunnen uw eigen toepassingen zoveel gebruikersactiviteitstypen hebben als u wilt voor een breed scala aan functies. Zoals altijd, als je opmerkingen of vragen hebt, laat ze dan achter in de reacties hieronder.