Rotayı izleme

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

  1. Projenizi oluşturma bölümünde açıklandığı gibi, Gezinme SDK'sını uygulamanıza entegre edin.
  2. GMSMapView yapılandırın.
  3. Kullanıcıdan şartlar 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 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:

  1. NSLocationAlwaysUsageDescription anahtarını Info.plist adlı cihaza ekleyin.
  2. 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."

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