25/09/2022
I den moderne mobilverden er det afgørende at forstå, hvor en bruger befinder sig – eller i det mindste, hvilket land de har tilknytning til. Dette kan bruges til alt fra at vise relevant indhold til at tilpasse appens funktionalitet. Men at indhente denne information kan være en kompleks balancegang mellem funktionalitet og brugernes privatliv. Traditionelt set tænker mange på GPS-baseret lokalisering, som kræver eksplicit brugertilladelse. Men hvad nu hvis du har brug for en landekode uden at starte en server eller bede om komplicerede tilladelser? Heldigvis findes der en elegant løsning direkte på iPhone-enheden, som giver en 'mentalt/kulturelt afstemt' landekode uden besværet med lokationstjenester.

Denne artikel dykker ned i metoderne til at indhente en landekode på iOS uden at involvere en server, og sammenligner den med den mere velkendte, men også mere indgribende, brug af GPS. Vi vil udforske fordelene og ulemperne ved hver tilgang, samt de typiske anvendelsestilfælde, så du som udvikler kan træffe det bedste valg for din app og dine brugere.
Opnå Landekode Via Enhedens Lokale Indstillinger (Uden Server)
En af de mest ligetil og privatlivsvenlige måder at bestemme en brugers 'mentale' landekode på en iPhone er ved at udnytte enhedens lokale indstillinger. iOS tilbyder en indbygget mekanisme, der giver adgang til den landekode, som brugeren har konfigureret for sin enhed, typisk baseret på sprog- og regionsindstillinger. Denne metode kræver ingen specifikke brugertilladelser, hvilket er en betydelig fordel.
Forestil dig en bruger, der er på ferie i udlandet. Deres fysiske placering er måske i Spanien, men deres iPhone er stadig indstillet til Danmark, fordi det er deres hjemland. I dette scenarie vil den lokale landekode stadig være 'DK', hvilket afspejler brugerens kulturelle tilhørsforhold, ikke deres midlertidige fysiske placering. Dette kan være yderst værdifuldt for apps, der ønsker at personalisere indhold, vise standardformater (f.eks. valuta eller datoformater) eller indsamle analyser baseret på en brugers hjemregion.
Sådan Henter Du Landekoden i Swift:
For iOS-udviklere er koden for at hente denne information bemærkelsesværdigt enkel og direkte:
I ældre Swift-versioner (f.eks. Swift 2.2) kunne man bruge:
let countryCode = NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as StringI nyere Swift-versioner (f.eks. Swift 3 og op):
let countryCode = NSLocale.current.regionCodeDenne kode returnerer en landekode som en to-bogstavs streng, f.eks. 'US' for USA, 'ES' for Spanien, 'DK' for Danmark osv. Det er vigtigt at bemærke, at dette er en identifikation af den region, brugeren har valgt i sine indstillinger, og ikke nødvendigvis hvor enheden fysisk befinder sig.
Fordele ved NSLocale-tilgangen:
- Ingen brugertilladelse påkrævet: Dette er den største fordel. Du undgår pop-up-dialoger, der beder om adgang til følsomme data, hvilket forbedrer brugeroplevelsen og reducerer risikoen for, at brugere afviser tilladelser.
- Reflekterer kulturel tilknytning: Metoden giver et indblik i brugerens 'hjemregion' eller foretrukne kulturelle indstilling, selv hvis de rejser. Dette er ideelt for personalisering af indhold.
- Batterivenlig: Da den ikke bruger GPS eller andre sensorer, er den ekstremt ressource- og batterivenlig.
- Øjeblikkelig adgang: Data er øjeblikkeligt tilgængelige, uden ventetid på GPS-fiksering.
- God som fallback: Hvis en bruger har afvist lokationstilladelser, er dette en fremragende reserveløsning for at få en regionsspecifik indikation.
Ulemper ved NSLocale-tilgangen:
- Ikke fysisk placering: Den primære ulempe er, at den ikke garanterer, at dette er den fysiske placering af enheden. En bruger kan have indstillet sin telefon til et andet land end der, hvor de bor eller befinder sig fysisk.
- Manuel konfiguration: Data afhænger af brugerens manuelle indstillinger for region og sprog.
Typiske anvendelsestilfælde for denne tilgang inkluderer personalisering af app-indhold (f.eks. at vise lokale nyheder eller tilbud), standardformater for valuta og datoer, eller grundlæggende geografisk segmentering i analysedata.

Adgang til Brugerens Fysiske Placering (CLLocationManager)
Når en app har brug for at kende brugerens præcise fysiske placering – for eksempel til navigationsapps, vejr-apps eller apps, der deler placering – er CLLocationManager den standardløsning, der bruges på iOS. Denne API giver adgang til GPS, Wi-Fi og mobilnetværksdata for at bestemme enhedens geografiske koordinater med høj præcision.
Den store forskel og udfordring med CLLocationManager er, at den kræver eksplicit brugertilladelse. Når en app første gang forsøger at tilgå lokationstjenester, vil iOS vise en pop-up-dialog, der beder brugeren om tilladelse. Brugeren kan vælge at give tilladelse 'altid', 'kun mens appen er i brug' eller 'slet ikke'.
Fordele ved CLLocationManager:
- Præcis fysisk placering: Leverer nøjagtige geografiske koordinater.
- Dynamisk og real-time: Kan spore brugerens bevægelser i realtid.
- Bred vifte af anvendelser: Nødvendig for apps, hvis kernefunktionalitet afhænger af præcis placering (f.eks. kort, fitness-trackere, leveringstjenester).
Ulemper ved CLLocationManager:
- Kræver brugertilladelse: Den største hindring. Brugere kan afvise tilladelsen, hvilket begrænser appens funktionalitet. Gentagne anmodninger kan irritere brugere.
- Privatlivsbekymringer: Placering er følsomme data, og mange brugere er skeptiske over for at dele den.
- Batteriforbrug: Konstant brug af GPS kan dræne enhedens batteri hurtigt.
- Potentiel unøjagtighed: Indendørs eller i områder med dårlig GPS-dækning kan nøjagtigheden være begrænset.
Sammenligning: NSLocale vs. CLLocationManager
For at give et klart overblik over de to metoder, lad os sammenligne dem i en tabel:
| Funktion | NSLocale (Landekode fra indstillinger) | CLLocationManager (Fysisk placering) |
|---|---|---|
| Tilladelse nødvendig? | Nej | Ja (bruger-popup) |
| Hvad måles? | Brugerens foretrukne region/kulturelle tilhørsforhold | Enhedens fysiske geografiske placering |
| Nøjagtighed | Baseret på indstillinger, ikke fysisk | Høj (GPS, Wi-Fi, mobilnetværk) |
| Batteriforbrug | Minimalt | Potentielt højt |
| Typiske anvendelser | Personalisering, standardformater, grundlæggende analyse | Navigation, lokationsdeling, vejrudsigter, geotagging |
| Datatype | Landekode (f.eks. 'DK', 'US') | Geografiske koordinater (breddegrad, længdegrad) |
| Offline-brug | Ja, fuldt funktionsdygtig | Kan være begrænset uden internetforbindelse til kortdata |
Hvornår skal du vælge hvilken metode?
Valget mellem NSLocale og CLLocationManager afhænger i høj grad af din apps specifikke behov og den ønskede brugeroplevelse. Her er nogle retningslinjer:
- Vælg
NSLocale, når:- Du kun har brug for en generel indikation af brugerens region, f.eks. til at vise indhold på det rigtige sprog, tilpasse valuta, eller tilbyde regionsspecifikke funktioner (f.eks. tilbud, der kun gælder i Danmark).
- Du vil undgå at bede om følsomme tilladelser for at forbedre brugeradoption og privatliv.
- Du har brug for en fallback-løsning, hvis brugeren har afvist lokationstilladelser.
- Din app ikke er afhængig af præcis, realtidssporing af brugerens fysiske placering.
- Du ønsker at minimere appens batteriforbrug.
- Vælg
CLLocationManager, når:- Din apps kernefunktionalitet er direkte afhængig af brugerens præcise fysiske placering (f.eks. en kort-app, en app til bestilling af taxier, eller en løbe-tracker).
- Du skal spore brugerens bevægelser over tid.
- Du har brug for at interagere med geofencing (virtuelle grænser) eller lokationsbaserede notifikationer.
- Du er villig til at håndtere brugertilladelser og de potentielle afvisninger, der følger med.
Det er også muligt at kombinere de to. For eksempel kan en app først forsøge at få landekoden via NSLocale for grundlæggende personalisering. Hvis appen derefter har brug for præcis placering til en specifik funktion, kan den bede om CLLocationManager-tilladelse, men kun når det er nødvendigt, og forklare klart, hvorfor tilladelsen er påkrævet. Dette skaber en bedre og mere gennemsigtig brugeroplevelse.
Ofte Stillede Spørgsmål (FAQ)
- Hvad er forskellen på en landekode og en fysisk placering?
- En landekode hentet via
NSLocaleer baseret på de regionsindstillinger, brugeren har valgt på sin enhed, hvilket afspejler deres kulturelle eller hjemlige tilknytning. En fysisk placering hentet viaCLLocationManagerer enhedens faktiske geografiske position, bestemt via GPS, Wi-Fi og mobilnetværk. - Skal jeg altid bede om placeringstilladelse?
- Nej. Du bør kun bede om placeringstilladelse, hvis din apps kernefunktionalitet absolut kræver det. Hvis du kun har brug for en generel landeindikation til personalisering, er
NSLocaleen langt bedre og mere privatlivsvenlig løsning, der ikke kræver tilladelse. - Hvad hvis brugeren nægter placeringstilladelse?
- Hvis en bruger nægter placeringstilladelse til
CLLocationManager, vil du ikke kunne få adgang til deres præcise fysiske placering. I dette scenarie kanNSLocalefungere som en fremragende fallback for at få en generel landeindikation, hvilket stadig giver mulighed for en vis grad af personalisering eller regionsspecifik funktionalitet. - Kan jeg bruge landekoden til at vise forskelligt indhold?
- Ja, absolut! Landekoden fra
NSLocaleer ideel til at vise kulturelt relevant indhold, tilpasse sprog, valutaformater, datoformater eller endda lokale nyheder og tilbud. Dette er en af de primære anvendelser af denne tilladelsesfrie metode. - Er det sikkert at bruge disse metoder?
- Ja, begge metoder er sikre og standardmåder at indhente data på iOS. Sikkerheden handler mere om, hvordan du som udvikler håndterer de indsamlede data, og hvor gennemsigtig du er over for brugeren omkring dit dataforbrug. Respekter altid brugernes privatliv.
Konklusion
Valget af, hvordan man indhenter lande- eller lokationsdata på iOS, er en vigtig beslutning for enhver mobiludvikler. Mens CLLocationManager er uundværlig for apps, der kræver præcis fysisk placering og realtidssporing, kommer den med en pris i form af brugertilladelser og potentielle privatlivsbekymringer. For mange almindelige anvendelsestilfælde, såsom personalisering, analyser og tilpasning af app-oplevelsen til en brugers hjemregion, er NSLocale en overlegen løsning. Den tilbyder en tilladelsesfri, batterivenlig og brugervenlig måde at opnå en 'kulturel landekode' på, hvilket er en stor fordel for både udviklere og brugere.
Ved at forstå forskellene og anvendelsesområderne for begge metoder kan du designe iOS-apps, der ikke kun er funktionelle, men også respekterer brugernes privatliv og giver en optimeret brugeroplevelse. Vælg den metode, der bedst matcher din apps behov, og overvej altid brugeroplevelsen og privatlivet som topprioriteter.
Hvis du vil læse andre artikler, der ligner Landekode uden server: Smart iPhone-trik!, kan du besøge kategorien Teknologi.
