किसी रास्ते पर नेविगेट करें

iOS के लिए Navigation SDK टूल का इस्तेमाल करके, अपने ऐप्लिकेशन में किसी एक डेस्टिनेशन के लिए रास्ता तय करने के लिए, इस गाइड को पढ़ें.

खास जानकारी

  1. Navigation SDK को अपने ऐप्लिकेशन में इंटिग्रेट करें. इसके लिए, अपना प्रोजेक्ट सेट अप करें सेक्शन में बताया गया तरीका अपनाएं.
  2. GMSMapView को कॉन्फ़िगर करें.
  3. उपयोगकर्ता को नियम और शर्तें स्वीकार करने के लिए कहें. साथ ही, जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाओं और बैकग्राउंड में सूचनाएं पाने की अनुमति देने के लिए कहें.
  4. एक या उससे ज़्यादा डेस्टिनेशन वाला कलेक्शन बनाएं.
  5. रास्ते के दिशा-निर्देशों को कंट्रोल करने के लिए, GMSNavigator तय करें.

    • setDestinations का इस्तेमाल करके डेस्टिनेशन जोड़ें.
    • नेविगेशन शुरू करने के लिए, isGuidanceActive को true पर सेट करें.
    • अपने ऐप्लिकेशन की जांच करने, डीबग करने, और उसे दिखाने के लिए, रास्ते पर वाहन की प्रोग्रेस को सिम्युलेट करने के लिए, simulateLocationsAlongExistingRoute का इस्तेमाल करें.

कोड देखें

उपयोगकर्ता से ज़रूरी अनुमतियां मांगें

नेविगेशन एसडीके का इस्तेमाल करने से पहले, उपयोगकर्ता को नियमों और शर्तों से सहमत होना होगा. साथ ही, जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाओं के इस्तेमाल की अनुमति देनी होगी. नेविगेशन के लिए यह ज़रूरी है. अगर आपका ऐप्लिकेशन बैकग्राउंड में चलेगा, तो उसे उपयोगकर्ता को गाइडेंस अलर्ट की सूचनाएं पाने की अनुमति देने के लिए भी कहना होगा. इस सेक्शन में बताया गया है कि अनुमति के लिए ज़रूरी प्रॉम्प्ट कैसे दिखाए जाते हैं.

जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवा को अनुमति देना

Navigation SDK, जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाओं का इस्तेमाल करता है. इसके लिए, उपयोगकर्ता की अनुमति ज़रूरी है. जगह की जानकारी की सुविधा चालू करने और अनुमति देने वाला डायलॉग बॉक्स दिखाने के लिए, यह तरीका अपनाएं:

  1. Xcode में, जगह की जानकारी और बैकग्राउंड की सुविधाओं को चालू करें:

    1. Xcode में अपना टारगेट खोलें और Signing & Capabilities टैब चुनें. ज़्यादा जानकारी के लिए, अपने ऐप्लिकेशन में सुविधाएं जोड़ने के बारे में Apple की गाइड देखें.
    2. जगह की जानकारी (हमेशा) और जगह की जानकारी (इस्तेमाल के दौरान) की सुविधाएं जोड़ें. हर टेक्स्ट फ़ील्ड में, कम शब्दों में बताएं कि आपके ऐप्लिकेशन को जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाओं की ज़रूरत क्यों है. उदाहरण के लिए: "इस ऐप्लिकेशन को रास्ते के दिशा-निर्देश देने के लिए, जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाओं की अनुमति चाहिए."
    3. बैकग्राउंड मोड की सुविधा जोड़ें. इसके बाद, जगह की जानकारी के अपडेट चेकबॉक्स को चुनें. इस सुविधा के बिना, नेविगेशन शुरू करने पर ऐप्लिकेशन क्रैश हो जाता है. ज़्यादा जानकारी के लिए, बैकग्राउंड में डिवाइस की जगह की जानकारी का अपडेट मैनेज करने के बारे में Apple की गाइड देखें.
  2. अनुमति वाला डायलॉग बॉक्स दिखाने के लिए, लोकेशन मैनेजर इंस्टेंस के requestAlwaysAuthorization() तरीके को कॉल करें.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

जगह की जानकारी की सेवा को अनुमति देने के लिए, Apple का पूरा दस्तावेज़ देखें.

बैकग्राउंड में निर्देश पाने के लिए, सूचनाओं की अनुमति दें

जब ऐप्लिकेशन बैकग्राउंड में चल रहा हो, तब चेतावनी वाली सूचनाएं देने के लिए, Navigation SDK को उपयोगकर्ता की अनुमति की ज़रूरत होती है. उपयोगकर्ता को ये सूचनाएं दिखाने की अनुमति मांगने के लिए, यह कोड जोड़ें:

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");
     }
   }];

मोशन सेंसर इस्तेमाल करने की अनुमति दें

आने वाले समय में, iOS के लिए Navigation SDK टूल के मुख्य वर्शन में, जगह की जानकारी के डेटा को डिवाइस के मोशन सेंसर (CMAltimeter) के साथ जोड़ा जाएगा. इससे रास्ते की ऊंचाई का हिसाब लगाया जा सकेगा. जब SDK टूल, अल्टीमीटर को ऐक्सेस करता है, तो iOS इस स्ट्रिंग का इस्तेमाल करके, उपयोगकर्ता से अनुमति मांगता है.

इस कुंजी को जोड़ने से, मौजूदा व्यवहार पर कोई असर नहीं पड़ता. हालांकि, बाद में SDK टूल को अपग्रेड करने पर, यह कुंजी उसे शुरू होने के दौरान क्रैश होने से रोकती है.

SDK टूल के आने वाले अपग्रेड के लिए, मोशन सेंसर की अनुमतियों को इस तरह कॉन्फ़िगर करें:

  1. Xcode में अपना टारगेट खोलें और जानकारी टैब पर जाएं या अपनी Info.plist फ़ाइल खोलें.

  2. एक नई कुंजी जोड़ें: Privacy - Motion Usage Description (NSMotionUsageDescription).

  3. उपयोगकर्ता के लिए कम शब्दों में जानकारी जोड़ें. उदाहरण के लिए: "ऊंचाई का हिसाब लगाने और मैप रूटिंग को ज़्यादा सटीक बनाने के लिए, इस ऐप्लिकेशन को मोशन सेंसर के ऐक्सेस की ज़रूरत है."

नियम और शर्तें स्वीकार करें

नियमों और शर्तों वाला डायलॉग बॉक्स दिखाने के लिए, यहां दिया गया कोड इस्तेमाल करें. साथ ही, उपयोगकर्ता के शर्तें स्वीकार करने पर, नेविगेशन की सुविधा चालू करें. ध्यान दें कि इस उदाहरण में, जगह की जानकारी की सेवाओं और दिशा-निर्देशों से जुड़ी सूचनाओं का कोड शामिल है. यह कोड पहले दिखाया गया है.

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.
   }
 }];

कोई रास्ता बनाना और निर्देश पाना शुरू करना

कोई रास्ता तय करने के लिए, नेविगेटर के setDestinations तरीके को कॉल करें. इसके लिए, एक या उससे ज़्यादा GMSNavigationWaypoint डेस्टिनेशन का कलेक्शन इस्तेमाल करें. अगर रास्ता सही तरीके से कैलकुलेट हो जाता है, तो वह मैप पर दिखता है. रास्ते पर निर्देश पाने के लिए, कॉलबैक में isGuidanceActive को true पर सेट करें.

यहां दिए गए उदाहरण में यह दिखाया गया है:

  • एक डेस्टिनेशन वाला नया रास्ता बनाना.
  • निर्देश देना शुरू किया जा रहा है.
  • बैकग्राउंड में गाइडेंस की सूचनाएं पाने की सुविधा चालू करना.
  • रास्ते के हिसाब से यात्रा को सिम्युलेट करना (ज़रूरी नहीं).
  • कैमरा मोड को "फ़ॉलो" पर सेट करना (ज़रूरी नहीं).

Swift

func startNav() {
  var destinations = [GMSNavigationWaypoint]()
  destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
                                                 title: "PCC Natural Market")!)

  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"]];

  [_mapView.navigator setDestinations:destinations
                             callback:^(GMSRouteStatus routeStatus){
                               [_mapView.locationSimulator simulateLocationsAlongExistingRoute];
                               _mapView.navigator.guidanceActive = YES;
                               _mapView.cameraMode = GMSNavigationCameraModeFollowing;
                             }];
}

जगह के आईडी के बारे में जानने के लिए, जगह के आईडी पर जाएं.

एक से ज़्यादा स्टॉप वाली स्थितियां

ज़्यादा से ज़्यादा 25 वेपॉइंट कॉन्फ़िगर किए जा सकते हैं.

Navigation SDK, अपने-आप अगली मंज़िल पर नहीं जाता. जब वाहन किसी वेपॉइंट पर पहुंच जाए, तब यात्रा का अगला चरण शुरू करने के लिए, continueToNextDestinationWithCompletion: को कॉल करें. यह उन रूट टोकन पर भी लागू होता है जिनमें इंटरमीडिएट वेपॉइंट होते हैं. अगली मंज़िल पर जाने के लिए, Navigation SDK आपके रूट टोकन से मिले रास्ते को फ़ॉलो करता है. यह कोई नया रास्ता नहीं बनाता.

यात्रा का मोड सेट करना

यात्रा के मोड से यह तय होता है कि किस तरह का रास्ता फ़ेच करना है और उपयोगकर्ता के रास्ते का पता कैसे लगाना है. किसी रास्ते के लिए, यात्रा के चार मोड में से कोई एक सेट किया जा सकता है: ड्राइविंग, साइकल चलाना, पैदल चलना, और टैक्सी. ड्राइविंग और टैक्सी मोड में, उपयोगकर्ता का कोर्स यात्रा की दिशा पर आधारित होता है. साइकल चलाने और पैदल चलने के मोड में, कोर्स को उस दिशा से दिखाया जाता है जिस दिशा में डिवाइस का मुंह होता है. लैंडस्केप मोड में, डिवाइस के सबसे ऊपर की ओर.

मैप व्यू की travelMode प्रॉपर्टी सेट करें, जैसा कि इस उदाहरण में दिखाया गया है:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

रास्ते में आने वाली सड़कों को अनदेखा करने के लिए सेट करना

किसी रास्ते पर हाइवे, टोल रोड या दोनों से बचने के लिए, avoidsHighways और avoidsTolls BOOL प्रॉपर्टी का इस्तेमाल करें.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

बोलकर दिए जाने वाले निर्देशों की आवाज़ सेट करना

आवाज़ से रास्ता बताने की सुविधा की आवाज़ को अडजस्ट करने के लिए, नेविगेटर पर volumeLevel प्रॉपर्टी को कम, सामान्य या ज़्यादा पर सेट करें. नेविगेटर, आवाज़ के आखिरी बार सेट किए गए लेवल का इस्तेमाल करता है या डिफ़ॉल्ट रूप से सामान्य लेवल पर सेट रहता है.

Swift

self.mapView.navigator?.volumeLevel = .low

Objective-C

_mapView.navigator.volumeLevel = GMSNavigationVolumeLevelLow;

PlaceID finder

प्लेस आईडी फ़ाइंडर का इस्तेमाल करके, जगह के आईडी ढूंढे जा सकते हैं. इनका इस्तेमाल, रास्ते के डेस्टिनेशन के लिए किया जा सकता है. GMSNavigationWaypoint की मदद से, placeID से कोई डेस्टिनेशन जोड़ें.

फ़्लोटिंग टेक्स्ट

अपने ऐप्लिकेशन में कहीं भी फ़्लोटिंग टेक्स्ट जोड़ा जा सकता है. हालांकि, यह ध्यान रखें कि Google एट्रिब्यूशन को कवर न किया गया हो. Navigation SDK, मैप पर मौजूद किसी खास निर्देशांक (अक्षांश, देशांतर) या लेबल पर टेक्स्ट को ऐंकर करने की सुविधा नहीं देता. ज़्यादा जानकारी के लिए, जानकारी विंडो देखें.