watchOS 2: Kommunisere med et motstykke
17
Del
3
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Helt siden lanseringen av Apple Watch, har utviklerne vært å diskutere og presentere teknikker for å overvinne thelimitations av watchOS 1. Utviklere har lurt på, for eksempel, hvordan å pålitelig kommunisere mellom en watchOS app og moder iOS app, og vice versa.
En rekke løsninger har vært tilgjengelig for å løse dette problemet, for eksempel MMWormhole. Selvfølgelig, har Apple vært fullt klar over begrensningene i watchOS 1 og utgivelsen av watchOS 2 løser en rekke begrensninger i watchOS 1. kommunisere mellom en watchOS to app og moder iOS app, for eksempel, har blitt mye enklere takket til innføringen av Watch Connectivity rammeverket.
Watch Connectivity
The Watch Connectivity frameworkprovides flere måter å kommunisere mellom en iOS og en watchOS to app.With Watch Connectivity rammeverk, kan du oppdatere informasjon om en motpart, sende meldinger, overføre data i bakgrunnen, og selv overføre filer. For å lære mer om alle de rammerens egenskaper og funksjoner, anbefaler jeg surfing Apples dokumentasjon for Watch Connectivity rammeverket.
I denne opplæringen, vil jeg vise deg hvordan du kan utveksle data mellom en watchOS to app og moder iOS app , og vice versa. API vi skal bruke for å oppnå dette er Sendmessage (_: replyHandler: Errorhandler :). Denne metoden lar utviklere overføre data mellom watchOS to app og moder iOS app
Det er viktig å merke seg at iOS og watchOS to app reagerer annerledes når Sendmessage (_:. ReplyHandler: Errorhandler :) påberopes. Hvis denne metoden er påberopt av watchOS to app, vil iOS app bli vekket opp av operativsystemet. Hvis du sender data fra den overordnede iOS app til watchOS to app, men sistnevnte vil ikke våkne opp. Dette er en viktig detalj å huske på.
Forutsetninger
Siden denne opplæringen er om Apple Watch utvikling, antar jeg at du allerede er kjent med iOS utvikling og Swift programmeringsspråk. The Watch Connectivity rammeverket er bare tilgjengelig på watchOS 2, noe som betyr at du må ha den nyeste versjonen av Xcode installert Xcode 7. Du kan laste ned Xcode fra Apples utvikler hjemmeside.
1. Prosjektet Setup
Åpne Xcode Hotell og velg New > Prosjekt ...
fra Fil-menyen. Gå til watchOS > Søknad
, velg iOS App med WatchKit App
prosjektmal andclick Neste
. Navn appen SendMessageWatch
, sette Språk
til Swift
, og Enheter
til iPhone
. Kryssene IncludeNotification Scene Hotell og sørge for at hver boksen nederst er avmerket. Hit Neste Hotell og velg et sted å lagre prosjektet.
2. Opprette brukergrensesnittet
I dette trinnet, vil vi legge til en etikett og en knapp til begge apps. Etiketten vil bli brukt til å vise meldingene vi sender mens thebutton vil sende meldingen til motparten, iOS app eller watchOS 2 app.
Vi begynner med iOS app. Åpne Main.storyboard og legge til en etikett og en knapp. Deretter oppretter et utløp for både elementer i brukergrensesnittet, og legge til en handling for knappen. Skjermbildet under viser resultatet.
La oss nå fokusere på watchOS 2 app. Åpne Interface.storyboard og legge til en etikett og en knapp til scenen. Deretter åpner InterfaceController.swift i Assistant Editor og skape et utløp for etiketten og på knappen, og legge til en handling for knappen.
Med brukergrensesnittet på plass, er det tid for å zoome inn på hovedtemaet i denne opplæringen, sende meldinger fra iOS app til watchOS to app, og vice versa.
3. Bruke Watch Connectivity Work
Bruke Watch Connectivity rammeverk for å utveksle meldinger krever bruk av WCSession klassen. For at dette skal fungere, må både iOS app og watchOS to app opprette og konfigurere en WCSession eksempel. Når økten er konfigurert, kan vi kommunisere umiddelbart frem og tilbake
klasse InterfaceController. WKInterfaceController, WCSessionDelegate {var økt: WCSession! ...}
Vi får en forekomst av WCSession klassen ved å ringe defaultSession klassemetode. Dette returnerer Singleton sesjonsobjektet for enheten. Vi trenger da å sette økten delegat og aktivere økten.
Før vi konfigurere og bruke WCSession objekt, må vi kontrollere at WCSession klassen støttes på enheten. Vi gjør dette ved å ringe isSupported klassen metoden på WCSession klasse. Vi gjør alt dette i willActivate metoden i InterfaceController klassen. Merk at activateSession vil kaste et unntak hvis økten er delegat er null. Med andre ord, er viktig rekkefølgen nedenfor uttalelser.
Styre func willActivate () {super.willActivate () if (WCSession.isSupported ()) {session = WCSession.defaultSession () session.delegate = selv økt. activateSession ()}}
watchOS to app er nå i stand til å sende og motta meldinger. Med sessionactivated, vi trenger bare å påkalle Sendmessage (_: replyHandler: Errorhandler:) metode for å sende meldinger. Det første argumentet må være en ordbok av type [String: AnyObject] og det bør ikke være null
replyHandler er en nedleggelse som aksepterer en ordbok av samme type.. Denne ordlisten er responsen fra motparten. Den Errorhandler er også en nedleggelse, noe som kan være null hvis du ikke trenger å fange opp eventuelle feil.
Hvis vi treffer på send-knappen på Apple Watch, det vil umiddelbart sende en Hei iPhone melding og theiPhone vil svare med en Hei Watch melding. Etter å ha trykket på send-knappen på iPhone, vil det sende et spørsmål Hei klokke, kan du snakke med meg? og Apple Watch vil svare med Ja
Dette er hva gjennomføringen av Sendmessage metode bør se ut i InterfaceController.swift
IBAction func Sendmessage () {la messageToSend = ["verdi"..: "Hello iPhone"] session.sendMessage (messageToSend, replyHandler: {replyMessage i //håndtere og presentere meldingen på skjermen lar verdi = replyMessage ["Value"] som String self.messageLabel.setText (verdi)?}, Errorhandler: { feil i //fange opp eventuelle feil her print (feil)})}
For å håndtere meldingen på iOS-enheten, må vi gjennomføre thesession (_: didReceiveMessage :) delegat metode for WCSessionDelegate protokollen, som startes når en Meldingen mottas ved motstykke. Dette er hva gjennomføringen ser ut i InterfaceController.swift
func session (sesjon: WCSession, didReceiveMessage melding: [String: AnyObject], replyHandler: ([String: AnyObject]) - > Void). {//Håndtere mottatt Meldingen la value = melding ["Value"] som? String //bruke dette til å presentere umiddelbart på skjermen dispatch_async (dispatch_get_main_queue ()) {self.messageLabel.setText (verdi)} //sende et svar replyHandler (["Value": "Ja"])}
Gjennomføringen av begge metoder ser veldig lik for iOS app. Med de ovennevnte implementeringer, gi det et forsøk med implementeringen av Sendmessage og økt (_: didReceiveMessage: replyHandler :) metoder. Dette er hva gjennomføringen av ViewController klassen skal se ut
importere UIKitimport WatchConnectivityclass ViewController. UIViewController, WCSessionDelegate {var økt: WCSession! IBOutlet Var messageLabel: UILabel! IBOutlet Var sendButton: UIButton! IBAction Func Sendmessage (avsender: AnyObject) {//Send melding til WatchKit la messageToSend = ["Value": "Hei se på, kan du snakke med meg"] session.sendMessage (messageToSend, replyHandler: {replyMessage i //håndtere ? svaret la value = replyMessage ["Value"] som String //bruk dispatch_asynch å presentere umiddelbart på skjermen dispatch_async (dispatch_get_main_queue ()) {self.messageLabel.text = value}}, Errorhandler: {error in //fange opp eventuelle feil her print (feil)})} overstyring func viewDidLoad () {super.viewDidLoad () //Gjør noe ekstra oppsett etter lasting utsikten, vanligvis fra en spiss. if (WCSession.isSupported ()) {session = WCSession.defaultSession () session.delegate = selv; session.activateSession ()}} overstyring func didReceiveMemoryWarning () {super.didReceiveMemoryWarning () //Kast noen ressurser som kan gjenskapes. } //Swift func session (sesjon: WCSession, didReceiveMessage melding: [String: AnyObject], replyHandler: ([String: AnyObject]) - > Void) {//håndtere mottatt melding la value = melding ["Value"] som ? String dispatch_async (dispatch_get_main_queue ()) {self.messageLabel.text = verdi} //sende et svar replyHandler (["Value": "Hello Watch"])}}
Bygg og kjøre apps for å se finalresult. Når du trykker på knappen på Apple Watch, bør en melding på paret iPhone kjører iOS app. Whenyou trykke på knappen på iOS app, bør en melding på Apple Watch kjører watchOS 2 app.
4. Exploring
WCSessionDelegate Protocol
delegat metoden vi iverksatt for å motta meldingen har en enklere søsken, session (_: didReceiveMessage :). Denne metoden kalles når Sendmessage (_: replyHandler: Errorhandler :) påberopes uten et svar handler. Dette indikerer bare at programmet sender meldingen forventer ikke et svar
I tillegg til å sende en ordbok til en motpart, er det også mulig å sende en NSData objekt med sendMessageData (_:. ReplyHandler: Errorhandler: ) metoden. Motstykket mottar meldingen gjennom økten (_: didReceiveMessageData :) og session (_: didReceiveMessageData. ReplyHandler :) delegere metoder for WCSessionDelegate protokollen
Konklusjon
Hvis du trenger å kommunisere umiddelbart med en motpart, så Watch Connectivity rammeverket er det beste valget på watchOS 2. Themessages er kø og leveres i samme rekkefølge som de ble sendt i.
The Watch Connectivity rammeverket har en mye mer å tilby enn hva som er dekket i denne opplæringen. I fremtidige tutorials, vil vi dykke dypere inn i dette nye rammeverket for ytterligere å utforske dens funksjoner og muligheter.