Halaman ini membahas langkah-langkah umum yang Anda ikuti untuk membuat panduan yang disesuaikan sebagai bagian dari pengalaman navigasi kustom.
Proses ini berbeda dengan proses yang dijelaskan dalam Menavigasi rute sebagai berikut:
- Anda pertama-tama membuat sesi navigasi secara independen dan mendapatkan instance navigator melalui sesi, bukan dengan memanggil pengontrol tampilan.
- Anda menyiapkan pemroses peristiwa untuk merespons dan mengelola peristiwa navigasi.
- Buat sesi navigasi menggunakan
GMSNavigationService.createNavigationSession
dan mulai navigasi dengan panggilansetDestination
. Saat pengalaman navigasi Google memanggil navigator melalui tampilan peta navigasi,GMSNavigationServices
akan mengontrol dan menerima aliran peristiwa dari sesi navigasi secara independen dari instance UI. Artinya, composable ini dapat berjalan tanpa UI, atau diteruskan ke pengalaman berbasis UI mana pun. Dengan pendekatan ini, sesi navigasi akan terus berjalan di aplikasi Anda hingga referensi terakhir dihapus darinya. - Membuat penyedia lokasi yang terkunci ke jalan. Gunakan penyedia lokasi jika Anda ingin aplikasi memiliki pemantauan lokasi berkelanjutan, seperti saat menampilkan tampilan navigasi dengan titik biru di sepanjang rute.
- Siapkan pemroses untuk panduan belokan demi belokan yang mendetail dengan menerapkan
protokol
GMSNavigatorListener
. Kemudian, ubah informasi tersebut menjadi apa pun yang diperlukan untuk pengalaman navigasi kustom Anda. Contoh:- Terapkan kolom khusus teks untuk transmisi layar sederhana dari rute.
- Desain dan isi kolom untuk UI Anda sendiri.
- Siapkan simulator navigasi. Hal ini diperlukan untuk pengembangan dan pengujian.
Membuat sesi navigasi independen
Cuplikan kode berikut dari demo menunjukkan navigasi yang dibuat secara independen dari pengontrol tampilan. Kode tersebut kemudian menambahkan peta ringkasan yang dikonfigurasi untuk menampilkan lokasi yang saat ini terkunci ke jalan.
// Create the navigation session.
_navigationSession = [GMSNavigationServices createNavigationSession];
GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
_navigationSession.roadSnappedLocationProvider;
[roadSnappedLocationProvider startUpdatingLocation];
GMSNavigator *navigator = _navigationSession.navigator;
[navigator addListener:self];
navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
navigator.sendsBackgroundNotifications = NO;
_navigationSession.started = YES;
[navigator setDestinations:@[ destination ]
callback:^(GMSRouteStatus routeStatus) {
// …handle changes in route status.
}];
// Add an overview map.
_mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
[self.mainStackView addArrangedSubview:_mapView];
[self.mainStackView setNeedsLayout];
_mapView.settings.compassButton = YES;
_mapView.delegate = self;
_mapView.myLocationEnabled = YES;
_mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;
Meneruskan navigasi dari pengalaman kustom ke pengalaman Google
Cuplikan kode ini menggambarkan cara aplikasi Anda mengizinkan pengguna memasuki pengalaman navigasi Google dari pengalaman navigasi kustom. Cuplikan kode ini juga menunjukkan cara aplikasi Anda melakukan transisi ini saat membagikan peta.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];