iOS için Gezinme SDK'sını kullanarak uygulamanız içinde tek bir hedefe rota belirlemek için bu kılavuzdaki talimatları uygulayın.
Genel bakış
- Projenizi oluşturma bölümünde açıklandığı gibi, Gezinme SDK'sını uygulamanıza entegre edin.
GMSMapView
yapılandırın.- Kullanıcıdan şartlar 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
ile hedef ekleyin.- Navigasyonu başlatmak için
isGuidanceActive
değerinitrue
olarak ayarlayın. - Test, hata ayıklama ve uygulamanızı göstermek amacıyla rota boyunca aracın ilerleyişini simüle etmek için
simulateLocationsAlongExistingRoute
aracını kullanın.
Kodu inceleyin
Kullanıcıdan gerekli yetkilendirmeleri isteyin
Kullanıcı, Navigasyon SDK'sını kullanmadan önce şartlar ve koşulları kabul etmeli ve navigasyon için gerekli olan konum hizmetlerinin kullanımını yetkilendirmelidir. Uygulamanız arka planda çalışacaksa kullanıcıdan rehberlik uyarı bildirimlerini yetkilendirmesini de istemelidir. Bu bölümde, gerekli yetkilendirme istemlerinin nasıl görüntüleneceği gösterilmektedir.
Konum hizmetlerini yetkilendirin
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
adlı cihaza ekleyin.Değer için, uygulamanızın neden konum hizmetleri gerektirdiğine dair kısa bir açıklama ekleyin. Örneğin: "Bu uygulama, adım adım navigasyon için konum hizmetlerini kullanmak için izin istiyor."
Yetkilendirme iletişim kutusunu görüntülemek için konum yöneticisi örneğinin
requestAlwaysAuthorization()
yöntemini çağırın.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Arka plan yardımı için uyarı bildirimlerini yetkilendirin
Uygulama arka planda çalışırken uyarı bildirimleri sağlamak için Navigasyon SDK'sının kullanıcı iznine ihtiyacı vardır. Bu bildirimleri görüntülemek üzere kullanıcıdan izin 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 (önceden 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şturun ve rehberliği başlatın
Rota çizmek için, ziyaret edilecek bir veya daha fazla hedef (GMSNavigationWaypoint
) içeren bir diziyle Gezgin'in setDestinations()
yöntemini çağırın. Başarılı bir şekilde hesaplanırsa rota haritada gösterilir. Rota boyunca rehberliği başlatmak için ilk hedeften başlayarak geri aramada isGuidanceActive
özelliğini true
olarak ayarlayın.
Aşağıdaki örnekte gösterilmektedir:
- İki hedefe sahip yeni bir rota oluşturuluyor.
- Rehberlik başlatılıyor.
- Arka plan yardım bildirimleri etkinleştiriliyor.
- Rota boyunca seyahat simülasyonu (isteğe bağlı).
- Kamera modunu "follow" (Takip et) değerine 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 daha fazla bilgi için Yer Kimlikleri başlıklı makaleyi inceleyin.
Ulaşım şeklini ayarla
Ulaşım modu, ne tür rotanın getirileceğini ve kullanıcının rotasının nasıl belirlendiğini belirler. Bir rota için dört ulaşım modundan birini ayarlayabilirsiniz: arabayla, bisikletle, yürüyüş ve taksi. Sürüş ve taksi modunda, kullanıcının rotası seyahat yönüne göre gösterilir. Bisiklet ve yürüyüş modunda ise rota, cihazın baktığı yönle gösterilir.
Harita görünümünün travelMode
özelliğini aşağıdaki örnekte gösterildiği gibi ayarlayın:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Kaçınılacak yolları belirleyin
Bir rota boyunca otoyollardan ve/veya paralı yollardan kaçınmak için avoidsHighways
ve avoidsTolls
BOOL
özelliklerini kullanın.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Yer kimliği bulucu
Rota hedeflerinde kullanılacak yer kimliklerini bulmak için Yer Kimliği Bulucu'yu kullanabilirsiniz.
Kayan metin
Google ilişkilendirmesi geçerli olmadığı sürece uygulamanızın herhangi bir yerine kayan metin ekleyebilirsiniz. Gezinme SDK'sı, metnin haritadaki bir enlem/boylama veya bir etikete bağlanmasını desteklemez. Daha fazla bilgi için Bilgi pencereleri konusuna bakın.