1. Başlamadan önce
Bu codelab'de, önceden yapılandırılmış bir hedefe gitmek için Google Haritalar Platformu Navigation SDK'sını kullanan basit bir iOS uygulaması oluşturmayı öğreneceksiniz.
İşlemi tamamladığınızda uygulamanız aşağıdaki gibi görünür.

Ön koşullar
- Swift ile temel iOS uygulama geliştirme bilgisi.
- Belirli bir konumda ortalanmış harita oluşturma gibi temel Google Haritalar SDK'sı kavramları hakkında bilgi sahibi olmak.
Neler öğreneceksiniz?
- Hedefe gitmek için Navigation SDK'yı kullanan basit bir iOS Swift uygulaması oluşturma
- Navigation SDK'yı uzak Cocoapods deposundan entegre etme
- Konum izinlerini ve kullanıcı sözleşmesini Navigation SDK son kullanıcı şartlarıyla yönetme
- SDK'yı başlatma
- Hedef belirleme ve navigasyon yardımını başlatma
Gerekenler
- XCode'un en son kararlı sürümü.
- Faturalandırmanın etkin olduğu bir Google Hesabı ve proje.
- iOS cihaz veya XCode Simulator'da çalışan bir emüle edilmiş cihaz. Hangisini seçerseniz seçin, Navigation SDK'nın minimum şartlarını karşılaması gerekir.
2. Hazırlanın
Henüz bir Google Cloud Platform hesabınız ve faturalandırmanın etkinleştirildiği bir projeniz yoksa Google Haritalar Platformu'nu kullanmaya başlama talimatlarını uygulayarak Google Cloud projenizi oluşturun.
Konsolda bir Google Cloud projesi seçin
Cloud Console'da proje açılır menüsünü tıklayın ve bu codelab için kullanmak istediğiniz projeyi seçin.

Projenizde Navigation SDK'yı etkinleştirme
Bu codelab için gereken Google Haritalar Platformu API'lerini ve SDK'larını Google Cloud Marketplace'te etkinleştirin.
Google Cloud Console'da API'ler ve Hizmetler > Kitaplık'a gidin ve "Navigation SDK"yı arayın.
Bir arama sonucu görürsünüz.

Ürün ayrıntıları sayfasını açmak için Navigation SDK'yı tıklayın. SDK'yı projenizde etkinleştirmek için Etkinleştir'i tıklayın.
Bu işlemi iOS için Haritalar SDK'sı için de tekrarlayın.
API anahtarı oluşturma
Cloud Console'un Kimlik Bilgileri sayfasında bir API anahtarı oluşturun. Google Haritalar Platformu'na yapılan tüm istekler için API anahtarı gerekir. Konsoldaki Kimlik Bilgileri sayfasında Sayfanın üst kısmındaki "+Kimlik Bilgileri Oluştur"u tıklayın ve seçeneklerden "API Anahtarı"nı belirleyin.
Üretimde kullanmak için API anahtarınızda uygulama kısıtlaması ayarlamanız en iyi uygulamadır ancak bu codelab'de bu adım isteğe bağlıdır.
3. Örnek proje dosyalarını edinme
Bu bölümde, bu codelab'in GitHub deposundaki dosyaları klonlayarak temel bir boş XCode App projesinin nasıl oluşturulacağı açıklanmaktadır. Github deposu, codelab kodunun öncesi ve sonrası sürümlerini içerir. Bu codelab, boş bir proje şablonuyla başlayıp tamamlanmış duruma kadar ilerleyecektir. Takılırsanız depodaki tamamlanmış projeyi referans olarak kullanabilirsiniz.
Depoyu klonlama veya kodu indirme
Codelab'i depolamak istediğiniz dizine gidin.
Ardından, depoyu klonlayın veya kodu indirin:
git clone https://github.com/googlemaps-samples/codelab-navigation-101-ios-swift
Git yüklü değilse kodu almak için bu düğmeyi tıklayın:
Bu kod laboratuvarını takip etmenize yardımcı olmak için Starter klasöründe başlangıç kodları bulunur. Dilerseniz ilerlemek veya ilerleme durumunuzu kontrol etmek için tamamlanmış bir Solution proje de mevcuttur. Çözüm projesini kullanmak için aşağıdaki "Cocoapods kullanarak yükleme" talimatlarını uygulamanız ve ardından solution/Navigation SDK Codelab klasöründen "pod update" komutunu çalıştırmanız gerekir.
Depoyu yerel olarak klonladıktan sonra Starter klasörünü mevcut bir proje olarak açmak için Xcode'u kullanın. Projenin oluşturulduğunu ve çalıştığını kontrol edin.
Cihaz bağlama veya Xcode Simulator'ı ayarlama
4. Navigasyon SDK'sını uygulamanıza ekleme
Navigation SDK'yı bir Xcode projesine entegre etmenin üç yolu vardır:Bu codelab'de CocoaPods kullanılır. Swift Package Manager'ı kullanarak entegrasyon yapma veya SDK'yı indirerek manuel olarak yükleme hakkında ayrıntılı bilgi için Navigation SDK dokümanlarındaki Xcode projesini oluşturma ve Navigation SDK'yı yükleme başlıklı makaleyi inceleyin.
Cocoapods kullanarak yükleme
CocoaPods aracınız yoksa terminalden aşağıdaki komutu çalıştırarak macOS'e yükleyin. Ayrıntılar için CocoaPods'u kullanmaya başlama kılavuzu'na bakın.
sudo gem install cocoapods
Proje klasörünüzde, starter/Navigation SDK Codelab klasörünün içinde Podfile adlı yeni bir dosya oluşturun (Xcode'da Dosya > Yeni > Dosya > Diğer > Boş'u seçip "Podfile" olarak kaydedin).
Podfile dosyanıza aşağıdaki içeriği ekleyin:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '15.0'
target 'Navigation SDK Codelab' do
pod 'GoogleNavigation', '9.1.1'
end
Podfile tasarruf edin.
Bir terminal açın ve dizini Podfile'ınızı kaydettiğiniz konuma değiştirin (bu, codelab deposundaki "starter/Navigation SDK Codelab" klasörü olmalıdır).
cd "<path-to-starter-project-folder>/Navigation SDK Codelab"
pod install komutunu çalıştırın. Bu komut, Podfile içinde belirtilen API'leri ve bağımlılıkları yükler.
pod install
Xcode'u kapatın ve ardından Xcode'u başlatmak için projenizin .xcworkspace dosyasını açın. Bu andan itibaren projeyi açmak için .xcworkspace dosyasını kullanmanız gerekir.
Proje yapısına bir Pods dizini eklenip eklenmediğini ve bu dizinin "GoogleMaps" ile "GoogleNavigation" Pod'larını içerip içermediğini kontrol edin.

API anahtarınızı ekleme
API anahtarınızı AppDelegate.swift öğenize aşağıdaki şekilde ekleyin:
- Aşağıdaki içe aktarma ifadelerini ekleyin:
import GoogleMaps
import GoogleNavigation
application(_:didFinishLaunchingWithOptions:)yönteminize aşağıdakileri ekleyin:
GMSServices.provideAPIKey("YOUR_API_KEY")
"YOUR_API_KEY" kısmını önceki adımda oluşturduğunuz API anahtarıyla değiştirin.
Projenizi oluşturun ve hataları düzeltin.
5. Uygulama izinlerini yapılandırma
Navigation SDK, yola bağlı konum ve adım adım yol tarifi sağlamak için GPS sinyallerine bağlıdır. Bu nedenle, uygulamanızın kullanıcıdan tam konum verilerine erişim izni istemesi gerekir.
Bunu yapmak için Xcode'da uygulamalarınızın Info.plist dosyasına bazı özellikler ekleyecek, çalışma zamanında kullanıcıdan izin istemek için uygulamanıza bazı kodlar ekleyecek ve izin verilmemesi veya konumun kullanılamaması gibi hataları işleyeceksiniz.
Xcode'da Info.plist dosyasını açın. Şuna benzer bir görünümde olacaktır.

Tam konum izni isteme
Fare işaretçinizi "Information Property List" satırının üzerine getirip "+" simgesini gördüğünüzde yeni değerler ekleyebilirsiniz. Önerilen mülk adlarının bulunduğu bir iletişim kutusu görmek için "+"yı tıklayın. Mülkleri manuel olarak da ekleyebilirsiniz.
Info.plist dosyasına aşağıdaki özellikleri ve değerleri ekleyin:
Özellik | Değer |
Gizlilik - Konum Her Zaman ve Kullanım Sırasında Kullanım Açıklaması | "Bu uygulama, adım adım gezinme özelliği sunmak için cihazınızın konumunu gerektirir" |
Gizlilik - Kullanım Sırasında Konum Kullanımı Açıklaması | "Bu uygulama, adım adım gezinme özelliği sunmak için cihazınızın konumunu gerektirir" |
allowsBackgroundLocationUpdates | EVET |
Arka planda konum izni isteme
Info.plist dosyasına aşağıdaki özellikleri ve değerleri ekleyin:
UIBackgroundModes > Satır Ekle > Item 0: App registers for location updates (Bu değeri, önerilerin açılır listesinden seçin)
İşlemi tamamladığınızda Info.plist dosyası aşağıdaki gibi görünmelidir.

Çalışma zamanında konum erişimi isteğinde bulunma
ViewController.swift dosyasına aşağıdaki içe aktarma ifadelerini ekleyin:
import GoogleNavigation
ViewController sınıfınıza aşağıdaki bildirimi ekleyin:
var locationManager: CLLocationManager!
loadView() için bir yöntem geçersiz kılma ekleyin ve locationManager.requestAlwaysAuthorization()'ı çağırın:
override func loadView() {
locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
Uygulamanız artık kullanıcıdan konum isteyecek ve izin verilirse bu konumu uygulamanızda kullanılabilir hale getirecek .
Bildirim gösterme izni isteme
Kullanıcıdan bildirim gösterme izni istemek için loadView() işlevine aşağıdaki kodu ekleyin. Bu izin, gezinme manevrası talimatlarını göstermek için gereklidir.
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle denied authorization to display notifications.
if !granted || error != nil {
print("User rejected request to display notifications.")
}
}
Uygulamayı oluşturup çalıştırın ve konum paylaşımı ile bildirimleri etkinleştirme istemi aldığınızı doğrulayın.

6. Gezinme kullanıcı arayüzü ekleme
Bu adımda bir harita ekleyip konum gösterecek şekilde yapılandıracaksınız. Ardından, kullanıcıya Navigation SDK'nın kullanım şartlarını içeren bir iletişim kutusu gösterirsiniz.
Uygulamanıza harita görünümü ekleme
ViewController'ınızda bir GMSMapView değişkeni tanımlamak için bu satırı ekleyin.
var mapView: GMSMapView!
Haritayı başlatmak için Viewcontroller.swift cihazınızdaki loadView() bölümüne aşağıdaki kodu ekleyin.
let camera = GMSCameraPosition.camera(withLatitude: 51.483174, longitude: -0.177369, zoom: 14)
let options = GMSMapViewOptions()
options.camera = camera
options.frame = .zero
mapView = GMSMapView(options: options)
view = mapView
Uygulamanızı oluşturup çalıştırdığınızda, Londra'nın güneybatı bölgesinin merkezinde bir harita görürsünüz.

Navigation SDK ürün kullanım şartları iletişim kutusunu gösterme
Aşağıdaki kodu, önceki kodla aynı loadView() yönteminde ViewController.swift dosyasına ekleyin. Bu işlem, Navigation SDK'nın son kullanıcı şartlarını gösterir. Kabul edilmezse gezinme etkinleştirilmez.
// Show the terms and conditions.
let companyName = "Navigation SDK Codelab"
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(withCompanyName: companyName) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
} else {
// Handle the case when the user rejects the terms and conditions.
}
}
İletişim kutusunu görmek için uygulamayı derleyip çalıştırın.

7. Önemli gezinme etkinlikleri için işleyiciler ekleme
Bu adımda, varış noktasına ulaşma veya sürücünün rotayı değiştirme gibi önemli etkinlikler için dinleyicilerin nasıl ayarlanacağı gösterilmektedir.
Bu etkinlikleri dinlemek için görünüm denetleyicinizin GMSNavigatorListener protokolünü kullanması gerekir.
Bu protokolü ViewController.swift içindeki sınıf tanımına ekleyin.
class ViewController: UIViewController,
GMSNavigatorListener {
Şimdi loadView(): içinde dinleyiciyi ayarlamak için bir kod satırı ekleyin.
// Add a listener for GMSNavigator.
mapView.navigator?.add(self)
Son olarak, oluşturulan etkinlikleri işlemek için sınıfınıza iki yöntem ekleyin.
// Listener to handle arrival events.
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) {
print("You have arrived at: \(waypoint.title)")
}
// Listener for route change events.
func navigatorDidChangeRoute(_ navigator: GMSNavigator) {
print("The route has changed.")
}
8. Hedef belirleme ve rehberliği başlatma
Bu bölümde, hedef belirlemeyi ve navigasyon talimatlarını başlatmayı öğreneceksiniz.
Gezinme mantığı için yeni bir işlev oluşturun.
Öncelikle ViewController öğenize startNav() adlı yeni bir işlev ekleyin. Bu, hedef belirleme ve navigasyonu başlatma mantığını içerir.
// Create a route and start guidance.
@objc func startNav() {
}
Hedef için bir Waypoint oluşturun.
Ardından, içinde tek bir ara nokta bulunan bir hedef dizisi oluşturun.
// Create a route and start guidance.
@objc func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(
GMSNavigationWaypoint.init(
placeID: "ChIJH-tBOc4EdkgRJ8aJ8P1CUxo",
title: "Trafalgar Square")!)
}
setDestinations()Yanıtı arayın ve yönetin.
Ardından setDestinations işlevini çağırın ve döndürülen GMSRouteStatus değerini işleyin.
GMSRouteStatus "Tamam" ise mapView'nin navigator nesnesinde isGuidanceActive=true'i ayarlayarak rehberliğe başlayın. Aksi takdirde, hata olduğunu gösteren bir ekstre yazdırın.
Döndürülen GMSRouteStatus değeri "OK" ise mapView.locationSimulator.simulateLocationsAlongExistingRoute() işlevini çağırarak rota boyunca sürüş simülasyonuna başlayın.
// Create a route and start guidance.
@objc func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(
GMSNavigationWaypoint.init(
placeID: "ChIJH-tBOc4EdkgRJ8aJ8P1CUxo",
title: "Trafalgar Square")!)
mapView.navigator?.setDestinations(
destinations
) { routeStatus in
guard routeStatus == .OK else {
print("Handle route statuses that are not OK.")
return
}
//If routeStatus is OK, start guidance.
self.mapView.navigator?.isGuidanceActive = true
//start simulating driving along the route. self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
Sık karşılaşılan hata durumlarını yönetme
Özellikle yeni uygulamanızdaki ilk sorunları ayıklarken GMSRouteStatus hatalarını daha açık bir şekilde ele almak faydalıdır. Örneğin, hata ayıklama ayarlarınız nedeniyle başlangıçta konum izni, API anahtarı veya "rota bulunamadı" hatalarıyla daha sık karşılaşabilirsiniz. Bu nedenle, bu hata durumlarını ele almak faydalı olabilir.
Bu özel durumları işleyen ve konsola bir ifade yazdıran kod ekleyin.
mapView.navigator?.setDestinations(
destinations
) { routeStatus in
guard routeStatus == .OK else {
print("Handle route statuses that are not OK.")
switch routeStatus {
case .locationUnavailable:
print("Location unavailable.") //check permissions
case .noRouteFound:
print("No route found.") //check start location and destination
case .waypointError:
print("Waypoint error") //check Place ID
default:
print("Not sure what happened")
}
return
}
Navigasyon rehberliğini başlatmak için düğme ekleme
Son olarak, kullanıcı arayüzüne bir düğme ekleyin ve bu düğmeyi startNav yöntemine bağlayın. Aşağıdaki kodu kullanarak makeButton() adlı bir yöntem oluşturun. makeButton() işlevinizi loadView()'den çağırın.
// Add a button to the view.
func makeButton() {
// A button to start navigation.
let navButton = UIButton(frame: CGRect(x: 5, y: 150, width: 200, height: 35))
navButton.backgroundColor = .blue
navButton.alpha = 0.5
navButton.setTitle("Start navigation", for: .normal)
navButton.addTarget(self, action: #selector(startNav), for: .touchUpInside)
self.mapView.addSubview(navButton)
}
Uygulamanızı derleyip çalıştırın.
Not: Kodu
startNav()
numarayı arayacak
setDestinations()
İlk 1.000 hedef kullanıldıktan sonra ücretlendirilen yöntem. Daha fazla bilgi için Kullanım ve faturalandırma başlıklı makaleyi inceleyin.
9. Tebrikler!
Bravo, hedefinize ulaştınız.

Google Haritalar Platformu Navigation SDK'sını kullanarak bir hedefe adım adım navigasyon rehberliği sağlayan basit bir uygulama oluşturdunuz.
Uygulama izinlerini ve Navigation SDK son kullanıcı şartları iletişim kutusunu yapılandırdınız ve yer kimliği kullanarak bir hedef belirlediniz. Uygulamanızda çeşitli başarı ve hata durumlarını ele aldınız.
10. İşi daha ileri taşıma
Uygulama geliştirme sürecinizi bir adım daha ileriye taşımak istiyorsanız ilham almak için aşağıdaki konulara göz atın.
- Daha fazla gezinme etkinliğini dinleyin. Kalan süre veya mesafe bir eşiği aşarsa mesaj görüntülemek için kod ekleyin.
- Gezinme arayüzünü özelleştirme
- Daha zorlu bir görev istiyorsanız kullanıcıların hedefi belirlemesine olanak tanımak için Places API yer seçici ekleyip ekleyemeyeceğinize bakın. İpucu: Navigation SDK demo uygulamalarında örnek bir uygulama bulunur. Kodu görmek için proje klasörünüzde
pod try GoogleNavigationkomutunu çalıştırın.