Ikuti panduan ini untuk merencanakan rute dalam aplikasi Anda ke satu tujuan, menggunakan Navigation SDK for iOS.
Ringkasan
- Integrasikan Navigation SDK ke dalam aplikasi Anda, seperti yang dijelaskan di bagian Menyiapkan project.
- Konfigurasikan
GMSMapView. - Minta pengguna untuk menyetujui persyaratan dan ketentuan, serta mengizinkan layanan lokasi dan notifikasi latar belakang.
- Buat array yang berisi satu atau beberapa tujuan.
Tentukan
GMSNavigatoruntuk mengontrol navigasi belokan demi belokan.- Tambahkan tujuan menggunakan
setDestinations. - Tetapkan
isGuidanceActiveketrueuntuk memulai navigasi. - Gunakan
simulateLocationsAlongExistingRouteuntuk menyimulasikan progres kendaraan di sepanjang rute, untuk pengujian, proses debug, dan demonstrasi aplikasi Anda.
- Tambahkan tujuan menggunakan
Melihat kode
Meminta otorisasi yang diperlukan kepada pengguna
Sebelum menggunakan Navigation SDK, pengguna harus menyetujui persyaratan dan ketentuan, serta mengizinkan penggunaan layanan lokasi, yang diperlukan untuk navigasi. Jika aplikasi Anda akan berjalan di latar belakang, aplikasi tersebut juga harus meminta pengguna untuk mengizinkan notifikasi pemberitahuan panduan. Bagian ini menunjukkan cara menampilkan dialog otorisasi yang diperlukan.
Mengizinkan layanan lokasi
Navigation SDK menggunakan layanan lokasi, yang memerlukan otorisasi pengguna. Untuk mengaktifkan layanan lokasi dan menampilkan dialog otorisasi, lakukan langkah-langkah berikut:
Aktifkan kemampuan lokasi dan latar belakang di Xcode:
- Buka target Anda di Xcode, lalu pilih tab Signing & Capabilities. Untuk mengetahui detailnya, lihat panduan Apple tentang menambahkan kemampuan ke aplikasi Anda.
- Tambahkan kemampuan Location (Always) dan Location (When In Use). Di kolom teks untuk masing-masing, tambahkan penjelasan singkat tentang alasan aplikasi Anda memerlukan layanan lokasi (misalnya: "Aplikasi ini memerlukan izin untuk menggunakan layanan lokasi untuk navigasi belokan demi belokan").
- Tambahkan kemampuan Background Modes, lalu centang kotak Location updates. Tanpa kemampuan ini, aplikasi akan error saat memulai navigasi. Untuk mengetahui detailnya, lihat panduan Apple tentang menangani pembaruan lokasi di latar belakang.
Untuk menampilkan dialog otorisasi, panggil metode
requestAlwaysAuthorization()instance pengelola lokasi.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Lihat dokumentasi Apple lengkap untuk otorisasi layanan lokasi.
Mengizinkan notifikasi pemberitahuan untuk panduan latar belakang
Navigation SDK memerlukan izin pengguna untuk memberikan notifikasi pemberitahuan saat aplikasi berjalan di latar belakang. Tambahkan kode berikut untuk meminta izin kepada pengguna agar dapat menampilkan notifikasi ini:
Swift
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.")
}
}
Objective-C
// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
Memberikan otorisasi sensor gerakan
Dalam rilis utama mendatang, Navigation SDK for iOS akan menggabungkan data lokasi inti dengan
sensor gerakan perangkat (CMAltimeter) untuk menghitung ketinggian rute. Saat
SDK mengakses altimeter, iOS akan otomatis menggunakan string ini untuk meminta
izin pengguna.
Menambahkan kunci ini sekarang tidak akan memengaruhi perilaku saat ini, tetapi mencegah error inisialisasi saat Anda mengupgrade SDK nanti.
Untuk mempersiapkan upgrade SDK di masa mendatang, konfigurasikan otorisasi sensor gerak sebagai berikut:
Buka target Anda di Xcode dan buka tab Info, atau buka file
Info.plist.Tambahkan kunci baru: Privacy - Motion Usage Description (
NSMotionUsageDescription).Tambahkan penjelasan singkat untuk pengguna. Misalnya: "Aplikasi ini memerlukan akses sensor gerak untuk menghitung ketinggian dan meningkatkan akurasi pemilihan rute peta".
Setujui persyaratan dan ketentuan
Gunakan kode berikut untuk menampilkan dialog persyaratan dan ketentuan, serta mengaktifkan navigasi saat pengguna menyetujui persyaratan. Perhatikan bahwa contoh ini menyertakan kode untuk layanan lokasi dan notifikasi pemberitahuan panduan (ditampilkan sebelumnya).
Swift
let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
with: termsAndConditionsOptions) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
self.mapView.settings.compassButton = true
// Request authorization to use location services.
self.locationManager.requestAlwaysAuthorization()
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle rejection of notification authorization.
if !granted || error != nil {
print("Authorization to deliver notifications was rejected.")
}
}
} else {
// Handle rejection of terms and conditions.
}
}
Objective-C
GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];
[GMSNavigationServices
showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
callback:^(BOOL termsAccepted) {
if (termsAccepted) {
// Enable navigation if the user accepts the terms.
_mapView.navigationEnabled = YES;
_mapView.settings.compassButton = YES;
// Request authorization to use the current device location.
[_locationManager requestAlwaysAuthorization];
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
} else {
// Handle rejection of the terms and conditions.
}
}];
Membuat rute dan memulai panduan
Untuk merencanakan rute, panggil metode setDestinations navigator dengan array yang berisi satu atau beberapa tujuan GMSNavigationWaypoint yang akan dikunjungi. Jika rute berhasil dihitung, rute tersebut akan muncul di
peta. Untuk memulai panduan di sepanjang rute, tetapkan isGuidanceActive ke true di
callback.
Contoh berikut menampilkan:
- Membuat rute baru dengan satu tujuan.
- Memulai panduan.
- Mengaktifkan notifikasi panduan latar belakang.
- Menyimulasikan perjalanan di sepanjang rute (opsional).
- Menyetel mode kamera ke "ikuti" (opsional).
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
mapView.navigator?.setDestinations(destinations) { routeStatus in
self.mapView.navigator?.isGuidanceActive = true
self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
Objective-C
- (void)startNav {
NSArray<GMSNavigationWaypoint *> *destinations =
@[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
title:@"PCC Natural Market"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
Untuk mempelajari ID Tempat, lihat ID Tempat.
Skenario multi-perhentian
Anda dapat mengonfigurasi maksimum 25 titik jalan.
Metode setDestinations tidak mendukung perjalanan dengan beberapa perhentian. Gunakan
continueToNextDestinationWithCompletion()
untuk memajukan titik jalan ke leg perjalanan berikutnya.
Menetapkan mode perjalanan
Mode perjalanan menentukan jenis rute yang akan diambil dan cara menentukan arah pengguna. Anda dapat menetapkan salah satu dari empat mode perjalanan untuk rute: mengemudi, bersepeda, berjalan kaki, dan taksi. Dalam mode mengemudi dan taksi, arah pengguna didasarkan pada arah perjalanan; dalam mode bersepeda dan berjalan kaki, arah ditunjukkan oleh arah yang dihadapi perangkat (ke arah atas perangkat dalam mode lanskap).
Tetapkan properti travelMode tampilan peta, seperti yang ditunjukkan dalam contoh berikut:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Menetapkan jalan yang harus dihindari
Gunakan properti avoidsHighways dan avoidsTolls BOOL untuk menghindari
jalan raya, jalan tol, atau keduanya di sepanjang rute.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Menyetel volume panduan audio
Untuk menyesuaikan volume panduan suara, tetapkan properti volumeLevel di
navigator ke rendah, normal, atau tinggi. Navigator menggunakan tingkat volume terakhir yang dipertahankan, atau ditetapkan ke normal secara default.
Swift
self.mapView.navigator?.volumeLevel = .low
Objective-C
_mapView.navigator.volumeLevel = GMSNavigationVolumeLevelLow;
Pencari PlaceID
Anda dapat menggunakan PlaceID Finder
untuk menemukan ID tempat yang akan digunakan untuk tujuan rute. Tambahkan tujuan dari
placeID dengan GMSNavigationWaypoint.
Teks mengambang
Anda dapat menambahkan teks mengambang di mana saja dalam aplikasi, asalkan atribusi Google tidak tertutup. Navigation SDK tidak mendukung penambatan teks ke koordinat tertentu (lintang, bujur) di peta, atau ke label. Untuk mengetahui informasi selengkapnya, lihat Jendela info.