iOS 9: Komme i gang med SFSafariViewController

iOS 9: Komme i gang med SFSafariViewController
18
Del
8
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Mobile applikasjoner og visning av innhold på nettet er allestedsnærværende nå. I mange år har iOS utviklere blitt belastet med enten å skape sin egen web seeropplevelse inne sin app eller innlevering av URL i Safari. Begge disse tilnærmingene bringe iboende ulemper som tidligere var uunngåelig.

Det er alt forandret med iOS 9 og innføringen av SFSafariViewController klassen. Med det kan du nå tilby et komplett web seeropplevelsen inne appen uten å måtte bruke viktige utviklingstiden å gi det.

1. Demo Oversikt

Før vi begynner, kommer jeg til å legge ut den tilnærmingen jeg har tatt med demo app som går sammen med denne opplæringen. Som du vil se senere, er det egentlig ikke så mye kode involvert med å bruke safari view controller. Den virkelige verdien av safari view controller kommer fra å forstå når
å bruke det og, enda viktigere, hvorfor
.

Alternativer for Viser Web Content

Som for iOS 9, utviklerne har tre alternativer å vise webinnhold til en bruker:

Safari: Bruk openURL (_ :) å vise side innsiden av safari, tvinger brukeren til å forlate din søknad .

Custom seeropplevelsen: Du kan utnytte WKWebView eller UIWebView å skape en surfeopplevelse fra scratch

SFSafariViewController. Med SFSafariViewController, kan du bruke nesten alle fordelene med å vise webinnhold inne Safari uten å tvinge brukerne til å forlate programmet.

Før iOS 9, de to første alternativene var de eneste alternativene for utviklere. Å vite når du måtte bruke den ene eller den andre avhengig av kontekst presenteres innholdet. Mens han jobbet på demoprogrammet, har vi tenkt å bruke alle tre alternativer.

Nå som vi vet hvordan innhold kan vises, la oss dekke hvorfor det kan vises i en app. På iOS, er det to store bruksmåter for visning webinnhold

Custom Web Content. Dette er innholdet ikke ment for surfing. Dette kan være en rapport eller lignende som genereres fra en API eller server. Her blir brukeren ser på en del av innholdet og ikke gjør mye annet

Bruker nettsteder. Dette er den vanligste scenario. Brukeren trenger å surfe på nettet øyeblikk å enten logge på en tjeneste eller navigere en nettside.

Også huske på at det er en tredje use case, web-basert autentisering. For denne opplæringen, er vi ikke kommer til å fokusere på det scenarioet.

Custom Web Content

Hvis omfanget av din brukerens nettopplevelse innsiden av app faller inn i den første bruken tilfellet, safari view controller er nok ikke det du trenger. I slike tilfeller er du vise innhold som du eier og kontroll, og må i stor utstrekning tilpasse.

Hvis du finner din app passer inn i dette scenariet, og deretter bruke WKWebView. Det er etterfølgeren til UIWebView og inneholder flere forbedringer, som for eksempel å utnytte Nitro Javascript-motoren. Denne tilnærmingen gjør det mulig å bygge hele brukergrensesnittet fra bunnen av. Du har også andre affordances, for eksempel laste ned filer trygt og bruk WKWebsiteDataStore for spørring cookies.

Ser Websites

De fleste av apps, men trenger bare å gi en generell web seeropplevelse. Dette er den perfekte scenario for safari visningen kontrolleren. Før iOS 9, utviklerne har brukt tid på å lage sitt eget brukergrensesnitt for nettsurfing, noe som kan føre til problemer for brukerne.

Den leseopplevelsen er inkonsekvent på tvers av ulike apps, som kan forvirre brukeren. Noen grensesnitt kan også mangle de tingene brukerne forventer, for eksempel en fremdriftslinje som indikerer hvor mye av siden er lastet.

Videre trenger du ikke har tilgang til alle Safari funksjoner. Dette inkluderer leseren utsikten, iCloud nøkkelring for autofyll evner, og mer. Hvis du ønsket å ha disse funksjonene før iOS 9, ble du tvunget til å ha brukeren forlate app helt ved å åpne innholdet inne Safari. Den SFSafariViewController klassen løser alle disse problemene.

2. Kjør Demo App

For å begynne, bygge og drive demoprogrammet. Du vil bli presentert med en svært minimal brukergrensesnitt som har tre alternativer. Hver opsjon tilsvarer en av metodene nevnt tidligere til stede webinnhold.

3. Åpning innhold i Safari

Det første alternativet vil vi demonstrere er den mer tradisjonelle ruten, som overlater URL til Safari. Åpne ViewController.swift og merker urlString eiendom på toppen av filen. Dette vil definere hva som er presentert i de kommende eksemplene, så gjerne for å sette den til hva du måtte ønske
privat Var urlString. String = "https://google.com"

En viktig ting å merke seg er at i iOS 9, TLS 1.2 håndheves som standard. Hvis serveren du prøver å nå støtter ikke dette, kan du se følgende feil i konsollen:

Det finnes veier rundt dette, for eksempel legge en nøkkel til appens Info.plist fil. Dette var en endring gjort av Apple for å øke sikkerheten rundt Internett-opplevelsen. Flytte på, legger du til følgende kode i openInSafari (_ :) handling:
IBAction func openInSafari (avsender: AnyObject) {la url = NSURL (string: self.urlString)! UIApplication.sharedApplication (). OpenURL (url)}

Bygg og kjøre programmet. Når du trykker på den øverste knappen, "Åpne i safari", vil operativsystemet forlate app og åpne URL i Safari.

Selv om dette alternativet er absolutt levedyktig, har vi tvunget brukeren å forlate vår app . Som utviklere, ideelt sett ønsker vi erfaring med å holde inne i vår app. En forbedring iOS 9 har gjort med denne tilnærmingen, er imidlertid den lille tilbakeknappen øverst til venstre:

du trykker på denne knappen vil ta brukeren tilbake til app som avlevert nettadressen til Safari. For å løse problemet med at brukeren blir tvunget til å forlate vår app, la oss gå videre til neste tilnærming.

4. Åpning innhold i Webkit eller WebView

Vi skal nå åpne den samme URL i vår app. For å gjøre dette, vil vi bruke en innebygd UIWebView. Logikken for denne enkle nettleser er funnet i CustomWebViewController klassen.

Siden vi ikke trenger noen av de avanserte funksjonene i WebKit, vil vi bare åpne siden i en web-visning. I ViewController klassen, erstatte koden i prepareForSegue (_: avsender :) som følger:
styre func prepareForSegue (naturlig overgang: UIStoryboardSegue, avsender:? AnyObject) {if la navVC = segue.destinationViewController som? UINavigationController {la cwvc = navVC.topViewController som! CustomWebViewController cwvc.urlString = self.urlString}}

Gå videre og kjøre programmet. Trykk på knappen i midten, "Open med nettvisning", og siden skal nå laste inne i appen.

Selv om brukeren forblir i app, ulempene med denne tilnærmingen er åpenbare. Uten mer utviklingsarbeid på vår side, er det ingen lasting indikasjon URL i adressefeltet, og andre ting brukerne forventer når du surfer på nettet. La oss nå bruke SFSafariViewController klassen til å løse disse problemene.

5. Åpning innhold i Safari View Controller

Før vi kan bruke SFSafariViewController klasse, må vi importere Safari Services. På toppen av ViewController.swift, legger du til følgende import uttalelse under import statement for UIKit:
import SafariServices

Deretter oppdatere gjennomføringen av openWithSafariVC (_ :) som vist nedenfor:
IBAction func openWithSafariVC (avsender: AnyObject) {la SVC = SFSafariViewController (URL: NSURL (string! self.urlString)) self.presentViewController (SVC, animert: true, ferdigstillelse: null)}

Kjør programmet og trykke den nederste knappen, "Open med safari view controller", for å se innholdet nå vises inne i en SFSafariViewController eksempel.

Vi har nå la brukeren opphold innsiden av app vår og Selge de har alle fordelene av Safari. Del sengetøy er tilgjengelig fra fanelinjen sammen med muligheten til å legge til siden som en favoritt eller åpne innholdet i Safari.

Det finnes en rekke interessante konfigurasjoner for å dra nytte av. For eksempel kan vi la brukeren enkelt å starte nettleseren i leseren, ved å sende true til entersReaderIfAvailable
IBAction func openWithSafariVC. (Avsender: AnyObject) {la SVC = SFSafariViewController (URL: NSURL (string: self.urlString)! , entersReaderIfAvailable: true) self.presentViewController (SVC, animert: true, ferdigstillelse: null)}

I tillegg til Safari view controller respekterer fargetone farge. Dette gjør det enkelt å holde merkevarebygging av din app stede samtidig holde Safari kjent brukergrensesnitt intakt.

Men ett problem vi må løse er at brukeren for øyeblikket ikke kan avfeie visningen kontrolleren. La oss fikse det nå.

6. SFSafariViewControllerDelegate Protocol

For å avvise visningen kontrolleren, trenger vi å samsvare med SFSafariViewControllerDelegate protokollen. Åpne ViewController.swift og gjøre ViewController klasse i samsvar med den SFSafariViewControllerDelegate protokollen
klasse ViewController. UIViewController, SFSafariViewControllerDelegate {...}

Deretter legger du til følgende delegat metode til ViewController Klasse:
func safariViewControllerDidFinish ( controller: SFSafariViewController) {controller.dismissViewControllerAnimated (sant, ferdigstillelse: null)}

Dette delegat metoden kalles når brukeren kranene på Ferdig-knappen i Safari visning kontrolleren. Den skal brukes til å avfeie visningen kontrolleren og gå tilbake til programmet ditt.

Det eneste som gjenstår å gjøre er å tildele vårt syn kontrolleren til å være delegat på Safari view controller. Oppdater gjennomføringen av openWithSafariVC (_ :) metode som vist nedenfor:
IBAction func openWithSafariVC (avsender: AnyObject) {la SVC = SFSafariViewController (URL: NSURL (string! Self.urlString)) svc.delegate = selv self.presentViewController (SVC, animert: true, ferdigstillelse: null)}

Hvis du kjører app og åpne Safari visning kontrolleren, vil du se at du nå kan avvise Safari visningen kontrolleren ved å trykke på knappen Ferdig i øverst til høyre.

Konklusjon

Safari view controller er utrolig lett å bruke. Faktisk er det en av de minste APIer jeg har sett med bare to initializers og to delegere metoder. Likevel, det bringer alle funksjonene brukerne forventer fra Safari over til programmet ditt.

Hva er kanskje like spennende er at utviklere vil ikke lenger trenger å bruke tid på å lage egendefinerte nettlesere. Innføring av en førsteklasses Internett-opplevelsen til programmet ditt tar noen få linjer med kode med SFSafariViewController klassen.