Aby wyznaczyć w aplikacji trasę do jednego miejsca docelowego za pomocą pakietu SDK do nawigacji na iOS, postępuj zgodnie z tym przewodnikiem.
Omówienie
- Zintegruj pakiet SDK Nawigacji ze swoją aplikacją zgodnie z instrukcjami podanymi w sekcji Konfigurowanie projektu.
- Skonfiguruj
GMSMapView
. - Poproś użytkownika o zaakceptowanie warunków korzystania z usługi i zezwolenie na dostęp do lokalizacji oraz powiadomień w tle.
- Utwórz tablicę zawierającą co najmniej 1 miejsce docelowe.
Określ
GMSNavigator
, aby sterować nawigacją zakręt po zakręcie.- Dodaj miejsca docelowe za pomocą funkcji
setDestinations
. - Aby rozpocząć nawigację, ustaw wartość
isGuidanceActive
natrue
. - Użyj
simulateLocationsAlongExistingRoute
, aby symulować przejazd pojazdu po trasie na potrzeby testowania, debugowania i prezentowania aplikacji.
- Dodaj miejsca docelowe za pomocą funkcji
Wyświetlanie kodu
Zapytaj użytkownika o wymagane uprawnienia
Zanim użytkownik zacznie korzystać z pakietu SDK nawigacji, musi zaakceptować warunki korzystania z usługi i zezwolić na korzystanie z usług lokalizacyjnych, które są wymagane do nawigacji. Jeśli aplikacja będzie działać w tle, musi też poprosić użytkownika o autoryzację powiadomień z instrukcjami. W tej sekcji dowiesz się, jak wyświetlić wymagane prośby o autoryzację.
Autoryzowanie usług lokalizacyjnych
Pakiet SDK Nawigacji korzysta z usług lokalizacyjnych, co wymaga autoryzacji użytkownika. Aby włączyć usługi lokalizacyjne i wyświetlić okno autoryzacji:
- Dodaj klucz
NSLocationAlwaysUsageDescription
doInfo.plist
. W polu wartości dodaj krótkie wyjaśnienie, dlaczego Twoja aplikacja wymaga dostępu do usług lokalizacyjnych. Na przykład: „Ta aplikacja potrzebuje uprawnienia do korzystania z usług lokalizacyjnych na potrzeby nawigacji krok po kroku”.
Aby wyświetlić okno autoryzacji, wywołaj funkcję
requestAlwaysAuthorization()
instancji menedżera lokalizacji.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Autoryzowanie powiadomień o alertach w przypadku wskazówek w tle
Pakiet SDK nawigacji wymaga zgody użytkownika na wyświetlanie alertów i powiadomień, gdy aplikacja działa w tle. Dodaj ten kod, aby poprosić użytkownika o zezwolenie 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 tego kodu, aby wyświetlić okno z warunkami korzystania z usługi i zezwolić na nawigację po zaakceptowaniu warunków przez użytkownika. Pamiętaj, że ten przykład zawiera kod dla usług lokalizacyjnych i powiadomień o alertach (pokazanych 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.
}
}];
Tworzenie trasy i rozpoczynanie wskazówek
Aby wyznaczyć trasę, wywołaj metodę setDestinations()
klasy Navigator z tablicą zawierającą co najmniej jeden punkt docelowy (GMSNavigationWaypoint
). Jeśli obliczenia się powiodą, trasa zostanie wyświetlona na mapie. Aby rozpocząć nawigację po trasie, zaczynając od pierwszego miejsca docelowego, ustaw isGuidanceActive
na true
w funkcji wywołania zwrotnego.
Ten przykład pokazuje:
- Tworzenie nowej trasy z 2 miejscami docelowymi.
- Wskazówki dotyczące rozpoczęcia.
- Włączanie powiadomień o przewodniku w tle.
- symulowanie przejazdu po trasie (opcjonalnie).
- Ustawienie trybu aparatu na „śledzenie” (opcjonalnie).
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 miejsca znajdziesz w artykule Identyfikatory miejsca.
Wybierz środek transportu
Tryb podróży określa, jaki typ trasy zostanie pobrany, oraz sposób określenia trasy użytkownika. Na trasie możesz ustawić jeden z 4 rodzajów przejazdu: samochodem, rowerem, pieszo lub taksówką. W trybie jazdy samochodem i taksówką trasa użytkownika jest ustalana na podstawie kierunku jazdy. W trybie jazdy na rowerze i chodzenia trasa jest ustalana na podstawie kierunku, w którym skierowane jest urządzenie.
Ustaw właściwość travelMode
widoku mapy, jak w tym przykładzie:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Ustawianie dróg do unikania
Użyj właściwości avoidsHighways
i avoidsTolls
BOOL
, aby uniknąć autostrad lub dróg płatnych na trasie.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Wyszukiwarka identyfikatorów PlaceID
Za pomocą wyszukiwarki identyfikatorów miejsc możesz znaleźć identyfikatory miejsc, które możesz wykorzystać jako miejsca docelowe na trasie. Dodaj miejsce docelowe z placeID
za pomocą GMSNavigationWaypoint
.
tekst pływający,
Możesz dodawać tekst unoszący się nad innymi elementami w dowolnym miejscu w aplikacji, o ile nie wpływa to na atrybucję Google. Pakiet SDK Nawigacji nie obsługuje zakotwiczenia tekstu do współrzędnych geograficznych na mapie ani do etykiety. Więcej informacji znajdziesz w oknach z informacjami.