Meminta Otorisasi Lokasi
Tangani izin dan privasi dengan benar.
Meminta Otorisasi Lokasi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Mengapa Lokasi Memerlukan Izin
Pada platform Apple, mengakses lokasi pengguna merupakan operasi yang sensitif terhadap privasi. Aplikasi Anda harus secara eksplisit meminta otorisasi sebelum Core Location mengirimkan koordinat apa pun. Sistem menampilkan dialog izin saat pertama kali Anda memintanya.
- Otorisasi diberikan oleh pengguna untuk setiap aplikasi.
- Anda tidak dapat melewatinya secara terprogram.
import CoreLocation
let manager = CLLocationManager()Kunci Deskripsi Penggunaan Info.plist
Sebelum meminta otorisasi, Anda harus menambahkan string deskripsi penggunaan ke Info.plist. String ini ditampilkan kepada pengguna dalam dialog izin. Dua kunci utamanya adalah:
NSLocationWhenInUseUsageDescription— untuk akses hanya saat aplikasi berada di latar depan.NSLocationAlwaysAndWhenInUseUsageDescription— juga untuk akses background.
Tidak menyertakan kunci yang relevan akan menyebabkan permintaan gagal secara diam-diam atau aplikasi berhenti tiba-tiba.
<!-- Info.plist -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show nearby places.</string>Membuat CLLocationManager
CLLocationManager adalah objek utama yang mengoordinasikan layanan lokasi. Anda membuat satu instans, menyimpan referensi kuat ke instans tersebut, lalu menetapkan delegasi untuk menerima panggilan balik.
final class LocationService: NSObject {
let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
}
}Meminta Otorisasi Saat Digunakan
Panggil requestWhenInUseAuthorization() untuk meminta akses saat aplikasi berada di latar depan. Sistem hanya menampilkan dialog sekali; setelah itu, pilihan pengguna diingat. Jika status sudah ditentukan, pemanggilan ini tidak melakukan apa-apa.
func requestPermission() {
manager.requestWhenInUseAuthorization()
}Meminta Otorisasi Selalu
Untuk pembaruan background (pembatasan wilayah dan pelacakan berkelanjutan), panggil requestAlwaysAuthorization(). Apple mengharuskan Anda memperoleh otorisasi Saat Digunakan terlebih dahulu, lalu meningkatkannya menjadi otorisasi Selalu. Gunakan ini secukupnya dan jelaskan alasannya dalam deskripsi penggunaan.
func requestAlways() {
manager.requestAlwaysAuthorization()
}Membaca Status Otorisasi
Keadaan izin saat ini berada di manager.authorizationStatus (properti instans pada iOS 14 dan yang lebih baru). Nilai yang mungkin antara lain .notDetermined, .denied, .restricted, .authorizedWhenInUse, dan .authorizedAlways.
let status = manager.authorizationStatus
switch status {
case .notDetermined: print("Ask the user")
case .denied, .restricted: print("No access")
case .authorizedWhenInUse, .authorizedAlways: print("Good to go")
@unknown default: break
}CLLocationManagerDelegate
Perubahan otorisasi dikirimkan secara asinkron melalui delegasi. Implementasikan locationManagerDidChangeAuthorization(_:) untuk merespons saat pengguna membuat pilihan. Jangan pernah berasumsi bahwa izin langsung diberikan setelah Anda memanggil permintaan.
extension LocationService: CLLocationManagerDelegate {
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
manager.startUpdatingLocation()
default:
print("Not authorized")
}
}
}Menangani Akses yang Ditolak atau Dibatasi
Jika pengguna menolak akses, Anda tidak dapat menampilkan permintaan lagi. Sebagai gantinya, deteksi .denied dan arahkan mereka ke Pengaturan. .restricted berarti akses diblokir oleh kontrol orang tua atau profil MDM, dan juga tidak dapat dipulihkan dari dalam aplikasi.
func handle(_ status: CLAuthorizationStatus) {
if status == .denied {
// Deep-link the user to Settings > Privacy > Location
print("Open Settings to enable location")
}
}Otorisasi Akurasi (Presisi vs Perkiraan)
Sejak iOS 14, pengguna dapat memberikan akurasi yang dikurangi (perkiraan) saja. Periksa manager.accuracyAuthorization. Jika Anda benar-benar memerlukan data presisi, misalnya untuk navigasi belokan demi belokan, panggil requestTemporaryFullAccuracyAuthorization(withPurposeKey:) dengan kunci yang didefinisikan di Info.plist.
if manager.accuracyAuthorization == .reducedAccuracy {
manager.requestTemporaryFullAccuracyAuthorization(
withPurposeKey: "PreciseForNavigation"
)
}Memeriksa Apakah Layanan Lokasi Diaktifkan
Selain izin per aplikasi, pengaturan Layanan Lokasi untuk seluruh perangkat juga dapat dinonaktifkan. Periksa CLLocationManager.locationServicesEnabled() pada antrean background (memanggilnya di utas utama dapat memblokir). Jika dinonaktifkan, tidak ada aplikasi yang menerima lokasi.
DispatchQueue.global().async {
if CLLocationManager.locationServicesEnabled() {
print("System location is on")
} else {
print("System location is off")
}
}Alur Otorisasi Lengkap
Jika disatukan: buat pengelola, tetapkan delegasi, minta otorisasi Saat Digunakan, lalu mulai pembaruan di dalam panggilan balik otorisasi. Inilah pola kanonis untuk fitur apa pun yang menggunakan lokasi.
final class LocationService: NSObject, CLLocationManagerDelegate {
let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
manager.requestWhenInUseAuthorization()
}
func locationManagerDidChangeAuthorization(_ m: CLLocationManager) {
if m.authorizationStatus == .authorizedWhenInUse {
m.startUpdatingLocation()
}
}
}Pemeriksaan Singkat: Otorisasi
Uji pemahaman Anda tentang alur otorisasi.
Ringkasan: Meminta Otorisasi
Anda telah mempelajari cara meminta izin lokasi dengan aman:
- Tambahkan
NSLocationWhenInUseUsageDescription(dan varian Selalu jika diperlukan) ke Info.plist. - Buat
CLLocationManager, simpan referensi kuat ke instansnya, lalu tetapkan delegasinya. - Panggil
requestWhenInUseAuthorization(), lalu tingkatkan menjadi otorisasi Selalu hanya jika diperlukan. - Respons perubahan di
locationManagerDidChangeAuthorization(_:)dan tangani kasus ditolak, dibatasi, atau berakurasi dikurangi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Meminta Otorisasi Lokasi” gratis?
Ya — teks lengkap “Meminta Otorisasi Lokasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Meminta Otorisasi Lokasi”?
Tangani izin dan privasi dengan benar. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Meminta Otorisasi Lokasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Meminta Otorisasi Lokasi
- Mendapatkan Lokasi Pengguna
- Menampilkan Peta dalam SwiftUI
- Geocoding dan Wilayah