0Pricing
Swift Academy · Ders

Konum Yetkilendirmesi İsteme

İzinleri ve gizliliği doğru biçimde yönetin.

Konum Yetkilendirmesi İsteme, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Konum Neden İzin Gerektirir

Apple platformlarında kullanıcının konumuna erişmek, gizlilik açısından hassas bir işlemdir. CoreLocation’ın herhangi bir koordinat gönderebilmesi için önce yetkilendirmeyi açıkça istemelisiniz. Sistem, ilk isteğinizde bir izin iletişim kutusu gösterir.

  • Yetkilendirme, kullanıcı tarafından uygulama başına verilir.
  • Bu yetkilendirmeyi program aracılığıyla aşamazsınız.
import CoreLocation

let manager = CLLocationManager()

Info.plist Kullanım Açıklaması Anahtarları

Yetkilendirme istemeden önce kullanım açıklaması metnini Info.plist dosyasına eklemelisiniz. Bu metinler, izin iletişim kutusunda kullanıcıya gösterilir. En önemli iki anahtar şunlardır:

  • NSLocationWhenInUseUsageDescription — yalnızca ön plan erişimi için.
  • NSLocationAlwaysAndWhenInUseUsageDescription — background erişimi için de.

İlgili anahtarın eksik olması, isteğin sessizce başarısız olmasına veya uygulamanın çökmesine neden olur.

<!-- Info.plist -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show nearby places.</string>

CLLocationManager Oluşturma

CLLocationManager, konum hizmetlerini koordine eden temel nesnedir. Bir örneğini oluşturun, ona güçlü bir başvuru tutun ve geri çağrıları almak için bir temsilci atayın.

final class LocationService: NSObject {
    let manager = CLLocationManager()

    override init() {
        super.init()
        manager.delegate = self
    }
}

Kullanım Sırasında Yetkilendirme İsteme

Ön plan erişimi istemek için requestWhenInUseAuthorization() çağrısını yapın. Sistem iletişim kutusunu yalnızca bir kez gösterir; bundan sonra seçim hatırlanır. Seçim daha önce belirlenmişse çağrı hiçbir işlem yapmaz.

func requestPermission() {
    manager.requestWhenInUseAuthorization()
}

Her Zaman Yetkilendirmesi İsteme

background güncellemeleri için (coğrafi sınır belirleme, sürekli izleme) requestAlwaysAuthorization() çağrısını yaparsınız. Apple, önce Kullanım Sırasında yetkilendirmesi almanızı, ardından Her Zaman yetkilendirmesine geçmenizi gerektirir. Bu yetkilendirmeyi yalnızca gerektiğinde kullanın ve kullanım açıklamanızda gerekçelendirin.

func requestAlways() {
    manager.requestAlwaysAuthorization()
}

Yetkilendirme Durumunu Okuma

Geçerli izin durumu manager.authorizationStatus içinde bulunur (iOS 14 ve sonrasında bir örnek özelliğidir). Olası değerler arasında .notDetermined, .denied, .restricted, .authorizedWhenInUse ve .authorizedAlways bulunur.

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

Yetkilendirme değişiklikleri, temsilci aracılığıyla zaman uyumsuz olarak iletilir. Kullanıcı bir seçim yaptığında tepki vermek için locationManagerDidChangeAuthorization(_:) yöntemini uygulayın. İstek çağrısını yaptıktan hemen sonra iznin verildiğini asla varsaymayın.

extension LocationService: CLLocationManagerDelegate {
    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        switch manager.authorizationStatus {
        case .authorizedWhenInUse, .authorizedAlways:
            manager.startUpdatingLocation()
        default:
            print("Not authorized")
        }
    }
}

Reddedilen veya Kısıtlanan Durumları Yönetme

Kullanıcı erişimi reddederse yeniden izin isteyemezsiniz. Bunun yerine .denied durumunu algılayın ve kullanıcıyı Ayarlar’a yönlendirin. .restricted, erişimin ebeveyn denetimleri veya bir MDM profili tarafından engellendiği anlamına gelir ve bu durum da uygulama içinde düzeltilemez.

func handle(_ status: CLAuthorizationStatus) {
    if status == .denied {
        // Deep-link the user to Settings > Privacy > Location
        print("Open Settings to enable location")
    }
}

Doğruluk Yetkilendirmesi (Kesin ve Azaltılmış)

iOS 14’ten bu yana kullanıcılar yalnızca azaltılmış (yaklaşık) doğruluk verebilir. manager.accuracyAuthorization değerini kontrol edin. Gerçekten kesin verilere ihtiyacınız varsa (örneğin adım adım yol tarifi için), Info.plist içinde tanımlanmış bir anahtarla requestTemporaryFullAccuracyAuthorization(withPurposeKey:) çağrısını yapın.

if manager.accuracyAuthorization == .reducedAccuracy {
    manager.requestTemporaryFullAccuracyAuthorization(
        withPurposeKey: "PreciseForNavigation"
    )
}

Konum Hizmetlerinin Etkin Olduğunu Denetleme

Uygulama başına verilen iznin yanı sıra cihaz genelindeki Konum Hizmetleri anahtarı da kapalı olabilir. CLLocationManager.locationServicesEnabled() çağrısını bir background kuyruğunda yapın (ana iş parçacığında çağırmak engellenmeye neden olabilir). Bu özellik devre dışıysa hiçbir uygulama konum alamaz.

DispatchQueue.global().async {
    if CLLocationManager.locationServicesEnabled() {
        print("System location is on")
    } else {
        print("System location is off")
    }
}

Eksiksiz Bir Yetkilendirme Akışı

Hepsini bir araya getirelim: yöneticiyi oluşturun, temsilciyi ayarlayın, Kullanım Sırasında yetkilendirmesi isteyin ve ardından güncellemeleri yetkilendirme geri çağrısı içinde başlatın. Bu, konum kullanan her özellik için temel örüntüdür.

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()
        }
    }
}

Hızlı Kontrol: Yetkilendirme

Yetkilendirme akışını ne kadar anladığınızı sınayın.

Özet: Yetkilendirme İsteme

Konum iznini güvenli bir şekilde nasıl isteyeceğinizi öğrendiniz:

  • NSLocationWhenInUseUsageDescription anahtarını (gerekiyorsa Her Zaman sürümüyle birlikte) Info.plist dosyasına ekleyin.
  • Bir CLLocationManager oluşturun, güçlü bir başvuru tutun ve temsilcisini ayarlayın.
  • requestWhenInUseAuthorization() çağrısını yapın; ardından yalnızca gerekiyorsa Her Zaman yetkilendirmesine geçin.
  • locationManagerDidChangeAuthorization(_:) içinde tepki verin ve reddedilen, kısıtlanan veya azaltılmış doğruluk durumlarını yönetin.

Sıkça Sorulan Sorular

“Konum Yetkilendirmesi İsteme” dersi ücretsiz mi?

Evet — “Konum Yetkilendirmesi İsteme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Konum Yetkilendirmesi İsteme” dersinde ne öğreneceğim?

İzinleri ve gizliliği doğru biçimde yönetin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Konum Yetkilendirmesi İsteme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Konum Yetkilendirmesi İsteme
  2. Kullanıcının Konumunu Alma
  3. SwiftUI'de Haritaları Görüntüleme
  4. Jeokodlama ve Bölgeler
← Swift Academy Sayfasına Dön