Ikuti panduan ini untuk merencanakan rute dalam aplikasi Anda ke satu tujuan, menggunakan Navigation SDK untuk iOS.
Ringkasan
- Integrasikan Navigation SDK ke dalam aplikasi Anda, seperti yang dijelaskan di bagian Set up your project.
- Konfigurasikan
GMSMapView
. - Minta pengguna untuk menyetujui persyaratan dan ketentuan, serta mengizinkan lokasi dan notifikasi latar belakang.
- Buat array yang berisi satu atau beberapa tujuan.
Tentukan
GMSNavigator
untuk mengontrol navigasi belokan demi belokan.- Tambahkan tujuan menggunakan
setDestinations
. - Setel
isGuidanceActive
ketrue
untuk memulai navigasi. - Gunakan
simulateLocationsAlongExistingRoute
untuk melakukan simulasi kemajuan kendaraan di sepanjang rute, untuk pengujian, proses debug, dan mendemonstrasikan aplikasi Anda.
- Tambahkan tujuan menggunakan
Melihat kode
Minta pengguna melakukan otorisasi yang diperlukan
Sebelum menggunakan Navigation SDK, pengguna harus menyetujui persyaratan dan ketentuan, dan mengizinkan penggunaan layanan lokasi, yang yang diperlukan untuk navigasi. Jika aplikasi Anda akan berjalan di latar belakang, aplikasi juga harus minta pengguna untuk memberikan otorisasi notifikasi peringatan panduan. Bagian ini menunjukkan cara menampilkan prompt otorisasi yang diperlukan.
Otorisasi layanan lokasi
Navigation SDK menggunakan layanan lokasi, yang memerlukan otorisasi pengguna. Untuk mengaktifkan layanan lokasi dan menampilkan otorisasi dialog, lakukan langkah-langkah berikut:
- Tambahkan kunci
NSLocationAlwaysUsageDescription
keInfo.plist
. Untuk nilai, tambahkan penjelasan singkat tentang mengapa aplikasi Anda memerlukan lokasi layanan IT perusahaan mereka. Misalnya: "Aplikasi ini memerlukan izin untuk menggunakan layanan lokasi untuk navigasi belokan demi belokan."
Untuk menampilkan dialog otorisasi, panggil
requestAlwaysAuthorization()
dari instance pengelola lokasi.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Otorisasi notifikasi pemberitahuan untuk panduan latar belakang
Navigation SDK memerlukan izin pengguna untuk memberikan pemberitahuan notifikasi saat aplikasi berjalan di latar belakang. Tambahkan kode berikut untuk meminta izin kepada pengguna agar 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");
}
}];
Setujui persyaratan dan ketentuan
Gunakan kode berikut untuk menampilkan dialog persyaratan dan ketentuan, dan mengaktifkan navigasi situs ketika pengguna menyetujui persyaratan. Perhatikan bahwa contoh ini mencakup kode untuk pemberitahuan peringatan layanan dan panduan lokasi (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.
}
}];
Buat rute dan mulai panduan
Untuk merencanakan rute, panggil metode setDestinations()
Navigator dengan array
yang berisi satu atau beberapa tujuan (GMSNavigationWaypoint
) untuk dikunjungi. Jika berhasil
komputasi, rute akan ditampilkan pada peta. Untuk memulai panduan di sepanjang rute,
dimulai dengan tujuan pertama, tetapkan isGuidanceActive
ke true
di
.
Contoh berikut menampilkan:
- Membuat rute baru dengan dua tujuan.
- Memulai panduan.
- Mengaktifkan notifikasi panduan latar belakang.
- Menyimulasikan perjalanan di sepanjang rute (opsional).
- Menyetel mode kamera menjadi "ikuti" (opsional).
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
title:"Marina Park")!)
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"],
[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
title:@"Marina Park"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
Untuk mempelajari ID Tempat, lihat ID Tempat.
Setel mode perjalanan
Mode perjalanan menentukan jenis rute mana yang akan diambil, dan bagaimana caranya kursus pengguna telah ditentukan. Anda dapat menyetel salah satu dari empat mode perjalanan untuk rute: mengemudi, bersepeda, berjalan kaki, dan taksi. Dalam mode mengemudi dan taksi, jalur pengguna adalah berdasarkan arah perjalanan; dalam mode bersepeda dan berjalan, kursus ini ditunjukkan oleh arah hadap perangkat.
Setel travelMode
tampilan peta, seperti yang ditampilkan dalam contoh berikut:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Tetapkan jalan yang harus dihindari
Gunakan properti BOOL
avoidsHighways
dan avoidsTolls
untuk menghindari
jalan tol dan/atau jalan tol di sepanjang rute.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
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 bisa menambahkan teks mengambang di mana pun di aplikasi, selama atribusi tidak dicakup. Navigation SDK tidak mendukung penambatan teks ke lintang/bujur pada peta, atau ke label. Untuk informasi selengkapnya, lihat Jendela info.