Skorzystaj z tego przewodnika, aby wyznaczyć w aplikacji trasę do jednego miejsca docelowego. przy użyciu pakietu Navigation SDK na iOS.
Omówienie
- Zintegruj pakiet SDK nawigacji z aplikacją zgodnie z opisem znajdziesz w sekcji Skonfiguruj projekt.
- Skonfiguruj
GMSMapView
. - Pytaj użytkownika o zaakceptowanie warunków korzystania z usługi i autoryzację lokalizacji i powiadomienia w tle.
- Utwórz tablicę zawierającą co najmniej jedno miejsce docelowe.
Zdefiniuj element
GMSNavigator
do sterowania nawigacją zakręt po zakręcie.- Aby dodać miejsca docelowe, użyj
setDestinations
. - Ustaw
isGuidanceActive
do:true
, aby rozpocząć nawigację. - Użyj formatu
simulateLocationsAlongExistingRoute
aby symulować postęp pojazdu na trasie, w celu testowania, debugowanie i prezentowanie aplikacji.
- Aby dodać miejsca docelowe, użyj
Zobacz kod
Pytaj użytkownika o niezbędne autoryzacje
Przed rozpoczęciem korzystania z pakietu Navigation SDK użytkownik musi wyrazić zgodę na Warunków korzystania z usługi oraz upoważniania do korzystania z usług lokalizacyjnych, wymagane do nawigacji. Jeśli aplikacja działa w tle, musi też proszą użytkownika o autoryzowanie powiadomień o alertach dotyczących wskazówek. Ta sekcja pokazuje jak wyświetlać wymagane prośby o autoryzację.
Autoryzacja usług lokalizacyjnych
Pakiet Navigation SDK korzysta z usług lokalizacyjnych, które wymagają autoryzacją użytkownika. Aby włączyć usługi lokalizacyjne i wyświetlić autoryzację , wykonaj te czynności:
- Dodaj klucz
NSLocationAlwaysUsageDescription
doInfo.plist
. Jako wartość podaj krótkie wyjaśnienie, dlaczego aplikacja wymaga dostępu do lokalizacji. usług Google. Na przykład: „Ta aplikacja wymaga uprawnień do korzystania z usług lokalizacyjnych dla: szczegółowe wskazówki dojazdu."
Aby wyświetlić okno autoryzacji, wywołaj
requestAlwaysAuthorization()
z instancję menedżera lokalizacji.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Autoryzuj powiadomienia o alertach na potrzeby wskazówek w tle
Aby wysyłać alerty, pakiet Navigation SDK wymaga zgody użytkownika powiadomienia, gdy aplikacja działa w tle. Dodaj ten kod aby wyświetlić użytkownikowi prośbę o zgodę na wyświetlanie tych powiadomień:
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");
}
}];
Zaakceptuj Warunki korzystania z usługi.
Użyj poniższego kodu, aby wyświetlić okno z warunkami korzystania z usługi i włączyć nawigacji po zaakceptowaniu warunków przez użytkownika. Pamiętaj, że ten przykład zawiera kod usług lokalizacyjnych i alertów dotyczących wskazówek (widocznych wcześniej).
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.
}
}];
Utwórz trasę i włącz wskazówki
Aby wyznaczyć trasę, wywołaj metodę setDestinations()
nawigatora z tablicą
zawierające co najmniej jedno miejsce docelowe (GMSNavigationWaypoint
), które chcesz odwiedzić. Jeśli udało się
trasa zostanie wyświetlona na mapie. Aby włączyć wskazówki na trasie,
zaczynając od pierwszego miejsca docelowego, ustaw isGuidanceActive
na true
w
oddzwanianie.
Oto przykład:
- Tworzę nową trasę z dwoma miejscami docelowymi.
- Wskazówki wstępne.
- Włączam powiadomienia ze wskazówkami w tle.
- Symulowanie podróży wzdłuż trasy (opcjonalnie).
- Ustawianie trybu aparatu na „Obserwuj” (opcjonalne).
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;
}];
}
Więcej informacji o identyfikatorach miejsc znajdziesz w artykule Identyfikatory miejsc.
Wybierz środek transportu
Tryb podróży określa, jaki rodzaj trasy zostanie pobrany oraz w jaki sposób przeszkody użytkownika. Możesz ustawić jeden z czterech trybów podróży dla trasa: samochodem, rowerem, pieszo lub taksówką. W trybie samochodowym i taksówkowym trasa użytkownika jest taka: w zależności od kierunku jazdy; w trybie spacerowym i rowerowym trasa jest oznaczany kierunkiem, w którym jest ustawione urządzenie.
Ustawianie travelMode
w widoku mapy, jak w poniższym przykładzie:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Ustaw drogi, których chcesz unikać
Aby tego uniknąć, używaj właściwości avoidsHighways
i avoidsTolls
BOOL
.
autostradami lub drogami płatnymi wzdłuż trasy.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Wyszukiwarka PlaceID
Możesz skorzystać z wyszukiwarki PlaceID
, by znaleźć identyfikatory miejsc, których możesz użyć w przypadku celów podróży. Dodaj miejsce docelowe z: placeID
z: GMSNavigationWaypoint
.
Tekst pływający
Możesz dodawać tekst pływający w dowolnym miejscu w aplikacji, gdy korzystasz z tagu Google atrybucja nie jest brana pod uwagę. Pakiet Navigation SDK nie obsługuje zakotwiczenia szerokości i długości geograficznej na mapie lub etykiety. Aby dowiedzieć się więcej, zobacz Okna informacyjne.