Uygulamanızda bulunan ve tek bir hedefe giden bir rota belirlemek için bu kılavuzu inceleyin. kullanarak iOS için Navigasyon SDK'sını kullanabilirsiniz.
Genel Bakış
- Gezinme SDK'sını uygulamanıza entegre edin. Projenizi oluşturma bölümünde görebilirsiniz.
- Bir
GMSMapView
yapılandırın. - Kullanıcıdan şartlar ve koşulları kabul etmesini ve konumu yetkilendirmesini isteyin arka plan bildirimleri alabilirsiniz.
- Bir veya daha fazla hedef içeren bir dizi oluşturun.
Bir
GMSNavigator
tanımlayın yol tarifini verir.setDestinations
kullanarak hedef ekleyin.isGuidanceActive
ayarla Navigasyonu başlatmak içintrue
konumuna gidin.simulateLocationsAlongExistingRoute
kullanın test etmek amacıyla rota boyunca aracın ilerlemesini simüle etmek ve uygulamanızı gösterin.
Kodu inceleyin
Kullanıcıdan gerekli yetkilendirmeleri isteyin
Gezinme SDK'sını kullanmadan önce kullanıcının şunu kabul etmesi gerekir: ve kullanıcı izni bulunan konum hizmetlerinin kullanımına izin vermek gereklidir. Uygulamanız arka planda çalışacaksa kullanıcıdan yönlendirme uyarısı bildirimlerini yetkilendirmesini isteme. Bu bölümde şunlar gösterilir: Gerekli yetkilendirme istemlerinin nasıl görüntüleneceğini öğrenin.
Konum hizmetlerini yetkilendirme
Gezinme SDK'sı konum hizmetlerini kullanır. Bunun için kullanıcı yetkilendirmesi. Konum hizmetlerini etkinleştirmek ve yetkilendirmeyi görüntülemek için iletişim kutusunda şu adımları uygulayın:
NSLocationAlwaysUsageDescription
anahtarınıInfo.plist
öğesine ekleyin.Değer için, uygulamanızın neden konum gerektirdiğine dair kısa bir açıklama ekleyin kullanıma sunuyoruz. Örneğin: "Bu uygulama, konum hizmetlerini şu amaçlarla kullanmak için izne ihtiyaç duyuyor: adım adım navigasyon."
Yetkilendirme iletişim kutusunu görüntülemek için şunu çağırın:
requestAlwaysAuthorization()
of konum yöneticisi örneğine bakalım.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Arka planda yardım almak için uyarı bildirimlerini yetkilendirin
Gezinme SDK'sının uyarı sağlamak için kullanıcı iznine ihtiyacı var uygulama arka planda çalışırken bildirim gönderir. Aşağıdaki kodu ekleyin kullanarak kullanıcıdan bu bildirimleri görüntüleme izni ister:
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");
}
}];
Hükümler ve koşulları kabul edin
Aşağıdaki kodu kullanarak şartlar ve koşullar iletişim kutusunu görüntüleyin ve kullanıcı şartları kabul ettiğinde gezinme. Bu örneğin konum hizmetleri ve yol gösterici uyarı bildirimlerinin kodu (gösterilen ).
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.
}
}];
Rota oluşturma ve yönlendirmeyi başlatma
Rota çizmek için bir dizi kullanarak Navigator'ın setDestinations()
yöntemini çağırın
ziyaret edilecek bir veya daha fazla hedef (GMSNavigationWaypoint
) içeren Başarıyla
hesaplandığında rota haritada gösterilir. Rota boyunca rehberlik etmeye başlamak için
ilk hedefle başlıyor, isGuidanceActive
öğesini şurada true
olarak ayarlayın:
geri arama.
Aşağıdaki örnekte şunlar gösterilmektedir:
- İki hedef içeren yeni bir rota oluşturma.
- Başlangıç kılavuzu.
- Arka planda rehberlik bildirimleri etkinleştiriliyor.
- Rota boyunca seyahat simülasyonu (isteğe bağlı).
- Kamera modunu "takip et" olarak ayarlama (isteğe bağlı).
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;
}];
}
Yer kimlikleri hakkında bilgi edinmek için lütfen Yer Kimlikleri konusuna bakın.
Ulaşım şeklini ayarla
Ulaşım modu, hangi rota türünün getirileceğini ve bu rotanın kullanıcının izlediği yol belirlenir. Bir araba için dört ulaşım modundan birini Rota: araba, bisiklet, yürüyüş ve taksi. Sürüş ve taksi modunda kullanıcının kursu seyahat yönüne göre bisiklet ve yürüyüş modunda. Kursun cihazın baktığı yöne göre gösterilir.
travelMode
ayarını yapın.
özelliğini kullanmanızı öneririz:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Kaçınılacak yolları belirleyin
Kaçınmak için avoidsHighways
ve avoidsTolls
BOOL
özelliklerini kullanın.
otoyollar ve/veya ücretli yollara yer verin.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
PlaceID bulucu
PlaceID Finder'ı kullanabilirsiniz
kullanarak rota hedeflerinde kullanılacak yer kimliklerini bulun. GMSNavigationWaypoint
kullanarak placeID
içinden hedef ekleyin.
Kayan metin
Uygulamanızın herhangi bir yerine kayan metin ekleyebilirsiniz. Bunun için Google dahil değildir. Gezinme SDK'sı bir enlem/boylam veya etiket için metin girilmelidir. Daha fazla bilgi için Bilgi pencereleri başlıklı makaleyi inceleyin.