इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. शुरू करने से पहले
कोडिंग शुरू करने से पहले, आपको कुछ ज़रूरी शर्तें पूरी करनी होंगी, जो आपको #39;सेट अप करनी होंगी.
Xcode
इस ट्यूटोरियल में, Apple का #code टूल और Objective-C भाषा के साथ-साथ एक आसान iOS ऐप्लिकेशन भी बनाया गया है. यह ऐप्लिकेशन एम्युलेटर में चलता है. आपको किसी असली डिवाइस की ज़रूरत नहीं है. आपको https://developer.apple.com/xcode/ पर Xcode मिल सकता है
कोकोपॉड
iOS के लिए जगहें SDK टूल, CocoaPods पॉड के तौर पर उपलब्ध है. CocoaPods, Swift और Objective-C प्रोजेक्ट के लिए एक ओपन सोर्स डिपेंडेंसी मैनेजमेंट टूल है. अगर आपके पास यह टूल पहले से #&93 नहीं है, तो आगे बढ़ने से पहले आपको इसे इंस्टॉल करना होगा. इसे इस तरह के टर्मिनल से इंस्टॉल किया जा सकता है:
sudo gem install cocoapods
CocoaPods के बारे में ज़्यादा जानने के लिए, CocoaPods का इस्तेमाल शुरू करने की गाइड देखें.
SDK टूल इंस्टॉल करना
SDK टूल इंस्टॉल करने के लिए, आपको अपनी प्रोजेक्ट डायरेक्ट्री में Podfile बनानी होगी. इसका इस्तेमाल CocoaPods का इस्तेमाल करके, ज़रूरी डिपेंडेंसी डाउनलोड और कॉन्फ़िगर करने के लिए किया जाता है. ऐसा करने का सबसे आसान तरीका है, Xcode में नया प्रोजेक्ट बनाना, उसमें Podfile जोड़ना, और वहां पॉड इंस्टॉल करना.
Xcode खोलें और आपको #39;Xcode में आपका स्वागत है' स्क्रीन दिखाई देगी. यहां, {0}नया Xcode प्रोजेक्ट बनाएं' चुनें
अगली स्क्रीन पर आपको नए प्रोजेक्ट के टेंप्लेट के लिए कहा जाएगा. iOS के लिए एक ही ऐप्लिकेशन ' चुनें और;
प्रॉडक्ट नाम के बारे में पूछे जाने पर, आप अपनी पसंद का कोई भी विकल्प चुन सकते हैं. हालांकि, बंडल आइडेंटिफ़ायर को नोट करना न भूलें जो आपके लिए जनरेट किया गया है. आपको बाद में इसकी ज़रूरत होगी.
{0}Next' दबाएं और आपके लिए प्रोजेक्ट बना दिया जाएगा. उस डायरेक्ट्री का नोट देखें जहां उसे बनाया गया है. Xcode बंद करें और टर्मिनल का इस्तेमाल करके, उस डायरेक्ट्री पर जाएं.
टर्मिनल का इस्तेमाल करके, यह निर्देश डालें:
pod init
आपके लिए Podfile नाम की एक फ़ाइल बनाई जाएगी. Google Maps में पॉड जोड़ने के लिए, इसमें बदलाव करें:
target '{YOUR APP NAME}' do
pod 'GoogleMaps'
end
इसे सेव करें और Xcode बंद करें. इसे बंद करना न भूलें, क्योंकि अगले चरण में आप मौजूदा प्रोजेक्ट में बदलाव करने वाले हैं. एक बार यह 'हो जाने के बाद एक अलग प्रोजेक्ट फ़ाइल को खोलेगा और डेवलपर के लिए यह जानना बहुत आसान है कि अगर उन्होंने पहले Xcode बंद न किया हो, तो क्या होता है! अब, किसी टर्मिनल में, अपनी प्रोजेक्ट डायरेक्ट्री पर जाएं और "pod install' को इस तरह चलाएं:
जब आप'हो जाएगा, तब पॉड इंस्टॉल कर दिए जाएंगे और एक नई .xcworkspace फ़ाइल बनाई जाएगी. अब से प्रोजेक्ट के लिए इसका इस्तेमाल करें. हालांकि, कोडिंग से पहले, आपको एक एपीआई की ज़रूरत होगी.
2. अपनी API (एपीआई) कुंजी पाएं
इस सुविधा को चालू करने के लिए, iOS के लिए Maps SDK टूल चालू करें.
Google Maps Platform सेट अप करना
अगर आपके पास पहले से Google Cloud Platform खाता नहीं है और बिलिंग की सुविधा चालू की गई है, तो कृपया बिलिंग खाता और प्रोजेक्ट बनाने के लिए, Google Maps Platform का इस्तेमाल शुरू करना गाइड देखें.
- Cloud Console में, प्रोजेक्ट ड्रॉप-डाउन मेन्यू पर क्लिक करें और वह प्रोजेक्ट चुनें जिसे आप इस कोडलैब के लिए इस्तेमाल करना चाहते हैं.
- Google Cloud Marketplace में, इस कोडलैब के लिए ज़रूरी Google Maps Platform API और SDK टूल चालू करें. ऐसा करने के लिए, इस वीडियो या इस दस्तावेज़ में दिया गया तरीका अपनाएं.
- Cloud Console के क्रेडेंशियल पेज में एपीआई कुंजी जनरेट करें. आप इस वीडियो या इस दस्तावेज़ में दिया गया तरीका अपना सकते हैं. Google Maps Platform पर सभी अनुरोधों के लिए एपीआई कुंजी ज़रूरी है.
3. जगहें एपीआई ऐप्लिकेशन बनाना
अब जब आपने एक कंसोल प्रोजेक्ट बना लिया है और उस पर जगहें एपीआई चालू कर दिया है, तो API (एपीआई) कुंजी लेने के बाद, आप #39;अपने पहले स्थान एपीआई ऐप्लिकेशन को कोड करने के लिए तैयार हो जाते हैं.
जब आप पॉड फ़ाइलें इंस्टॉल करते थे, तब आपके लिए एक नई .xcworkspace फ़ाइल बनाई गई थी. इस पर दो बार क्लिक करके इसे खोलें.
आप अपने प्रोजेक्ट एक्सप्लोरर में देख पाएंगे कि अब आपके पास एक नया फ़ोल्डर है, जिसे "Pod' कहते हैं. अगर यह काम सफल रहा, तो आपको एक Google Maps फ़ोल्डर दिखेगा, जिसमें फ़्रेमवर्क होगा.
4. Info.plist फ़ाइल में बदलाव करें.
जब आप पहली बार ऐप्लिकेशन चलाएंगे, तो iOS आपको एक डायलॉग देगा. इसमें आपसे उपयोगकर्ता से जगह की जानकारी ऐक्सेस करने की अनुमति मांगी जाएगी. इस डायलॉग बॉक्स में आपके तय की गई एक स्ट्रिंग होगी और आपको उसे Info.plist फ़ाइल में रखना होगा. अगर यह स्ट्रिंग ##39 मौजूद नहीं है, तो डायलॉग नहीं दिखेगा और आपका ऐप्लिकेशन काम नहीं करेगा.
आपको Project explorer की मदद से, Info.plist फ़ाइल यहां मिल सकती है:
इसे चुनें. इसके बाद, आपको Plist एडिटर दिखेगा.
किसी भी एलिमेंट पर माउस घुमाएं और आपको #+' आइकॉन दिखेगा. इसे दबाएं और आपको एक नई एंट्री दिखेगी. इस बॉक्स में [NSLocationहमेशाUsageDescription' मान डालें.
नई कुंजी जोड़ने के लिए Enter दबाएं. फिर इस कुंजी के मान कॉलम पर दो बार क्लिक करें और फिर एक स्ट्रिंग जोड़ें:
इस स्ट्रिंग के बारे में ज़्यादा जानने के लिए, Apple का डेवलपर दस्तावेज़ यहां देखें.
5. अपने ऐप्लिकेशन डेलिगेट में बदलाव करें
प्रोजेक्ट एक्सप्लोरर में AppDelegate.m को ढूंढें और खोलें. अपनी API (एपीआई) कुंजी जोड़ने के लिए इसका इस्तेमाल करें.
फ़ाइल के सबसे ऊपर, इसे #इंपोर्ट लाइन के ठीक नीचे जोड़ें:
@import GoogleMaps;
इसके बाद, didFinishLaunchingWithOptions में: फ़ंक्शन नीचे दी गई रिटर्न YES' लाइन के बारे में जोड़ें:
[GMSServices provideAPIKey:@"<Add your API Key>"];
पहले जनरेट की गई API (एपीआई) कुंजी का इस्तेमाल करें.
6. अपनी स्टोरीबोर्ड फ़ाइल में बदलाव करें
प्रोजेक्ट एक्सप्लोरर में, Main.storyboard फ़ाइल खोलें. पक्का करें कि साइड बार चालू है. इसके लिए, सबसे ऊपर दाएं कोने में मौजूद साइडबार बटन को दबाएं.
इसके बाद, साइडबार में सबसे नीचे, ऑब्जेक्ट लाइब्रेरी को चुनकर यह पक्का करें कि लेबल कंट्रोल ढूंढें.
बाईं ओर मौजूद व्यू कंट्रोलर सीन में, पक्का करें कि "View' चुना गया हो:
इसके बाद, सात लेबल खींचें और छोड़ें. उन्हें यहां दिखाए गए तरीके से व्यवस्थित करें. पक्का करें कि दिखाए गए साइज़ से मेल खाने के लिए, उनके साइज़ को खींचें और छोड़ें. आप लेबल में टेक्स्ट पर दो बार क्लिक करके और ज़रूरी मान को टाइप करके उसमें बदलाव कर सकते हैं:
सबसे नीचे वाले लेबल (सबसे बड़ा लेबल) के लिए, प्रॉपर्टी एडिटर पर जाएं और पक्का करें कि वह 0 लाइन (डिफ़ॉल्ट रूप से 1) पर सेट है. इससे आप एक से ज़्यादा लाइनें रेंडर कर पाएंगे.
7. वैल्यू के लिए आउटलेट बनाना
3 [value' लेबल वाले तीन के लिए, आपको एक आउटलेट बनाना होगा. इससे आप कोड का इस्तेमाल करके उनकी वैल्यू बदल पाएंगे. ऐसा करने के लिए, आपको पहले Assistant एडिटर को चालू करना होगा. ऐसा करने के लिए, पहले प्रॉपर्टी साइडबार को हटाने के लिए उसके बटन पर क्लिक करें और उसे बंद करें. (यह बटन पिछले चरण में दिखाया गया था)
फिर, सहायक बटन चुनें – यह यहां दिखाया गया डबल सर्कल है:
पक्का करें कि यह ViewController.h फ़ाइल को रेंडर कर रहा है. अगर ऐसा नहीं है, तो आप Assistant की विंडो में सबसे ऊपर मौजूद एडिटर का इस्तेमाल करके इसे बदल सकते हैं:
इसके बाद, Control कुंजी को दबाकर रखें. इसके बाद, हर लेबल को खींचें और Assistant में ViewController.h फ़ाइल में @interface line के नीचे छोड़ें. एक पॉप-अप दिखाई देगा, जिसमें आपसे पूछा जाएगा कि आप किस तरह का कनेक्शन बनाना चाहते हैं:
पक्का करें कि सेटिंग इस तरह दिखाई गई हैं (कनेक्शन: आउटलेट; टाइप: यूज़र इंटरफ़ेस (यूआई) लेबल; स्टोरेज: कमज़ोर). इसके बाद, हर सेटिंग को एक नाम दें. इस कोडलैब के लिए, मैंने देशांतर, अक्षांश, और ऊंचाई का लेबल lblदेशांतर, lblLatitude और lblAltiduds नाम से देखा है. बड़े लेबल को नीचे से ऊपर की ओर भी खींचें और उसे lblPlace कहें.
जब आप यह काम पूरा कर लेते हैं, तब आपकी ViewController.h फ़ाइल कुछ ऐसी दिखनी चाहिए:
#import <UIKit/UIKit.h>
@import GoogleMaps;
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *lblLatitude;
@property (weak, nonatomic) IBOutlet UILabel *lblLongitude;
@property (weak, nonatomic) IBOutlet UILabel *lblAltitude;
@property (weak, nonatomic) IBOutlet UILabel *lblPlaces;
@end
8. जगह और Google Client API के लिए हेडर फ़ाइल में बदलाव करें
आखिरी चरणों से पहले – जहां आप जगहों को एपीआई इस्तेमाल करने के लिए ऐप्लिकेशन बनाते हैं तब आपको हेडर फ़ाइल में कुछ और वैरिएबल सेट अप करने होंगे (ViewController.h). ये कुछ मुख्य स्थान मैनेजर और एक मुख्य स्थान ऑब्जेक्ट हैं:
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;
आपको एक Google API क्लाइंट की भी ज़रूरत होगी:
@property GMSPlacesClient *placesClient;
आखिर में, आपको हेडर फ़ाइल को अपडेट करना होगा, ताकि CLLocationManagerDelegate को लागू किया जा सके:
@interface ViewController : UIViewController<CLLocationManagerDelegate>
जब आप यह काम पूरा कर लेते हैं, तो हेडर फ़ाइल इस तरह दिखनी चाहिए:
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <GoogleMaps/GoogleMaps.h>
@interface ViewController : UIViewController<CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;
@property (weak, nonatomic) IBOutlet UILabel *lblLongitude;
@property (weak, nonatomic) IBOutlet UILabel *lblLatitude;
@property (weak, nonatomic) IBOutlet UILabel *lblAltitude;
@property (weak, nonatomic) IBOutlet UILabel *lblPlaces;
@property GMSPlacesClient *placesClient;
@end
9. अपने 'व्यू कंट्रोलर' का इस्तेमाल करना
पहला कदम स्थान मैनेजर को आरंभ करने के लिए viewIdentifierLoad फ़ंक्शन में बदलाव करना, उपयोगकर्ता से जगह की जानकारी ऐक्सेस करने के लिए उपयोगकर्ता के अधिकार का अनुरोध करना और अंत में स्थान मैनेजर को शुरू करना है, ताकि यह मौजूदा जगह को ट्रैक कर सके. आप भी Google Places API क्लाइंट को शुरू करेंगे.
- (void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.locationManager requestAlwaysAuthorization];
// Or [self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
self.locationManager.delegate = self;
self.location = [[CLLocation alloc] init];
self.placesClient = [GMSPlacesClient sharedClient];
}
10. जगह की जानकारी के अपडेट मैनेज करना
जगह का मैनेजर, अपडेट किए गए स्थान के साथ आपके व्यू नियंत्रक को वापस कॉल करेगा, जो कि didUpdateLocations फ़ंक्शन को कॉल करके किया जाएगा. आपको इसे अपने ViewController.m में जोड़ना होगा. फ़ंक्शन ऐसा दिखता है:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
// Enter code here
}
इस फ़ंक्शन को कई काम करने होंगे.
सबसे पहले, यह जगह की जानकारी को कैश मेमोरी में सेव करेगा, जिसमें आखिरी बार मिलने वाली जगह की जानकारी इस तरह होगी:
self.location = locations.lastObject;
इसके बाद, अक्षांश, देशांतर, और ऊंचाई के तीन लेबल अपडेट किए जाने चाहिए:
self.lblLatitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.latitude];
self.lblLongitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.longitude];
self.lblAltitude.text = [NSString stringWithFormat:@"%f", self.location.altitude];
इसके बाद, आप जगहों के क्लाइंट की मदद से 'जगहें एपीआई' कॉल करेंगे. आप कॉलबैक फ़ंक्शन तय करके ऐसा करते हैं, जिसे जगहों की संभावना की सूची मिलती है. जगहें एपीआई आपकी जगह के आधार पर किसी खास जगह पर होने की संभावना तय करता है. यह संभावित जगहों के नाम के साथ, 0 और 1 के बीच का वह मान देता है जिसमें यह संभावना होती है कि आप उस जगह पर हैं #39;
[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {
इसके बाद, आप कॉलबैक लागू कर सकते हैं. इससे यह पता चलता है कि कितनी जगहें बनाई जा सकती हैं. इसमें जगहों की जानकारी और उन्हें जोड़ने की संभावना भी शामिल है.
[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {
if (error != nil) {
NSLog(@"Current Place error %@", [error localizedDescription]);
return;
}
NSMutableString *strPlaces = [NSMutableString stringWithString:@""];
for (GMSPlaceLikelihood *likelihood in likelihoodList.likelihoods) {
GMSPlace* place = likelihood.place;
NSLog(@"Current Place name %@ at likelihood %g", place.name,
likelihood.likelihood);
NSLog(@"Current Place address %@", place.formattedAddress);
NSLog(@"Current Place attributions %@", place.attributions);
NSLog(@"Current PlaceID %@", place.placeID);
[strPlaces appendString:place.name];
[strPlaces appendString:@" "];
[strPlaces appendFormat:@"%g",likelihood.likelihood];
[strPlaces appendString:@"\n"];
}
self.lblPlaces.text = strPlaces;
}];
जब आप यह काम पूरा कर लेते हैं, तो your didUpdateLocations फ़ंक्शन ऐसा दिखना चाहिए:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
self.location = locations.lastObject;
self.lblLatitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.latitude];
self.lblLongitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.longitude];
self.lblAltitude.text = [NSString stringWithFormat:@"%f", self.location.altitude];
NSLog(@"%@", self.location.description);
[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {
if (error != nil) {
NSLog(@"Current Place error %@", [error localizedDescription]);
return;
}
NSMutableString *strPlaces = [NSMutableString stringWithString:@""];
for (GMSPlaceLikelihood *likelihood in likelihoodList.likelihoods)
{
GMSPlace* place = likelihood.place;
NSLog(@"Current Place name %@ at likelihood %g", place.name, likelihood.likelihood);
NSLog(@"Current Place address %@", place.formattedAddress);
NSLog(@"Current Place attributions %@", place.attributions);
NSLog(@"Current PlaceID %@", place.placeID);
[strPlaces appendString:place.name];
[strPlaces appendString:@" "];
[strPlaces appendFormat:@"%g",likelihood.likelihood];
[strPlaces appendString:@"\n"];
}
self.lblPlaces.text = strPlaces;
}];
}
अब आप अपना ऐप्लिकेशन चलाने और उसकी जांच करने के लिए तैयार हैं!
11. एम्युलेटर में ऐप्लिकेशन चलाना
आप शीर्षक बार में चलाएं बटन का इस्तेमाल करके ऐप्लिकेशन चलाते हैं. इससे आप रन टाइप भी चुन सकते हैं. साथ ही, आप एम्युलेटर का इस्तेमाल करके, iPhone 6 पर I'm की जांच भी देख सकते हैं.
जब आप 'चलाएं' बटन दबाएंगे, तब ऐप्लिकेशन बन जाएगा और लॉन्च हो जाएगा. आपको {39;ऐप्लिकेशन को, जगह की जानकारी ऐक्सेस करने की अनुमति का अनुरोध दिखेगा. इसमें वह कस्टम स्ट्रिंग भी शामिल है जिसे आपने पहले बताया था.
यह कर लेने के बाद, आपको अक्षांश और देशांतर अपडेट दिखेगा. जगह बदलने के लिए, डीबग मेन्यू पर क्लिक करके कोई जगह चुनें. उदाहरण के लिए, आप “फ़्रीवे ड्राइव' चुन सकते हैं
जब आप ऐसा करते हैं, तो आपको #39;फ़्रीवे ड्राइव को सिम्युलेट करते हुए, उन जगहों की जानकारी दिखेगी जहां इसके अपडेट होने की संभावना है.
इसके साथ ही, काम हो गया! आपने iOS पर Google Places API का इस्तेमाल करके मौजूदा जगह की जानकारी को सफलतापूर्वक ऐक्सेस किया है.