Personvern og URL-ordninger i IOS 9

Fra iOS 9 er tredjepartsprogrammer ikke lenger i stand til å spørre om vilkårlig URL-ordninger. Flere tredjepartsprogrammer, spesielt Twitter, misbrukt canOpenURL (_ :) metode av UIApplication klasse for å spore hvilke programmer som er installert på en bestemt enhet.

Apple har satt en rekke begrensninger på plass for å beskytte personvernet til sine kunder. I dette raske tipset forteller jeg deg hva du trenger å vite om disse endringene, og jeg viser deg hvordan du kan oppdatere programmene dine.

1. Spørring URL-ordninger

Jeg antar at du allerede vet at et iOS-program kan spørre operativsystemet for å starte et annet program ved hjelp av en nettadresseskjema. I sin enkleste form virker det noe som dette.

la URLAsString = "tweetbot: // _ bartjacobs / timeline" hvis la URL = NSURL.init (streng: URLAsString) UIApplication.sharedApplication (). openURL (URL)

Noen ganger er det nyttig å først spørre operativsystemet om en nettadresse kan åpnes før den åpnes. Dette er spesielt nyttig hvis du vil oppdatere brukergrensesnittet basert på hvilke applikasjoner brukeren har installert og søknaden din kan kommunisere med. I eksemplet ovenfor, openURL (_ :) vil ikke lykkes hvis Tweetbot ikke er installert på brukerens enhet. For å spørre operativsystemet om en nettadresse kan åpnes, kan du gjøre bruk av canOpenURL (_ :) metode av UIApplication klasse.

la URLAsString = "tweetbot: // _ bartjacobs / timeline" hvis la URL = NSURL.init (streng: URLAsString) hvis UIApplication.sharedApplication () .OpenURL (URL) UIApplication.sharedApplication () .openURL (URL) else  skriv ut ("Kan ikke åpne URL")

Dessverre har noen applikasjoner, særlig Twitter, blitt misbrukt canOpenURL (_ :) for å oppdage hvilke applikasjoner som er installert på brukerens enhet. Ifølge Apple bryter dette brukerens personvern. Som et resultat, tåler Apple ikke lenger denne typen misbruk i IOS 9 ved å pålegge to restriksjoner.

  • Programmer som er bygget opp mot iOS 9 SDK, er nødt til å hviteliste nettadressene de ønsker å spørre. Med andre ord, et anrop til canOpenURL (_ :) mislykkes hvis nettadressen ikke legges til en hviteliste i programmets Info.plist.
  • Programmer som ikke er bygget opp mot iOS 9 SDK, fortsetter å virke som forventet. Det er imidlertid en begrensning. En applikasjon kan bare spørre 50 forskjellige URL-ordninger. Etterfølgende forespørsler returneres falsk og kaste en feil. Dokumentasjonen understreker at denne begrensningen tilbakestilles når brukeren gjenoppretter eller oppgraderer programmet.

2. Prosjektoppsett

La meg vise deg hva dette betyr i praksis ved å lage et enkelt program som åpner Tweetbot, min favoritt Twitter-klient. Opprett et nytt prosjekt i Xcode 7 og velg Enkeltvisningsprogram mal. Gi navnet navnet på prosjektet ordninger og sett Språk til Fort.

Før vi tar en titt på URL-ordninger, vil jeg sette opp brukergrensesnittet. Åpen ViewController.swift og legg til en handling, openTweetbot (_ :), til ViewController klasse. Du kan la implementeringen være tom for nå.

// MARK: - Handlinger @IBAction func openTweetbot (sender: AnyObject) 

Åpen Main.storyboard og legg til en knapp til Se kontroller scene. Sett tittelen på knappen til Åpne Tweetbot og koble til knappen med visningskontrolleren openTweetbot (_ :) handling vi opprettet tidligere.

Vi skal ikke gjøre noe for komplisert. Når jeg klikker på Åpne Tweetbot knappen, operativsystemet åpner Tweetbot, viser meg min tidslinje. Du kan lese mer om nettadressesystemene for Tweetbot på Tapbots nettside.

3. Før iOS 9

Før Apple innførte de nevnte begrensningene for å spørre URL-ordninger, kan du gjøre følgende:

@IBAction func openTweetbot (sender: AnyObject) la application = UIApplication.sharedApplication () la URLAsString = "tweetbot: // _ bartjacobs / timeline" vakt la URL = NSURL.init (streng: URLAsString) ellers return guard application.canOpenURL (URL) ellers return // Åpne URL application.openURL (URL)

Vi spør operativsystemet om det kan åpne nettadressen vi sender til canOpenURL (_ :). Hvis denne metoden returnerer falsk på iOS 8 og lavere, vet vi at programmet vi er interessert i ikke er installert på brukerens enhet, forutsatt at nettadressesystemet vedrører et annet program. Dette kan være svært nyttig, men Apple ønsker å sette noen begrensninger på API for å unngå misbruk.

4. IOS 9

Hvis du bygger programmet i Xcode 7 og klikker på Åpne Tweetbot knapp, canOpenURL (_ :) avkastning falsk og operativsystemet kaster en feil som ser noe ut som dette:

Ordninger [9227: 3539016] -canOpenURL: mislyktes for URL: "tweetbot: // _ bartjacobs / timeline" - feil: "Denne appen har ikke lov til å spørre om system tweetbot"

Operativsystemet informerer oss eksplisitt om at søknaden ikke er tillatt å vet om den kan åpne nettadressen vi sender til canOpenURL (_ :). Det betyr ikke at programmet ikke har lov til å åpne nettadressen vi passerte til openURL (_ :), selv om.

Hvis du oppdaterer implementeringen av openTweetbot (_ :) som vist nedenfor og du har installert Tweetbot, kan applikasjonen åpne Tweetbot når knappen er tappet. Dette understreker at Apple vil begrense (feil) bruk av canOpenURL (_ :), ikke openURL (_ :).

@IBAction func openTweetbot (sender: AnyObject) la application = UIApplication.sharedApplication () la URLAsString = "tweetbot: // _ bartjacobs / timeline" vakt la URL = NSURL.init (streng: URLAsString) ellers return // Open URL application.openURL (URL)

5. Hviteliste nettadresseskjemaer

Heldigvis er det en enkel løsning på dette problemet. Når det gjelder iOS 9, spør Apple om at utviklerne skal veksle URL-skjemaene som et søknad vil søke på. Dette er like enkelt som å legge til en oppføring i programmets Info.plist.

Åpen Info.plist, legg til en nøkkel som heter LSApplicationQueriesSchemes, og sett typen av verdien til Array. Legg til et element av typen string til matrisen og sett verdien til Tweetbot.

Hvis vi går tilbake openTweetbot (_ :) til den opprinnelige gjennomføringen, kan vi påberope seg canOpenURL (_ :) uten at operativsystemet kaster feil på oss. Du kan legge til så mange URL-ordninger i søknaden din Info.plist.

@IBAction func openTweetbot (sender: AnyObject) la application = UIApplication.sharedApplication () la URLAsString = "tweetbot: // _ bartjacobs / timeline" vakt la URL = NSURL.init (streng: URLAsString) ellers return guard application.canOpenURL (URL) ellers return // Åpne URL application.openURL (URL)

Konklusjon

De fleste applikasjoner har ikke noe problem med Apples nye policy. Det er klart at Apple tar sikte på å beskytte sine kunders personvern ved å begrense informasjonen som kan trekke ut fra operativsystemet. Applikasjoner er sandboxed på iOS og Apple vil kontrollere hvor mye informasjon en applikasjon kan trekke ut fra miljøet sandkassen bor i.

Nettlisteoppsett for hvitelister er ikke en stor smerte for de fleste applikasjoner, men det kan bli kjedelig hvis du planlegger å lage en applikasjonsstarter, for eksempel Launch Center Pro. Det er fortsatt mulig å opprette en startpakke så lenge du hviteliste hvert nettlesingsprogram som søknaden ønsker å spørre. Dette kan imidlertid være ganske kjedelig, skjønt.