iOS için Navigasyon SDK'sını kullanarak uygulamanızda tek bir hedefe giden bir rota çizmek için bu rehberdeki adımları uygulayın.
Genel bakış
- Gezinme SDK'sını Projenizi ayarlama bölümünde açıklandığı şekilde uygulamanıza entegre edin.
- Bir
GMSMapView
yapılandırın. - Kullanıcıdan hükümler ve koşulları kabul etmesini ve konum hizmetlerini ve arka plan bildirimlerini yetkilendirmesini isteyin.
- Bir veya daha fazla hedef içeren bir dizi oluşturun.
Adım adım navigasyonu kontrol etmek için bir
GMSNavigator
tanımlayın.setDestinations
kullanarak hedef ekleyin.- Navigasyonu başlatmak için
isGuidanceActive
değerinitrue
olarak ayarlayın. - Uygulamanızı test etmek, hata ayıklamak ve göstermek amacıyla rota boyunca aracın ilerlemesini simüle etmek için
simulateLocationsAlongExistingRoute
aracını kullanın.
Kodu göster
Kullanıcıdan gerekli yetkilendirmeleri isteyin
Gezinme SDK'sını kullanmadan önce, kullanıcı şartlar ve koşulları kabul etmeli ve navigasyon için gerekli olan konum hizmetlerinin kullanımına yetki vermelidir. Uygulamanız arka planda çalışacaksa kullanıcıdan yardım uyarısı bildirimlerini yetkilendirmesi de istenmelidir. Bu bölümde, gerekli yetkilendirme istemlerinin nasıl gösterileceği gösterilmektedir.
Konum hizmetlerini yetkilendirme
Gezinme SDK'sı, kullanıcı yetkilendirmesi gerektiren konum hizmetlerini kullanır. Konum hizmetlerini etkinleştirmek ve yetkilendirme iletişim kutusunu görüntülemek için şu adımları uygulayın:
NSLocationAlwaysUsageDescription
anahtarınıInfo.plist
öğesine ekleyin.Değer için, uygulamanızın neden konum hizmetleri gerektirdiğine dair kısa bir açıklama ekleyin. Örneğin: "Bu uygulamanın, adım adım navigasyon için konum hizmetlerini kullanabilmesi için izin gerekiyor."
Yetkilendirme iletişim kutusunu görüntülemek için konum yöneticisi örneğinin
requestAlwaysAuthorization()
öğesini çağırın.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Arka planda yardım almak için uyarı bildirimlerini yetkilendirin
Gezinme SDK'sının, uygulama arka planda çalışırken uyarı bildirimleri sunabilmek için kullanıcı iznine ihtiyacı vardır. Kullanıcıdan bu bildirimleri görüntüleme izni istemek için aşağıdaki kodu ekleyin:
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
Şartlar ve koşullar iletişim kutusunu göstermek ve kullanıcı şartları kabul ettiğinde gezinmeyi etkinleştirmek için aşağıdaki kodu kullanın. Bu örneğin, konum hizmetleri ve yardım uyarısı bildirimleri (daha önce gösterilmiştir) kodunu içerdiğini unutmayın.
Swift
let companyName = "Ride Sharing Co."
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
withCompanyName: companyName) { 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
NSString *companyName = @"Ride Sharing Co.";
[GMSNavigationServices
showTermsAndConditionsDialogIfNeededWithCompanyName:companyName
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 belirlemek için ziyaret edilecek bir veya daha fazla hedef (GMSNavigationWaypoint
) içeren bir diziyle Navigator'ın setDestinations()
yöntemini çağırın. Başarıyla hesaplandığında rota haritada gösterilir. Rota boyunca rehberliği başlatmak için ilk hedefle başlayarak geri çağırmada isGuidanceActive
değerini true
olarak ayarlayın.
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 ayarlamak (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 kullanıcının rotasının belirlenme şeklini belirler. Rota için dört ulaşım modundan birini ayarlayabilirsiniz: araba, bisiklet, yürüyüş ve taksi. Sürüş ve taksi modunda kullanıcının rotası seyahat yönüne bağlıdır. Bisiklet ve yürüyüş modunda rota, cihazın baktığı yöne göre gösterilir.
Aşağıdaki örnekte gösterildiği gibi, harita görünümünün travelMode
özelliğini ayarlayın:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Kaçınılacak yolları belirleyin
Rota üzerindeki otoyollardan ve/veya ücretli yollardan kaçınmak için avoidsHighways
ve avoidsTolls
BOOL
özelliklerini kullanın.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
PlaceID bulucu
Rota hedefleri için kullanılacak yer kimliklerini bulmak için PlaceID Finder'dan yararlanabilirsiniz. GMSNavigationWaypoint
kullanarak placeID
içinden hedef ekleyin.
Kayan metin
Google ilişkilendirmesinin kapsamı dışında olduğu sürece uygulamanızın herhangi bir yerine kayan metin ekleyebilirsiniz. Gezinme SDK'sı, metnin haritadaki bir enlem/boylama veya etikete bağlanmasını desteklemez. Daha fazla bilgi için Bilgi pencereleri bölümüne bakın.