Google Maps Platform नेविगेशन SDK टूल की मदद से, Swift में एक आसान iOS नेविगेशन ऐप्लिकेशन बनाएं
इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. शुरू करने से पहले
इस कोडलैब में, आपको एक ऐसा आसान iOS ऐप्लिकेशन बनाने का तरीका बताया गया है जो पहले से कॉन्फ़िगर की गई मंज़िल पर नेविगेट करने के लिए, Google Maps Platform के नेविगेशन SDK टूल का इस्तेमाल करता है.
प्रोसेस पूरी होने के बाद, आपका ऐप्लिकेशन कुछ ऐसा दिखेगा.
ज़रूरी शर्तें
- Swift में iOS ऐप्लिकेशन डेवलप करने की बुनियादी जानकारी.
- Google Maps SDK टूल के बुनियादी कॉन्सेप्ट के बारे में कुछ जानकारी होनी चाहिए. जैसे, किसी खास जगह के आस-पास का मैप बनाना.
आपको इनके बारे में जानकारी मिलेगी
- किसी डेस्टिनेशन पर नेविगेट करने के लिए, Navigation SDK टूल का इस्तेमाल करने वाला आसान iOS Swift ऐप्लिकेशन बनाने का तरीका.
- रिमोट Cocoapods डेटा स्टोर करने की जगह से नेविगेशन SDK टूल को इंटिग्रेट करने का तरीका.
- नेविगेशन SDK टूल के असली उपयोगकर्ता की शर्तों के साथ, जगह की जानकारी की अनुमतियों और उपयोगकर्ता के कानूनी समझौते को मैनेज करने का तरीका.
- SDK टूल को शुरू करने का तरीका.
- डेस्टिनेशन सेट करने और नेविगेशन से जुड़ी सलाह पाने की सुविधा चालू करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- XCode का नया और स्टेबल वर्शन.
- बिलिंग की सुविधा वाला Google खाता और प्रोजेक्ट.
- XCode Simulator में चलने वाला iOS डिवाइस या एमुलेट किया गया डिवाइस. आप जो भी चुनें, उसे नेविगेशन SDK टूल की ज़रूरी शर्तें पूरी करनी होंगी.
2. सेट अप करें
अगर आपके पास पहले से Google Cloud Platform खाता और बिलिंग वाला कोई प्रोजेक्ट नहीं है, तो Google Maps Platform के निर्देशों का पालन करके अपना Google Cloud प्रोजेक्ट सेट अप करें.
कंसोल में Google Cloud प्रोजेक्ट चुनना
Cloud Console में, प्रोजेक्ट वाले ड्रॉप-डाउन मेन्यू पर क्लिक करें. इसके बाद, उस प्रोजेक्ट को चुनें जिसे इस कोडलैब के लिए इस्तेमाल करना है.
अपने प्रोजेक्ट में नेविगेशन SDK टूल चालू करना
इस कोडलैब के लिए ज़रूरी Google Maps Platform API और SDK को Google Cloud Marketplace में जाकर चालू करें.
एपीआई और सेवाएं > Google Cloud Console में लाइब्रेरी पर जाएं और "नेविगेशन SDK" खोजें.
आपको खोज का एक नतीजा दिखेगा.
प्रॉडक्ट की जानकारी वाला पेज खोलने के लिए, नेविगेशन SDK टूल पर क्लिक करें. अपने प्रोजेक्ट पर SDK चालू करने के लिए, चालू करें पर क्लिक करें.
iOS के लिए Google Maps SDK टूल के लिए यह तरीका दोहराएं.
एपीआई पासकोड बनाना
Cloud Console के क्रेडेंशियल पेज पर जाकर, एक एपीआई पासकोड जनरेट करें. Google Maps Platform का इस्तेमाल करने के लिए, एपीआई पासकोड ज़रूरी है. कंसोल के क्रेडेंशियल पेज पर. "+क्रेडेंशियल बनाएं" पर क्लिक करें पेज में सबसे ऊपर मौजूद बटन पर क्लिक करें और "एपीआई पासकोड" चुनें विकल्पों में से चुनें.
प्रोडक्शन के इस्तेमाल के लिए, अपनी एपीआई पासकोड के लिए ऐप्लिकेशन से जुड़ी पाबंदी सेट करना सबसे सही तरीका है. हालांकि, इस कोडलैब के लिए ऐसा करना ज़रूरी नहीं है.
3. प्रोजेक्ट की सैंपल फ़ाइलें पाना
इस सेक्शन में बताया गया है कि बेसिक खाली XCode ऐप्लिकेशन प्रोजेक्ट को सेट अप करने का तरीका क्या है. इसके लिए, इस कोडलैब के लिए GitHub रिपॉज़िटरी की फ़ाइलों में क्लोन करें. GitHub रेपो में, कोडलैब कोड के पहले और बाद के वर्शन शामिल हैं. कोडलैब, खाली प्रोजेक्ट टेंप्लेट से शुरू होगा और पूरा हो जाने के बाद खत्म होगा. अगर आपको कोई समस्या आती है, तो रेपो में मौजूद पूरे हो चुके प्रोजेक्ट का रेफ़रंस लें.
रिपो को क्लोन करना या कोड डाउनलोड करना
उस डायरेक्ट्री पर जाएं जहां आपको कोडलैब सेव करना है.
इसके बाद, रेपो का क्लोन बनाएं या कोड डाउनलोड करें:
git clone https://github.com/googlemaps-samples/codelab-navigation-101-ios-swift
अगर आपने git इंस्टॉल नहीं किया है, तो कोड पाने के लिए इस बटन पर क्लिक करें:
इस कोडलैब को जल्द से जल्द शुरू करने के लिए, रीपो में Starter
फ़ोल्डर में कुछ स्टार्टर कोड शामिल किए गए हैं. आपके पास Solution
का एक प्रोजेक्ट भी है, जिसे पूरा कर लिया गया है. अगर आपको किसी भी समय अपनी प्रोग्रेस देखनी हो या अपनी प्रोग्रेस देखनी हो, तो आपके पास एक और प्रोजेक्ट भी है. समाधान प्रोजेक्ट का इस्तेमाल करने के लिए, आपको "Cocoapods का इस्तेमाल करके इंस्टॉल करें" का पालन करना होगा नीचे दिए गए निर्देशों का पालन करें और फिर "पॉड अपडेट" चलाएं solution/Navigation SDK Codelab
फ़ोल्डर से निर्देश दिया गया है.
स्थानीय तौर पर रेपो का क्लोन बनाने के बाद, Starter
फ़ोल्डर को मौजूदा प्रोजेक्ट के तौर पर खोलने के लिए XCode का इस्तेमाल करें. देखें कि प्रोजेक्ट बन रहा है या नहीं और वह चल रहा है या नहीं.
किसी डिवाइस को कनेक्ट करना या XCode सिम्युलेटर सेट अप करना
4. अपने ऐप्लिकेशन में नेविगेशन SDK टूल जोड़ना
नेविगेशन SDK टूल को XCode प्रोजेक्ट में इंटिग्रेट करने के तीन तरीके हैं:यह कोडलैब CocoaPods का इस्तेमाल करता है. Swift Package Manager का इस्तेमाल करके इंटिग्रेट करने या SDK टूल को डाउनलोड करके मैन्युअल तरीके से इंस्टॉल करने के तरीके के बारे में जानने के लिए, नेविगेशन SDK टूल के दस्तावेज़ में Xcode प्रोजेक्ट बनाएं और नेविगेशन SDK टूल इंस्टॉल करें देखें.
Cocoapods का इस्तेमाल करके इंस्टॉल करना
अगर आपके पास पहले से CocoaPods टूल नहीं है, तो टर्मिनल से यह कमांड चलाकर, इसे macOS पर इंस्टॉल करें. ज़्यादा जानकारी के लिए, CocoaPods का इस्तेमाल शुरू करने से जुड़ी गाइड देखें.
sudo gem install cocoapods
स्टार्टर/नेविगेशन SDK टूल कोडलैब फ़ोल्डर में जाकर, अपने प्रोजेक्ट फ़ोल्डर में Podfile नाम की नई फ़ाइल बनाएं (XCode, फ़ाइल > नया > फ़ाइल > अन्य > खाली छोड़ें, "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 सेव की है. यह codelab repo में "starter/Navigation SDK Codelab" फ़ोल्डर होना चाहिए
cd "<path-to-starter-project-folder>/Navigation SDK Codelab"
pod install
कमांड चलाएं. इससे Podfile
में बताए गए एपीआई के साथ-साथ, सभी डिपेंडेंसी भी इंस्टॉल हो जाती हैं
pod install
Xcode बंद करें. इसके बाद, Xcode को लॉन्च करने के लिए, अपने प्रोजेक्ट की .xcworkspace फ़ाइल खोलें. अब से, आपको प्रोजेक्ट खोलने के लिए .xcworkspace फ़ाइल का इस्तेमाल करना होगा.
जांचें कि प्रोजेक्ट स्ट्रक्चर में Pods डायरेक्ट्री जोड़ी गई है और उसमें "Google Maps" शामिल है और "Googleनेविगेशन" पॉड.
अपना एपीआई पासकोड जोड़ना
AppDelegate.swift
में अपने एपीआई पासकोड को इस तरह जोड़ें:
- इंपोर्ट के लिए ये स्टेटमेंट जोड़ें:
import GoogleMaps
import GoogleNavigation
application(_:didFinishLaunchingWithOptions:)
के तरीके में यह जानकारी जोड़ें:
GMSServices.provideAPIKey("YOUR_API_KEY")
"YOUR_API_KEY" को उस एपीआई पासकोड से बदलें जिसे आपने पिछले चरण में बनाया था.
अपना प्रोजेक्ट बनाएं और उसमें मौजूद गड़बड़ियां ठीक करें.
5. ऐप्लिकेशन की अनुमतियां कॉन्फ़िगर करना
नेविगेशन SDK टूल, जीपीएस सिग्नल पर निर्भर करता है. इससे रोड-स्नैप की गई जगह की जानकारी और मोड़-दर-मोड़ निर्देश मिलते हैं. इसलिए, आपके ऐप्लिकेशन को उपयोगकर्ता से जगह की सटीक जानकारी के डेटा का ऐक्सेस मांगना होगा.
ऐसा करने के लिए, आपको Xcode में अपने ऐप्लिकेशन की Info.plist में कुछ प्रॉपर्टी जोड़नी होगी, रनटाइम के दौरान उपयोगकर्ता से अनुमति का अनुरोध करने के लिए अपने ऐप्लिकेशन में कुछ कोड जोड़ना होगा और किसी भी तरह की गड़बड़ी को हैंडल करना होगा, जैसे कि अनुमति न मिलना या जगह की जानकारी उपलब्ध न होना.
Xcode में Info.plist खोलें. यह कुछ ऐसा नज़र आना चाहिए.
जगह की सटीक जानकारी की अनुमति का अनुरोध करना
"जानकारी प्रॉपर्टी सूची" पर माउस पॉइंटर घुमाकर, नई वैल्यू जोड़ी जा सकती हैं तब तक पंक्ति दिखेगी, जब तक कि आपको "+" आइकन दिखाई देता है. प्रॉपर्टी के सुझाए गए नामों वाला डायलॉग देखने के लिए, "+" पर क्लिक करें. हालांकि, ध्यान दें कि प्रॉपर्टी को मैन्युअल तरीके से भी जोड़ा जा सकता है.
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
"ठीक है" पर सेट है, तो 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 नेविगेशन SDK का इस्तेमाल करके किसी मंज़िल के लिए मोड़-दर-मोड़ नेविगेशन मार्गदर्शन देता है.
आपने ऐप्लिकेशन की अनुमतियां और नेविगेशन SDK टूल के लिए, असली उपयोगकर्ता के लिए नियमों का डायलॉग कॉन्फ़िगर किया हो. साथ ही, आपने प्लेस आईडी का इस्तेमाल करके कोई डेस्टिनेशन तय किया हो. आपने अपने ऐप्लिकेशन में, सफलता और गड़बड़ी की अलग-अलग स्थितियों को मैनेज किया है.
10. आगे बढ़ना
अगर आपको अपने ऐप्लिकेशन को और बेहतर बनाना है, तो इन विषयों पर गौर करें.
- नेविगेशन के ज़्यादा इवेंट के बारे में जानें. अगर बाकी समय या दूरी तय सीमा से ज़्यादा हो जाती है, तो मैसेज दिखाने के लिए कोड जोड़ें.
- नेविगेशन इंटरफ़ेस को पसंद के मुताबिक बनाना.
- अगर आपको ज़्यादा चुनौती चाहिए, तो देखें कि Places API प्लेस पिकर जोड़ा जा सकता है या नहीं, ताकि उपयोगकर्ता डेस्टिनेशन सेट कर सके. अहम जानकारी: नेविगेशन SDK टूल के डेमो ऐप्लिकेशन में, लागू करने का सैंपल मौजूद है. कोड देखने के लिए, अपने प्रोजेक्ट फ़ोल्डर में
pod try GoogleNavigation
चलाएं.