Rotayı izleme

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ış

  1. Gezinme SDK'sını Projenizi ayarlama bölümünde açıklandığı şekilde uygulamanıza entegre edin.
  2. Bir GMSMapView yapılandırın.
  3. Kullanıcıdan hükümler ve koşulları kabul etmesini ve konum hizmetlerini ve arka plan bildirimlerini yetkilendirmesini isteyin.
  4. Bir veya daha fazla hedef içeren bir dizi oluşturun.
  5. Adım adım navigasyonu kontrol etmek için bir GMSNavigator tanımlayı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:

  1. NSLocationAlwaysUsageDescription anahtarını Info.plist öğesine ekleyin.
  2. 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."

  3. 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.