En introduksjon til handoff

Introduksjon

Med iOS 8 og OS X Yosemite, introduserte Apple en flott ny funksjon for utviklere å dra nytte av, Overrekke. Handoff tillater apper å overføre data og programstatusinformasjon fra en enhet til en annen via Bluetooth. Dette gjør det mulig for brukere av appene dine å starte en oppgave på en av enhetene sine, og deretter fortsette den sømløst på en annen.

Et eksempel på dette ville begynne å skrive en melding på iPhone og deretter fullføre og sende samme melding på iPad. I denne opplæringen skal jeg vise deg hvordan du kan adoptere Handoff i dine egne applikasjoner gjennom et veldig enkelt notat som tar app.

Denne opplæringen krever at du kjører Xcode 6+ og har to Handoff-kompatible enheter. Ikke alle iOS 8-enhetene har Bluetooth LE (Low Energy), som kreves for Handoff. Denne funksjonen er derfor bare tilgjengelig og kan bare testes på følgende enheter:

  • iPhone 5 og nyere
  • iPad 4 generasjon, inkludert alle iPad-modeller
  • Ipad mini
  • iPod Touch 5th Generation

Under testingen må du logge på samme iCloud-konto på hver enhet og aktivere Handoff i enhetens innstillinger.

1. Prosjektoppsett

Opprett et nytt prosjekt i Xcode og velg Enkeltvisningsprogram mal fra iOS> Søknad seksjon.

Konfigurer prosjektet som vist nedenfor. Noter det Språk er satt til Fort og enheter er satt til Universell.

Når Xcode har opprettet prosjektet ditt, åpnes ViewController.swift og erstatte implementeringen av ViewController klasse med følgende implementering:

klasse ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate var noteTitleField: UITextField! var noteContentView: UITextView! overstyr func viewDidAppear (animert: Bool) self.noteTitleField = UITextField (ramme: CGRect (x: 12, y: 28, bredde: self.view.frame.width - 22, høyde: 20)) self.noteTitleField.placeholder = "Notatittel" self.noteTitleField.delegate = self self.noteContentView = UITextView (ramme: CGRect (x: 8, y: 56, bredde: self.view.frame.width - 16, høyde: self.view.frame.height - selv) hvis textView.text == "Note Content" textView.text = "" tilsidesatte func viewDidLoad () super.viewDidLoad () // Gjør eventuelle tilleggsoppsett etter at du har lastet opp visningen, vanligvis fra en nib. 

Gjennomføringen er ganske enkel. Det gjør det ViewController klasse adopterer begge UITextFieldDelegate og UITextViewDelegate protokoller, og det legger til en UITextField og UITextView til visningskontrollørens visning for tekstinngang.

Bygg og kjøre appen din på en av testenhetene dine, og du bør se et veldig grunnleggende brukergrensesnitt med to inntastingsfelter, et tekstfelt for en tittel og en tekstvisning for notatets innhold.

2. Sette opp handoff

Aktiviteter overført mellom enheter med Handoff er modellert av NSUserActivity klasse. Du lærer mer om denne klassen og hvordan du bruker den senere i denne opplæringen. Først må appen din være konfigurert for å kunne opprette disse aktivitetene.

Hver type aktivitet som appen din støtter må gis en unik identifikator, ligner hvordan hvert iOS-program har sitt eget unike id. Disse identifikatorene kan være hva du vil, men den beste fremgangsmåten er å bruke omvendt DNS-notasjon, for eksempel com.tutsplus.handoff-introduction.note. Forekomsten av programmet som kjører på hver enhet, må også signeres av det samme IOS-utviklingslaget for at aktivitetene skal kunne gjenkjennes ordentlig.

Du må først legge til aktivitetsidentifikatorene som appen din støtter til målets Info.plist. Åpne målets Info.plist og legg til NSUserActivityTypes nøkkel. Gjør dette elementet en Array og legg til et enkelt element, com.tutsplus.handoff-introduction.note, som vist på skjermbildet nedenfor.

Deretter velger du prosjektet i Prosjektnavigator og i editoren til høyre, åpne Generell fane. I Identitet seksjon, sett Team til riktig iOS utviklingsteam.

Med disse trinnene fullført, forutsatt at du er logget på den samme iCloud-kontoen og koblet til det samme Wi-Fi-nettverket på hver av testenhetene dine, er søknaden din klar til å begynne å bruke Handoff.

3. Sende en brukeraktivitet

Deretter må du legge til noe kode for at brukeraktiviteten skal sendes fra en enhet til en annen. Oppdater viewDidLoad metode av ViewController klassen som vist nedenfor.

overstyr func viewDidLoad () super.viewDidLoad () la aktivitet = NSUserActivity (activityType: "com.tutsplus.handoff-introduction.note") activity.title = "Note" activity.userInfo = ["title": "", " innhold ":" "] userActivity = aktivitetsbrukerAktivitet? .becomeCurrent ()

Dette skaper en grunnleggende NSUserActivity objekt med identifikatoren du har lagt til målet ditt Info.plist Tidligere. Du oppgir denne aktiviteten a tittel og a brukerinformasjon ordbok med tomme strengverdier for tittel og innhold nøkler.

I denne opplæringen skal vi sette strenger inn i vår aktivitet brukerinformasjon ordbok. Du kan imidlertid legge til en hvilken som helst egenskapsliste, for eksempel tall, arrays og ordbøker, så vel som noen NSCoding kompatibelt objekt.

Du tilordner deretter denne nye aktiviteten til userActivity eiendom av din ViewController forekomst slik at Handoff API har en referanse til det. De UIViewController Klassen arver denne eiendommen fra UIResponder klasse.

Til slutt, du ringer becomeCurrent på aktivitetsobjektet for å fortelle systemet at dette er den nåværende brukeraktiviteten som skal sendes ut av programmet.

Du har nå satt opp brukeraktiviteten din, men vi må også fylle den med noe innhold som brukeren skriver notatet sitt. For å gjøre dette oppdaterer vi gjeldende brukeraktivitet ved å overstyre updateUserActivityState (_ :) metode i ViewController klasse. Denne metoden kalles periodisk av Handoff API for å oppdatere gjeldende brukeraktivitet. Legg til følgende kode i ViewController klasse.

overstyr func updateUserActivityState (aktivitet: NSUserActivity) activity.addUserInfoEntriesFromDictionary (["title": self.noteTitleField.text, "content": self.noteContentView.text]) super.updateUserActivityState (aktivitet) func textField (textField: UITextField, shouldChangeCharactersInRange rekkevidde: NSRange, erstatningString streng: String) -> Bool self.updateUserActivityState (userActivity!) return true func textView (textView: UITextView, shouldChangeTextInRange rekkevidde: NSRange, erstatningText tekst: String) -> Bool self.updateUserActivityState (userActivityState ) tilbake true

De updateUserActivityState (_ :) Metoden gir oss en referanse til gjeldende brukeraktivitet, og den erstatter verdiene i aktiviteten brukerinformasjon ordbok med de nyeste verdiene fra appen din. Legg merke til at vi også påberoper denne metoden på superklassen.

Vi har også implementert to andre metoder, Textfield (_: shouldChangeCharactersInRange: replacementString :) av UITextFieldDelegate protokoll og textView (_: shouldChangeTextInRange: replacementText :) av UITextViewDelegate protokoll. I disse metodene oppdaterer vi gjeldende brukeraktivitet når teksten i noen av feltene endres. Selv om dette ikke er nødvendig, sikrer dette at aktiviteten din alltid vil inneholde den nyeste informasjonen.

Du er nå klar til å teste appen din med Handoff. Bygg og kjør appen din på begge testenhetene dine. Trykk på låseknappen på en enhet for å sette enheten i dvale mens appen er åpen på den andre. Våkne enheten som du bare låst, og du bør se appikonet vises nederst til venstre på låseskjermen. Utfør en sveipebevegelse på dette ikonet, og appen din vil gjenoppta via Handoff.

Alternativt kan du dobbeltklikke på hjemme-knappen for å gå inn i appbryteren, og appen Handoff-kompatibel vises på venstre side av startskjermbildet. For øyeblikket gjenopptar appen din bare til det samme blanke grensesnittet. La oss fikse det nå.

4. Gjenopprette fra en brukeraktivitet

Gjenoppretter en app fra en Handoff NSUserActivity håndteres av søknadsdelegatet. App-delegaten sender deretter brukeraktivitetsobjektet til programmets rotasjonsvisningskontroller for å gjenopprette seg selv. Hvis visningskontrolleren som trenger å behandle aktiviteten, ikke er rotasjonsvisningskontrollen til søknaden din, så sender du den bare fra roten visnings kontrolleren ned til visningsregulatorhierarkiet til du kommer til ønsket sted i appen din.

Åpen AppDelegate.swift og legg til følgende metode til AppDelegate klasse:

FunC Application (Application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Feid) -> Bool self.window? .rootViewController? .restoreUserActivityState (userActivity) return true

I denne metoden overfører du brukeraktivitetsobjektet til programmets rotasjonsvisningskontroller og ved å returnere ekte, du forteller programmet du har mottatt og behandlet Handoff-brukeraktiviteten.

Deretter åpne ViewController.swift og legg til følgende metode til ViewController klasse:

overstyr func restoreUserActivityState (aktivitet: NSUserActivity) self.noteTitleField.text = activity.userInfo? ["title"] som! String self.noteContentView.text = activity.userInfo? ["Innhold"] som! String

Ligner på updateUserActivityState (_ :) metode fra tidligere i denne opplæringen, overstyrer du restoreUserActivityState (_ :) metode for å hente informasjonen fra NSUserActivity gjenstand. Ved implementeringen av denne metoden oppdaterer du begge innspillingsfeltene med dataene som er lagret i brukeraktivitetsobjektet.

Bygg og kjør appen din på begge testenhetene dine, og begynn å skrive et notat på en enhet. Fra enten låseskjermen eller appbryteren på den andre enheten, åpne appen via Handoff, og du bør se teksten du skrev på den første enheten på den andre.

5. Feilhåndtering og delegering av metoder

I motsetning til mange APIer levert av Apple for iOS, er feilhåndtering ikke lett når du bruker Handoff hvis du ikke vet hvor disse feilene må håndteres. Det første punktet som appen din vil bli varslet om en Handoff-feil, er via søknad (_: didFailToContinueUserActivityWithType: error :) i app delegate klassen. I denne metoden kan du bestemme hva årsaken til feilen var og hvilken type aktivitet feilen relaterer seg til. Legg merke til at typen av en NSUserActivity objektet er det samme som den unike identifikatoren du tildeler den.

Når applikasjonen fortsetter fra en Handoff-aktivitet, må den først laste ned dataene som er knyttet til aktiviteten fra den opprinnelige enheten over Bluetooth. Før denne nedlastingen er ferdig skjønt, kalles en annen programdelegasjonsmetode: søknad (_: willContinueUserActivityWithType :). I denne valgfrie metoden kan du returnere en boolsk verdi for å fortelle Handoff API, uansett om du vil fortsette å motta brukeraktiviteten. I noen situasjoner kan dette være nyttig siden du kan deaktivere en bestemt type NSUserActivity når visse betingelser er oppfylt.

Konklusjon

I denne veiledningen viste jeg deg hvordan du kan bruke NSUserActivity klasse for enkelt å vedta Handoff i dine egne iOS 8 applikasjoner. Du opprettet en veldig enkel applikasjon, som er i stand til å overføre data trådløst til en annen enhet via Bluetooth.

Selv om eksempelprogrammet vi gikk gjennom i denne opplæringen var veldig enkelt, kan dine egne applikasjoner ha så mange brukeraktivitetstyper som du vil ha for et bredt spekter av funksjoner. Som alltid, hvis du har noen kommentarer eller spørsmål, la dem være i kommentarene nedenfor.