1. शुरू करने से पहले
इस कोडलैब में, आपको एक सामान्य iOS ऐप्लिकेशन बनाने का तरीका बताया गया है. यह ऐप्लिकेशन, Google Maps Platform Navigation SDK का इस्तेमाल करके पहले से कॉन्फ़िगर की गई मंज़िल तक पहुंचने का रास्ता दिखाता है.
सेट अप पूरा होने के बाद, आपका ऐप्लिकेशन कुछ ऐसा दिखेगा.

ज़रूरी शर्तें
- Swift में iOS ऐप्लिकेशन डेवलपमेंट की बुनियादी जानकारी.
- Google Maps SDK के बुनियादी कॉन्सेप्ट के बारे में कुछ जानकारी होनी चाहिए. जैसे, किसी खास जगह के हिसाब से मैप बनाना.
आपको क्या सीखने को मिलेगा
- नेविगेशन एसडीके का इस्तेमाल करके, किसी जगह पर जाने के लिए एक सामान्य iOS Swift ऐप्लिकेशन कैसे बनाया जाता है.
- रिमोट Cocoapods रिपॉज़िटरी से Navigation SDK को इंटिग्रेट करने का तरीका.
- जगह की जानकारी के ऐक्सेस की अनुमतियों और Navigation SDK के असली उपयोगकर्ता की शर्तों के साथ उपयोगकर्ता के कानूनी समझौते को मैनेज करने का तरीका.
- एसडीके टूल को शुरू करने का तरीका.
- मंज़िल सेट करने और नेविगेशन के निर्देश पाने की सुविधा शुरू करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- XCode का नया स्टेबल वर्शन.
- बिलिंग की सुविधा वाला Google खाता और प्रोजेक्ट.
- iOS डिवाइस या XCode Simulator में चल रहा कोई डिवाइस. आपको जो भी विकल्प चुनना है उसके लिए, Navigation SDK टूल की ज़रूरी शर्तें पूरी होनी चाहिए.
2. सेट अप करें
अगर आपके पास Google Cloud Platform खाता और बिलिंग की सुविधा वाला प्रोजेक्ट नहीं है, तो Google Maps Platform का इस्तेमाल शुरू करने से जुड़े निर्देशों का पालन करके, Google Cloud प्रोजेक्ट सेट अप करें.
Console में कोई Google Cloud प्रोजेक्ट चुनना
Cloud Console में, प्रोजेक्ट वाले ड्रॉप-डाउन मेन्यू पर क्लिक करें. इसके बाद, उस प्रोजेक्ट को चुनें जिसे इस कोडलैब के लिए इस्तेमाल करना है.

अपने प्रोजेक्ट में Navigation SDK चालू करना
इस कोडलैब के लिए ज़रूरी Google Maps Platform API और एसडीके को Google Cloud Marketplace में जाकर चालू करें.
Google Cloud Console में, एपीआई और सेवाएं > लाइब्रेरी पर जाएं और "Navigation SDK" खोजें.
आपको खोज का एक नतीजा दिखेगा.

प्रॉडक्ट की ज़्यादा जानकारी वाला पेज खोलने के लिए, Navigation SDK पर क्लिक करें. अपने प्रोजेक्ट पर एसडीके चालू करने के लिए, चालू करें पर क्लिक करें.
iOS के लिए Google Maps SDK के लिए भी यही प्रोसेस दोहराएं.
एपीआई पासकोड बनाना
Cloud Console के क्रेडेंशियल पेज पर जाकर, एक एपीआई पासकोड जनरेट करें. Google Maps Platform का इस्तेमाल करने के लिए, एपीआई पासकोड ज़रूरी है. कंसोल में क्रेडेंशियल पेज पर. पेज पर सबसे ऊपर मौजूद, "+क्रेडेंशियल बनाएं" पर क्लिक करें. इसके बाद, विकल्पों में से "एपीआई पासकोड" चुनें.
प्रोडक्शन के लिए, अपनी एपीआई कुंजी के लिए ऐप्लिकेशन से जुड़ी पाबंदी सेट करना सबसे सही तरीका है. हालांकि, इस कोडलैब के लिए यह ज़रूरी नहीं है.
3. सैंपल प्रोजेक्ट की फ़ाइलें पाना
इस सेक्शन में, इस कोडलैब के लिए GitHub रिपॉज़िटरी से फ़ाइलें क्लोन करके, बुनियादी तौर पर खाली XCode ऐप्लिकेशन प्रोजेक्ट सेट अप करने का तरीका बताया गया है. Github के रेपो में, कोडलैब के कोड के पहले और बाद के वर्शन मौजूद हैं. यह कोडलैब, खाली प्रोजेक्ट टेंप्लेट से शुरू होगा और आखिर में पूरा हो जाएगा. अगर आपको कोई समस्या आती है, तो repo में मौजूद पूरे प्रोजेक्ट का इस्तेमाल रेफ़रंस के तौर पर किया जा सकता है.
रेपो को क्लोन करना या कोड डाउनलोड करना
उस डायरेक्ट्री पर जाएं जहां आपको कोडलैब सेव करना है.
इसके बाद, रेपो को क्लोन करें या कोड डाउनलोड करें:
git clone https://github.com/googlemaps-samples/codelab-navigation-101-ios-swift
अगर आपके पास git इंस्टॉल नहीं है, तो कोड पाने के लिए इस बटन पर क्लिक करें:
इस कोडलैब को आसानी से समझने के लिए, repo में Starter फ़ोल्डर में कुछ स्टार्टर कोड दिया गया है. अगर आपको आगे बढ़ना है या किसी भी समय अपनी प्रोग्रेस देखनी है, तो यहां एक पूरा किया गया Solution प्रोजेक्ट भी दिया गया है. सॉल्यूशन प्रोजेक्ट का इस्तेमाल करने के लिए, आपको नीचे दिए गए "Cocoapods का इस्तेमाल करके इंस्टॉल करें" निर्देशों का पालन करना होगा. इसके बाद, solution/Navigation SDK Codelab फ़ोल्डर से "pod update" कमांड चलाएं.
रेपो को स्थानीय तौर पर क्लोन करने के बाद, XCode का इस्तेमाल करके Starter फ़ोल्डर को मौजूदा प्रोजेक्ट के तौर पर खोलें. देखें कि प्रोजेक्ट बन रहा हो और चल रहा हो.
किसी डिवाइस को कनेक्ट करना या XCode Simulator सेट अप करना
4. अपने ऐप्लिकेशन में Navigation SDK जोड़ना
Navigation SDK को XCode प्रोजेक्ट में इंटिग्रेट करने के तीन तरीके हैं:इस कोडलैब में CocoaPods का इस्तेमाल किया गया है. Swift Package Manager का इस्तेमाल करके इंटिग्रेट करने या एसडीके डाउनलोड करके मैन्युअल तरीके से इंस्टॉल करने के बारे में ज़्यादा जानने के लिए, Navigation SDK के दस्तावेज़ में Xcode प्रोजेक्ट बनाना और Navigation SDK इंस्टॉल करना लेख पढ़ें.
Cocoapods का इस्तेमाल करके इंस्टॉल करना
अगर आपके पास पहले से CocoaPods टूल नहीं है, तो इसे macOS पर इंस्टॉल करें. इसके लिए, टर्मिनल में यह कमांड चलाएं. ज़्यादा जानकारी के लिए, CocoaPods का इस्तेमाल शुरू करने से जुड़े निर्देश देखें.
sudo gem install cocoapods
अपने प्रोजेक्ट फ़ोल्डर में, Podfile नाम की एक नई फ़ाइल बनाएं. यह फ़ाइल, starter/Navigation SDK Codelab फ़ोल्डर में होनी चाहिए. XCode में, File > New > File > Other > Empty पर जाएं और इसे "Podfile" के तौर पर सेव करें
अपने Podfile में यह कॉन्टेंट जोड़ें:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '15.0'
target 'Navigation SDK Codelab' do
pod 'GoogleNavigation', '9.1.1'
end
Podfile की बचत करें.
टर्मिनल खोलें और डायरेक्ट्री को उस जगह पर बदलें जहां आपने Podfile सेव किया है. यह कोडलैब रेपो में "starter/Navigation SDK Codelab" फ़ोल्डर होना चाहिए
cd "<path-to-starter-project-folder>/Navigation SDK Codelab"
pod install कमांड चलाएं. इससे Podfile में बताए गए एपीआई और उनसे जुड़ी सभी डिपेंडेंसी इंस्टॉल हो जाती हैं
pod install
Xcode को बंद करें. इसके बाद, Xcode लॉन्च करने के लिए अपने प्रोजेक्ट की .xcworkspace फ़ाइल खोलें. इसके बाद से, प्रोजेक्ट खोलने के लिए आपको .xcworkspace फ़ाइल का इस्तेमाल करना होगा.
जांच करें कि प्रोजेक्ट स्ट्रक्चर में Pods डायरेक्ट्री जोड़ी गई हो. साथ ही, उसमें "GoogleMaps" और "GoogleNavigation" Pods मौजूद हों.

अपना एपीआई पासकोड जोड़ना
अपनी एपीआई कुंजी को AppDelegate.swift में इस तरह जोड़ें:
- ये इंपोर्ट स्टेटमेंट जोड़ें:
import GoogleMaps
import GoogleNavigation
- अपने
application(_:didFinishLaunchingWithOptions:)तरीके में यह जानकारी जोड़ें:
GMSServices.provideAPIKey("YOUR_API_KEY")
"YOUR_API_KEY" को उस एपीआई पासकोड से बदलें जिसे आपने पिछले चरण में बनाया था.
अपना प्रोजेक्ट बनाएं और उसमें मौजूद गड़बड़ियों को ठीक करें.
5. ऐप्लिकेशन की अनुमतियां कॉन्फ़िगर करना
Navigation SDK, सड़क के हिसाब से जगह की जानकारी और मोड़-दर-मोड़ निर्देश देने के लिए, जीपीएस सिग्नल पर निर्भर करता है. इसलिए, आपके ऐप्लिकेशन को उपयोगकर्ता से जगह की सटीक जानकारी के डेटा का ऐक्सेस देने के लिए कहना होगा.
इसके लिए, आपको Xcode में अपने ऐप्लिकेशन की Info.plist फ़ाइल में कुछ प्रॉपर्टी जोड़नी होंगी. साथ ही, अपने ऐप्लिकेशन में कुछ कोड जोड़ना होगा, ताकि रनटाइम के दौरान उपयोगकर्ता से अनुमति का अनुरोध किया जा सके. इसके अलावा, आपको किसी भी गड़बड़ी को ठीक करना होगा. जैसे, अनुमति न मिलना या जगह की जानकारी उपलब्ध न होना.
Xcode में Info.plist खोलें. यह कुछ ऐसा नज़र आना चाहिए.

जगह की सटीक जानकारी ऐक्सेस करने की अनुमति का अनुरोध करना
नई वैल्यू जोड़ने के लिए, "Information Property List" लाइन पर तब तक कर्सर घुमाएं, जब तक आपको "+" आइकॉन न दिख जाए. सुझाई गई प्रॉपर्टी के नाम वाला डायलॉग देखने के लिए, "+" पर क्लिक करें. हालांकि, ध्यान दें कि प्रॉपर्टी को मैन्युअल तरीके से भी जोड़ा जा सकता है.
Info.plist में ये प्रॉपर्टी और वैल्यू जोड़ें:
प्रॉपर्टी | वैल्यू |
निजता - जगह की जानकारी हमेशा और इस्तेमाल के दौरान ऐक्सेस करने की अनुमति के इस्तेमाल का ब्यौरा | "इस ऐप्लिकेशन को आपके डिवाइस की जगह की जानकारी चाहिए, ताकि आपको मोड़-दर-मोड़ नेविगेशन की सुविधा दी जा सके" |
निजता - इस्तेमाल के दौरान जगह की जानकारी के इस्तेमाल का ब्यौरा | "इस ऐप्लिकेशन को आपके डिवाइस की जगह की जानकारी चाहिए, ताकि आपको मोड़-दर-मोड़ नेविगेशन की सुविधा दी जा सके" |
allowsBackgroundLocationUpdates | हां |
बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति का अनुरोध करना
Info.plist में ये प्रॉपर्टी और वैल्यू जोड़ें:
UIBackgroundModes > लाइन जोड़ें > Item 0: App registers for location updates (सुझावों की ड्रॉप-डाउन सूची से यह वैल्यू चुनें)
जब आपने यह काम पूरा कर लिया हो, तब Info.plist फ़ाइल कुछ ऐसी दिखनी चाहिए.

रनटाइम के दौरान जगह की जानकारी का ऐक्सेस पाने का अनुरोध करना
ViewController.swift में ये इंपोर्ट स्टेटमेंट जोड़ें:
import GoogleNavigation
अपनी ViewController क्लास में यह एलान जोड़ें:
var locationManager: CLLocationManager!
loadView() के लिए, मेथड ओवरराइड जोड़ें और locationManager.requestAlwaysAuthorization() को कॉल करें:
override func loadView() {
locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
अब आपका ऐप्लिकेशन, उपयोगकर्ता से जगह की जानकारी का अनुरोध करेगा. अगर उपयोगकर्ता अनुमति देता है, तो यह जानकारी आपके ऐप्लिकेशन के लिए उपलब्ध होगी.
सूचनाएं दिखाने की अनुमति का अनुरोध करना
सूचनाएं दिखाने के लिए उपयोगकर्ता से अनुमति का अनुरोध करने के लिए, loadView() में यह कोड जोड़ें. नेविगेशन के दौरान दिशा-निर्देश दिखाने के लिए, यह अनुमति ज़रूरी होगी.
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.")
}
}
ऐप्लिकेशन बनाएं और उसे चलाएं. साथ ही, यह देखें कि आपको जगह की जानकारी शेयर करने और सूचनाएं पाने की सुविधा चालू करने के लिए कहा गया हो.

6. नेविगेशन के लिए उपयोगकर्ता इंटरफ़ेस जोड़ना
इस चरण में, आपको एक मैप जोड़ना होगा. साथ ही, उसे किसी जगह की जानकारी दिखाने के लिए कॉन्फ़िगर करना होगा. इसके बाद, उपयोगकर्ता को Navigation SDK के इस्तेमाल की शर्तों वाला डायलॉग दिखाएं.
अपने ऐप्लिकेशन में मैप व्यू जोड़ना
अपने ViewController में GMSMapView वैरिएबल का एलान करने के लिए, यह लाइन जोड़ें.
var mapView: GMSMapView!
मैप को शुरू करने के लिए, अपने Viewcontroller.swift में मौजूद loadView() में यह कोड जोड़ें.
let camera = GMSCameraPosition.camera(withLatitude: 51.483174, longitude: -0.177369, zoom: 14)
let options = GMSMapViewOptions()
options.camera = camera
options.frame = .zero
mapView = GMSMapView(options: options)
view = mapView
अपना ऐप्लिकेशन बनाएं और उसे चलाएं. आपको दक्षिण-पश्चिम लंदन के बीच में एक मैप दिखेगा.

Navigation SDK के इस्तेमाल से जुड़ी शर्तों का डायलॉग दिखाएं
पिछले कोड की तरह ही, ViewController.swift में यह कोड जोड़ें.loadView() इससे, Navigation SDK के असली उपयोगकर्ता के लिए इस्तेमाल की शर्तें दिखेंगी. अगर इसे स्वीकार नहीं किया जाता है, तो नेविगेशन की सुविधा चालू नहीं होगी.
// Show the terms and conditions.
let companyName = "Navigation SDK Codelab"
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(withCompanyName: companyName) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
} else {
// Handle the case when the user rejects the terms and conditions.
}
}
डायलॉग देखने के लिए, ऐप्लिकेशन बनाएं और उसे चलाएं.

7. मुख्य नेविगेशन इवेंट के लिए लिसनर जोड़ना
इस चरण में, आपको मुख्य इवेंट के लिए लिसनर सेट अप करने का तरीका बताया जाएगा. जैसे, किसी जगह पर पहुंचना या ड्राइवर का रास्ता बदलना.
इन इवेंट को सुनने के लिए, आपके व्यू कंट्रोलर को GMSNavigatorListener प्रोटोकॉल अपनाना होगा.
इस प्रोटोकॉल को ViewController.swift में क्लास की डेफ़िनिशन में जोड़ें.
class ViewController: UIViewController,
GMSNavigatorListener {
अब loadView(): में लिसनर सेट अप करने के लिए, कोड की एक लाइन जोड़ें
// Add a listener for GMSNavigator.
mapView.navigator?.add(self)
आखिर में, इवेंट को मैनेज करने के लिए अपनी क्लास में दो तरीके जोड़ें.
// Listener to handle arrival events.
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) {
print("You have arrived at: \(waypoint.title)")
}
// Listener for route change events.
func navigatorDidChangeRoute(_ navigator: GMSNavigator) {
print("The route has changed.")
}
8. मंज़िल सेट करना और निर्देश पाना
इस सेक्शन में, आपको मंज़िल सेट करने और नेविगेशन की सुविधा शुरू करने का तरीका बताया जाएगा.
नेविगेशन लॉजिक के लिए एक नया फ़ंक्शन बनाएं.
सबसे पहले, अपने ViewController में startNav() नाम का एक नया फ़ंक्शन जोड़ें. इसमें मंज़िल सेट करने और नेविगेट करना शुरू करने का लॉजिक शामिल होगा.
// Create a route and start guidance.
@objc func startNav() {
}
Waypoint के लिए डेस्टिनेशन बनाएं.
इसके बाद, एक ही वेपॉइंट वाले डेस्टिनेशन का एक ऐरे बनाएं.
// Create a route and start guidance.
@objc func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(
GMSNavigationWaypoint.init(
placeID: "ChIJH-tBOc4EdkgRJ8aJ8P1CUxo",
title: "Trafalgar Square")!)
}
setDestinations()कॉल करें और जवाब मैनेज करें.
इसके बाद, setDestinations को कॉल करें और वापस किए गए GMSRouteStatus को मैनेज करें.
अगर GMSRouteStatus "OK" है, तो mapView के navigator ऑब्जेक्ट पर isGuidanceActive=true सेट करके, गाइडेंस शुरू करें. ऐसा न होने पर, एक स्टेटमेंट प्रिंट करें, ताकि यह पता चल सके कि कोई गड़बड़ी हुई है.
अगर GMSRouteStatus की वैल्यू "OK" है, तो mapView.locationSimulator.simulateLocationsAlongExistingRoute() को कॉल करके, रूट पर ड्राइविंग की सिम्युलेशन शुरू करें.
// Create a route and start guidance.
@objc func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(
GMSNavigationWaypoint.init(
placeID: "ChIJH-tBOc4EdkgRJ8aJ8P1CUxo",
title: "Trafalgar Square")!)
mapView.navigator?.setDestinations(
destinations
) { routeStatus in
guard routeStatus == .OK else {
print("Handle route statuses that are not OK.")
return
}
//If routeStatus is OK, start guidance.
self.mapView.navigator?.isGuidanceActive = true
//start simulating driving along the route. self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
गड़बड़ी के सामान्य स्टेटस मैनेज करना
GMSRouteStatus गड़बड़ियों को ज़्यादा साफ़ तौर पर मैनेज करना फ़ायदेमंद होता है. खास तौर पर, जब नए ऐप्लिकेशन से जुड़ी शुरुआती समस्याओं को डीबग किया जा रहा हो. उदाहरण के लिए, आपको डीबग सेटअप की वजह से, जगह की जानकारी ऐक्सेस करने की अनुमति, एपीआई पासकोड या "कोई रास्ता नहीं मिला" गड़बड़ियां ज़्यादा बार मिल सकती हैं. इसलिए, इन गड़बड़ियों को मैनेज करना फ़ायदेमंद हो सकता है.
ऐसा कोड जोड़ें जो इन खास मामलों को हैंडल करे और कंसोल में स्टेटमेंट प्रिंट करे.
mapView.navigator?.setDestinations(
destinations
) { routeStatus in
guard routeStatus == .OK else {
print("Handle route statuses that are not OK.")
switch routeStatus {
case .locationUnavailable:
print("Location unavailable.") //check permissions
case .noRouteFound:
print("No route found.") //check start location and destination
case .waypointError:
print("Waypoint error") //check Place ID
default:
print("Not sure what happened")
}
return
}
नेविगेशन की सुविधा शुरू करने के लिए बटन जोड़ना
आखिर में, यूज़र इंटरफ़ेस (यूआई) में एक बटन जोड़ें और उसे startNav तरीके से कनेक्ट करें. नीचे दिए गए कोड का इस्तेमाल करके, makeButton() नाम की एक नई विधि बनाएं. loadView() से makeButton() फ़ंक्शन को कॉल करें.
// Add a button to the view.
func makeButton() {
// A button to start navigation.
let navButton = UIButton(frame: CGRect(x: 5, y: 150, width: 200, height: 35))
navButton.backgroundColor = .blue
navButton.alpha = 0.5
navButton.setTitle("Start navigation", for: .normal)
navButton.addTarget(self, action: #selector(startNav), for: .touchUpInside)
self.mapView.addSubview(navButton)
}
अपना ऐप्लिकेशन बनाएं और उसे चलाएं.
ध्यान दें:
startNav()
को कॉल करेगा
setDestinations()
इस तरीके में, 1,000 डेस्टिनेशन इस्तेमाल करने के बाद शुल्क लगता है. ज़्यादा जानकारी के लिए, इस्तेमाल और बिलिंग देखें.
9. बधाई हो!
बहुत बढ़िया - आप अपनी मंज़िल पर पहुंच गए हैं!

आपने एक सामान्य ऐप्लिकेशन बनाया है. यह ऐप्लिकेशन, Google Maps Platform Navigation SDK का इस्तेमाल करके किसी जगह पर पहुंचने के लिए, रास्ते की मोड़-दर-मोड़ जानकारी देता है.
आपने ऐप्लिकेशन की अनुमतियां और Navigation SDK के असली उपयोगकर्ता के लिए बने नियमों का डायलॉग कॉन्फ़िगर किया हो. साथ ही, आपने जगह के आईडी का इस्तेमाल करके मंज़िल तय की हो. आपने अपने ऐप्लिकेशन में, सफलता और गड़बड़ी की अलग-अलग स्थितियों को मैनेज किया है.
10. आगे की कार्रवाई
अगर आपको ऐप्लिकेशन डेवलपमेंट को आगे बढ़ाना है, तो प्रेरणा पाने के लिए इन विषयों पर एक नज़र डालें.
- नेविगेशन से जुड़े ज़्यादा इवेंट के लिए सुनें. अगर तय की गई दूरी या समय सीमा से ज़्यादा समय या दूरी तय की जाती है, तो मैसेज दिखाने के लिए कोड जोड़ें.
- नेविगेशन इंटरफ़ेस को पसंद के मुताबिक बनाएं.
- अगर आपको कोई बड़ी चुनौती चाहिए, तो देखें कि क्या Places API के प्लेस पिकर को जोड़ा जा सकता है, ताकि उपयोगकर्ता डेस्टिनेशन सेट कर सके. अहम जानकारी: Navigation SDK के डेमो ऐप्लिकेशन में, सैंपल के तौर पर लागू करने का तरीका दिया गया है. कोड देखने के लिए, अपने प्रोजेक्ट फ़ोल्डर में
pod try GoogleNavigationचलाएं.