1. Başlamadan önce
Bu codelab'de, önceden yapılandırılmış bir hedefe gitmek için Google Haritalar Platformu Navigasyon SDK'sını kullanan basit bir iOS uygulaması oluşturmayı öğreneceksiniz.
Bitirdiğinizde uygulamanız böyle görünecek.
Ön koşullar
- Swift'te temel iOS uygulaması geliştirme bilgisi.
- Belirli bir konuma odaklanmış harita oluşturma gibi temel Google Haritalar SDK'sı kavramlarına aşinalık kazanın.
Neler öğreneceksiniz?
- Bir hedefe gitmek için Gezinme SDK'sını kullanan basit bir iOS Swift uygulaması nasıl oluşturulur?
- Uzaktan Cocoapods deposundan Navigation SDK'sını entegre etme.
- Navigasyon SDK'sı son kullanıcı şartlarıyla konum izinlerini ve kullanıcı sözleşmesini yönetme.
- SDK'yı başlatma.
- Hedef ayarlama ve navigasyon rehberliğini başlatma.
Gerekenler
- XCode'un en son kararlı sürümü.
- Faturalandırmanın etkin olduğu bir Google Hesabı ve projesi.
- iOS cihaz veya XCode Simülasyon Aracı'nda çalışan taklit cihaz. Hangisini seçerseniz seçin, SDK'nın Gezinme SDK'sının minimum şartlarını karşılaması gerekir.
2. Hazırlanın
Google Cloud Platform hesabınız ve faturalandırmanın etkin olduğu bir projeniz yoksa Google Haritalar Platformu'nu kullanmaya başlama talimatlarını uygulayarak Google Cloud projenizi oluşturun.
Konsolda bir Google Cloud projesi seçme
Cloud Console'da proje açılır menüsünü tıklayın ve bu kod laboratuvarını kullanmak istediğiniz projeyi seçin.
Projenizde Gezinme SDK'sını etkinleştirme
Bu codelab için gerekli olan Google Haritalar Platformu API'lerini ve SDK'larını Google Cloud Marketplace'te etkinleştirin.
API'ler ve Hizmetler > kitaplığını Google Cloud Console'da açıp "Gezinme SDK'sı" araması yapın.
Bir arama sonucu görürsünüz.
Ürün Ayrıntıları sayfasını açmak için Gezinme SDK'sı seçeneğini tıklayın. Projenizde SDK'yı etkinleştirmek için Etkinleştir'i tıklayın.
Bu işlemi iOS için Google Haritalar SDK'sı için 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 bir API anahtarı gerekir. Konsoldaki Kimlik bilgileri sayfasında. "+Create Credentials" (+Kimlik Bilgisi Oluştur) seçeneğini tıklayın. sayfanın üst kısmından "API Anahtarı"nı seçin seçim yapabilirsiniz.
Üretimde kullanmak için API anahtarınız için uygulama kısıtlaması belirlemek en iyi uygulamadır ancak bu kod laboratuvarı için isteğe bağlıdır.
3. Örnek proje dosyalarını alma
Bu bölümde, bu codelab'in GitHub deposundaki dosyaları klonlayarak temel bir boş XCode uygulama projesinin nasıl oluşturulacağı açıklanmaktadır. GitHub deposu, codelab kodunun önceki ve sonraki sürümlerini içerir. Kod laboratuvarı, boş bir proje şablonuyla başlar ve tamamlanmış duruma kadar ilerler. 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 şu düğmeyi tıklayın:
Mümkün olduğunca hızlı bir başlangıç yapmanız için depodaki Starter
klasöründe, bu codelab'i uygulamanıza yardımcı olacak bir başlangıç kodu bulabilirsiniz. Ayrıca, dilediğiniz zaman ilerlemenizi kontrol etmek veya ileriye gitmek isterseniz tamamlanmış bir Solution
projesi de vardır. Çözüm projesini kullanmak için aşağıdaki "Cocoapods'u 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ğundan ve çalıştığından emin olun.
Cihaz bağlama veya XCode Simülasyon Aracı'nı ayarlama
4. Navigasyon SDK'sını uygulamanıza ekleme
Navigation SDK'yı bir XCode projesine entegre etmenin üç yolu vardır: Bu kod laboratuvarında CocoaPods kullanılmaktadı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ında Xcode projesini oluşturma ve Navigation SDK'yı yükleme bölümüne bakın.
Cocoapods kullanarak yükleme
CocoaPods aracı yoksa terminalde aşağıdaki komutu çalıştırarak macOS'e yükleyin. Ayrıntılar için CocoaPods'u kullanmaya başlama kılavuzuna 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çin ve "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 dosyanızı kaydettiğiniz konuma (codelab deposundaki "starter/Navigation SDK Codelab" klasörü olmalıdır) değiştirin.
cd "<path-to-starter-project-folder>/Navigation SDK Codelab"
pod install
komutunu çalıştırın. Bu işlem, bağımlılıklarla birlikte Podfile
içinde belirtilen API'leri yükler
pod install
Xcode'u kapatın ve ardından Xcode'u başlatmak için projenizin .xcworkspace dosyasını açın. Bu tarihten itibaren projeyi açmak için .xcworkspace dosyasını kullanmanız gerekir.
Proje yapısına bir Kapsül dizininin eklendiğinden ve "GoogleHaritalar"ı içerdiğinden emin olun. ve "GoogleGezinme" Kapsüller.
API anahtarınızı ekleme
API anahtarınızı AppDelegate.swift
'nize aşağıdaki gibi 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")
"API_ANAHTARINIZ" ifadesini değiştirin önceki adımda oluşturduğunuz API anahtarıyla değiştirin.
Projenizi derleyin ve hataları düzeltin.
5. Uygulama izinlerini yapılandırma
Navigasyon SDK'sı, yol üzerinde konum ve adım adım yol tarifi sağlamak için GPS sinyallerini kullanır. Bu nedenle, uygulamanızın kullanıcıdan tam konum verilerine erişim izni vermesini istemesi gerekir.
Bunu yapmak için Xcode'daki uygulamalarınızın Info.plist dosyasına bazı özellikler eklemeniz, çalışma zamanında kullanıcıdan izin isteyecek şekilde uygulamanıza bazı kodlar eklemeniz ve izin verilmemesi veya konumun kullanılamaması gibi hataları ele almanız gerekir.
Xcode'da Info.plist dosyasını açın. Şuna benzer bir görünümde olacaktır.
Tam konum izni isteyin
Fare işaretçisini "Bilgi Mülkü Listesi" satırının üzerine getirerek "+" simgesini görene kadar yeni değerler ekleyebilirsiniz. Videodaki simgesini tıklayın.
Info.plist dosyasına aşağıdaki özellikleri ve değerleri ekleyin:
Özellik | Değer |
Gizlilik - Konum Her Zaman ve Kullanıldığında Kullanım Açıklaması | "Bu uygulama, adım adım yol tarifi sunmak için cihazınızın konumuna ihtiyaç duyuyor" |
Gizlilik - Kullanımda Olan Konum Kullanım Açıklaması | "Bu uygulama, adım adım yol tarifi sunmak için cihazınızın konumuna ihtiyaç duyuyor" |
allowsBackgroundLocationUpdates | EVET |
Arka planda konum izni isteme
Aşağıdaki özellikleri ve değerleri Info.plist dosyasına ekleyin:
UIBackgroundModes
Satır Ekle > Item 0: App registers for location updates
(bu değeri, öneri açılır listesinden seçin)
İşlemi tamamladığınızda Info.plist aşağıdaki gibi görünecektir.
Konum erişimini çalışma zamanında isteme
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 yöntem geçersiz kılma ekleyin ve locationManager.requestAlwaysAuthorization()
'i arayın:
override func loadView() {
locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
Uygulamanız artık kullanıcıdan konum bilgisi isteyecek ve izin vermesi halinde bunu uygulamanızın kullanımına açacak .
Bildirim gösterme izni isteme
Gezinme manevrası talimatlarını göstermek için gerekli olan bildirimleri göstermek üzere kullanıcıdan izin istemek için loadView() işlevine aşağıdaki kodu ekleyin.
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ı derleyip çalıştırın ve konum paylaşmanız ve bildirimleri etkinleştirmeniz istenip istenmediğini kontrol edin.
6. Gezinme kullanıcı arayüzü ekleme
Bu adımda bir harita ekleyecek ve bu haritayı bir konumu gösterecek şekilde yapılandıracaksınız. Ardından kullanıcıya, Navigasyon SDK'sı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()
dosyasına 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ırın. Güneybatı Londra'nın ortasına yerleştirilmiş bir harita görürsünüz.
Navigation SDK ürün kullanım şartları iletişim kutusunu gösterme
Önceki kodla aynı loadView()
yönteminde ViewController.swift
öğesine aşağıdaki kodu ekleyin. Bu durumda, Gezinme SDK'sı son kullanıcı kullanım şartları gösterilir. Kabul edilmezse navigasyon etkinleştirilmeyecektir.
// 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 dinleyici ekleme
Bu adımda, hedefe varış veya sürücünün rota değiştirmesi gibi önemli etkinlikler için dinleyicileri nasıl ayarlayacağınız gösterilmektedir.
Bu etkinlikleri dinlemek için görünüm denetleyicinizin GMSNavigatorListener
protokolünü benimsemesi gerekir.
Bu protokolü ViewController.swift
içindeki sınıf tanımına ekleyin.
class ViewController: UIViewController,
GMSNavigatorListener {
Şimdi, loadView():
uygulamasında işleyiciyi ayarlamak için bir kod satırı ekleyin
// Add a listener for GMSNavigator.
mapView.navigator?.add(self)
Son olarak, sınıfınıza toplanan etkinlikleri işlemek için 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, bir hedefi nasıl belirleyeceğiniz ve navigasyon rehberliğini nasıl başlatacağınız açıklanmaktadır.
Gezinme mantığı için yeni bir işlev oluşturun.
Öncelikle ViewController
dosyanıza startNav()
adlı yeni bir işlev ekleyin. Bu, hedef belirleme ve gezinmeye başlama 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 yol noktası 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()
Arama yapın ve yanıtı yönetin.
Sonra, setDestinations
numaralı telefonu arayın ve döndürülen GMSRouteStatus
işlemini gerçekleştirin.
GMSRouteStatus
"Tamam" ise kılavuzu mapView
öğesinin navigator
nesnesinde isGuidanceActive=true
öğesini ayarlayarak başlatın. Aksi takdirde, hata olduğunu göstermek için bir ifade yazdırın.
Döndürülen GMSRouteStatus
değeri "OK" ise mapView.locationSimulator.simulateLocationsAlongExistingRoute()
işlevini çağırarak rotada sürüş simülasyonunu başlatı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ı ele alma
Özellikle yeni uygulamanızla ilgili ilk sorunları giderirken 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ını daha sık alabilirsiniz. Bu nedenle, bu hata durumlarını ele almak yararlı olabilir.
Bu özel durumları işleyen ve konsola bir ifade yazdıran bir 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 bir düğme ekleme
Son olarak, kullanıcı arayüzüne bir düğme ekleyin ve bunu startNav yöntemine bağlayın. Aşağıdaki kodu kullanarak makeButton()
adlı bir yöntem oluşturun. loadView()
uygulamasından makeButton()
fonksiyonunuzu ç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 şurada çalıştırmak:
startNav()
şunu çağıracak:
setDestinations()
Bu yöntemde, kullanılan ilk 1.000 hedeften sonra ücret alınır. Daha fazla bilgi için Kullanım ve faturalandırma bölümüne bakın.
9. Tebrikler!
Hedefinize ulaştınız.
Google Haritalar Platformu Navigasyon SDK'sını kullanarak bir hedefe adım adım yol tarifi veren basit bir uygulama oluşturdunuz.
Uygulama izinlerini ve Navigasyon SDK'sı son kullanıcı şartları iletişim kutusunu yapılandırdınız ve yer kimliği kullanarak bir hedef belirttiniz. 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 daha ileriye taşımak istiyorsanız ilham almak için aşağıdaki konulara göz atın.
- Diğer gezinme etkinliklerini dinleyin. Kalan süre veya mesafe belirli bir eşiği aşarsa bir mesaj gösterecek kodu ekleyin.
- Gezinme arayüzünü özelleştirin.
- Daha büyük bir zorluk istiyorsanız kullanıcının hedefi belirlemesine izin vermek için bir Places API yer seçici ekleyip ekleyemeyeceğinizi öğrenin. İpucu: Gezinme SDK'sı demo uygulamalarının örnek bir uygulaması vardır. Kodu görmek için proje klasörünüzde
pod try GoogleNavigation
komutunu çalıştırın.