iOS এর জন্য স্থান SDK দিয়ে শুরু করা (উদ্দেশ্য-সি)

1. আপনি শুরু করার আগে

আপনি কোডিং শুরু করার আগে, আপনাকে সেট আপ করতে হবে এমন কয়েকটি পূর্বশর্ত রয়েছে।

এক্সকোড

এই টিউটোরিয়ালটি অ্যাপলের এক্সকোড টুল ব্যবহার করে, অবজেক্টিভ-সি ভাষার সাথে একটি সাধারণ iOS অ্যাপ্লিকেশন তৈরি করতে যা একটি এমুলেটরে চলে। আপনার কোনো শারীরিক ডিভাইসের প্রয়োজন নেই। আপনি https://developer.apple.com/xcode/ এ Xcode পেতে পারেন

কোকোপডস

iOS এর জন্য স্থান SDK একটি CocoaPods পড হিসাবে উপলব্ধ। CocoaPods হল সুইফট এবং অবজেক্টিভ-সি প্রকল্পের জন্য একটি ওপেন সোর্স নির্ভরতা ব্যবস্থাপনার টুল। যদি আপনার কাছে ইতিমধ্যে এই টুলটি না থাকে, তাহলে আর যাওয়ার আগে আপনাকে এটি ইনস্টল করতে হবে। এটি টার্মিনাল থেকে এইভাবে ইনস্টল করা যেতে পারে:

sudo gem install cocoapods

CocoaPods সম্পর্কে আরো বিস্তারিত জানার জন্য, CocoaPods শুরু করার নির্দেশিকা দেখুন।

SDK ইনস্টল করা হচ্ছে

SDK ইনস্টল করার জন্য আপনাকে আপনার প্রোজেক্ট ডিরেক্টরিতে একটি Podfile তৈরি করতে হবে যা CocoaPods প্রয়োজনীয় নির্ভরতা ডাউনলোড এবং কনফিগার করতে ব্যবহার করবে। এটি করার সবচেয়ে সহজ উপায় হল এক্সকোডে একটি নতুন প্রকল্প তৈরি করা, এতে একটি পডফাইল যোগ করা এবং সেখানে পডগুলি ইনস্টল করা।

Xcode খুলুন এবং আপনি 'Xcode-এ স্বাগতম' স্ক্রীন দেখতে পাবেন। এখানে, 'একটি নতুন Xcode প্রকল্প তৈরি করুন' নির্বাচন করুন

4f1ecee473937c7b.png

পরবর্তী স্ক্রিনে আপনাকে আপনার নতুন প্রকল্পের জন্য একটি টেমপ্লেটের জন্য জিজ্ঞাসা করা হবে। iOS এর জন্য 'একক দৃশ্য অ্যাপ্লিকেশন' নির্বাচন করুন এবং 'পরবর্তী' টিপুন

পণ্যের নাম জিজ্ঞাসা করা হলে, আপনি আপনার পছন্দের যেকোনো কিছু বেছে নিতে পারেন, তবে আপনার জন্য তৈরি করা বান্ডেল শনাক্তকারীটি নোট করতে ভুলবেন না। তোমার সেটা পরে লাগবে।

72fbf25cb2db22ad.png

'পরবর্তী' টিপুন এবং প্রকল্পটি আপনার জন্য তৈরি করা হবে। এটি যেখানে তৈরি করা হয়েছে সেটির একটি নোট নিন। Xcode বন্ধ করুন এবং টার্মিনাল ব্যবহার করে, সেই ডিরেক্টরিতে নেভিগেট করুন।

টার্মিনাল ব্যবহার করে, নিম্নলিখিত কমান্ডটি প্রবেশ করান:

pod init

আপনার জন্য Podfile নামে একটি ফাইল তৈরি করা হবে। এই মত GoogleMaps এর জন্য একটি পড যোগ করতে এটি সম্পাদনা করুন:

target '{YOUR APP NAME}' do
pod 'GoogleMaps'
end

এটি সংরক্ষণ করুন, এবং Xcode বন্ধ করুন। এটি বন্ধ করতে ভুলবেন না, কারণ পরবর্তী ধাপে আপনি অন্তর্নিহিত প্রকল্পটি সম্পাদনা করতে যাচ্ছেন। এটি হয়ে গেলে আপনি একটি ভিন্ন প্রজেক্ট ফাইল খুলবেন এবং একজন ডেভেলপার আগে Xcode বন্ধ না করলে সবকিছু কোথায় তা নিয়ে বিভ্রান্ত হওয়া খুবই সাধারণ ব্যাপার! এখন, একটি টার্মিনালে, আপনার প্রকল্প ডিরেক্টরিতে যান এবং এভাবে 'পড ইনস্টল' চালান:

789c5bc62817f68a.png

আপনার হয়ে গেলে, পডগুলি ইনস্টল করা হবে এবং একটি নতুন .xcworkspace ফাইল তৈরি করা হবে। এখন থেকে প্রকল্পের জন্য এটি ব্যবহার করুন. কিন্তু, কোডিং করার আগে, পরবর্তী জিনিসটি আপনার প্রয়োজন হবে একটি API কী।

2. আপনার API কী পান৷

নিম্নলিখিত সক্রিয়করণ পদক্ষেপের জন্য, iOS এর জন্য মানচিত্র SDK সক্ষম করুন৷

Google Maps প্ল্যাটফর্ম সেট আপ করুন

আপনার যদি ইতিমধ্যেই একটি Google ক্লাউড প্ল্যাটফর্ম অ্যাকাউন্ট না থাকে এবং বিলিং সক্ষম করা একটি প্রকল্প থাকে, তাহলে অনুগ্রহ করে একটি বিলিং অ্যাকাউন্ট এবং একটি প্রকল্প তৈরি করতে Google মানচিত্র প্ল্যাটফর্মের সাথে শুরু করা নির্দেশিকাটি দেখুন৷

  1. ক্লাউড কনসোলে , প্রকল্পের ড্রপ-ডাউন মেনুতে ক্লিক করুন এবং এই কোডল্যাবের জন্য আপনি যে প্রকল্পটি ব্যবহার করতে চান সেটি নির্বাচন করুন।

  1. Google ক্লাউড মার্কেটপ্লেসে এই কোডল্যাবের জন্য প্রয়োজনীয় Google মানচিত্র প্ল্যাটফর্ম API এবং SDK সক্ষম করুন৷ এটি করতে, এই ভিডিও বা এই ডকুমেন্টেশনের ধাপগুলি অনুসরণ করুন৷
  2. ক্লাউড কনসোলের শংসাপত্র পৃষ্ঠায় একটি API কী তৈরি করুন। আপনি এই ভিডিও বা এই ডকুমেন্টেশনের ধাপগুলি অনুসরণ করতে পারেন। Google মানচিত্র প্ল্যাটফর্মের সমস্ত অনুরোধের জন্য একটি API কী প্রয়োজন৷

3. Places API অ্যাপ তৈরি করা

এখন আপনি একটি কনসোল প্রজেক্ট তৈরি করেছেন, এবং একটি এপিআই কী পেয়ে প্লেসেস এপিআই সক্রিয় করেছেন, আপনি আপনার প্রথম প্লেস এপিআই অ্যাপ কোডিং শুরু করতে প্রস্তুত।

আগে যখন আপনি পড ফাইল ইনস্টল করতেন, তখন আপনার জন্য একটি নতুন .xcworkspace ফাইল তৈরি করা হয়েছিল। এটিতে ডাবল ক্লিক করে এটি খুলুন।

19d62f34c08e645c.png

আপনি আপনার প্রজেক্ট এক্সপ্লোরারে লক্ষ্য করবেন যে আপনার কাছে এখন 'পডস' নামে একটি নতুন ফোল্ডার রয়েছে। যদি এটি সফলভাবে কাজ করে, আপনি সেখানে একটি GoogleMaps ফোল্ডার দেখতে পাবেন যেখানে ফ্রেমওয়ার্ক রয়েছে।

8844d861f64c61aa.png

4. Info.plist ফাইলটি সম্পাদনা করুন।

আপনি যখন প্রথম অ্যাপ্লিকেশনটি চালাবেন, iOS আপনাকে একটি ডায়ালগ দেবে যা ব্যবহারকারীকে অবস্থান পরিষেবাগুলি অ্যাক্সেস করার অনুমতি দিতে বলবে৷ এই ডায়ালগটি একটি স্ট্রিং দেবে যা আপনি সংজ্ঞায়িত করেছেন এবং আপনি এটিকে Info.plist ফাইলে রাখবেন। এই স্ট্রিংটি উপস্থিত না থাকলে, ডায়ালগটি দেখাবে না এবং আপনার অ্যাপটি কাজ করবে না৷

আপনি এখানে প্রজেক্ট এক্সপ্লোরারে Info.plist ফাইলটি খুঁজে পেতে পারেন:

c224c920ab3f1ef.png

এটি নির্বাচন করুন, এবং আপনি plist সম্পাদক দেখতে পাবেন।

859ca56f3b19da5.png

যেকোন উপাদানের উপর মাউস ঘুরান, এবং আপনি একটি '+' আইকন দেখতে পাবেন। এটি টিপুন এবং আপনি একটি নতুন এন্ট্রি দেখতে পাবেন। এই বাক্সে 'NSLocationAlwaysUsageDescription' মানটি লিখুন।

9fb225d6f5508794.png

নতুন কী যোগ করতে এন্টার টিপুন। তারপর এই কীটির জন্য মান কলামে ডাবল ক্লিক করুন এবং একটি স্ট্রিং যোগ করুন:

5aefeb184187aa58.png

এই স্ট্রিং সম্পর্কে আরও জানতে, এখানে অ্যাপল ডেভেলপার ডকুমেন্টেশন দেখুন।

5. আপনার অ্যাপ প্রতিনিধি সম্পাদনা করুন

প্রজেক্ট এক্সপ্লোরারে, AppDelegate.m খুঁজুন এবং খুলুন। আপনি আপনার API কী যোগ করতে এটি ব্যবহার করবেন।

ফাইলের শীর্ষে, অবিলম্বে #import লাইনের নীচে এটি যোগ করুন:

@import GoogleMaps;

তারপর, didFinishLaunchingWithOptions: ফাংশনে 'রিটার্ন ইয়েস' লাইন সম্পর্কে নিম্নলিখিত যোগ করুন:

[GMSServices provideAPIKey:@"<Add your API Key>"];

আপনি আগে তৈরি করা API কী ব্যবহার করতে ভুলবেন না।

6. আপনার স্টোরিবোর্ড ফাইল সম্পাদনা করুন

প্রজেক্ট এক্সপ্লোরারে, Main.storyboard ফাইলটি খুলুন। উপরের ডানদিকের কোণায় সাইডবার বোতাম টিপে সাইড বারটি সক্রিয় রয়েছে তা নিশ্চিত করুন।

352af28b970d9e2.png

তারপর, সাইডবারের নীচে, অবজেক্ট লাইব্রেরি নির্বাচন করা হয়েছে তা নিশ্চিত করে লেবেল নিয়ন্ত্রণ খুঁজুন।

adec7051ae949531.png

বাম দিকের ভিউ কন্ট্রোলার দৃশ্যে, 'ভিউ' নির্বাচন করা হয়েছে তা নিশ্চিত করুন:

e4827b92b5861e3e.png

তারপর ভিউতে 7টি লেবেল টেনে আনুন। এখানে দেখানো হিসাবে তাদের সাজান. যা দেখানো হয়েছে তার সাথে মেলে তাদের মাপ টেনে আনতে ভুলবেন না। আপনি লেবেলে লেখাটি সম্পাদনা করতে পারেন এটিতে ডাবল ক্লিক করে এবং প্রয়োজনীয় মান টাইপ করে:

f8a9457772358069.png

নীচের সর্বাধিক লেবেলের জন্য (সত্যিই বড় একটি), বৈশিষ্ট্য সম্পাদকে যান এবং নিশ্চিত করুন যে এটি 0 লাইনে সেট করা আছে (এটি ডিফল্ট 1)। এটি একাধিক লাইন রেন্ডার করার অনুমতি দেবে।

a4abacf00d8888fe.png

7. মানগুলির জন্য আউটলেট তৈরি করুন

3টি 'মান' লেবেলের জন্য, আপনাকে একটি আউটলেট তৈরি করতে হবে। এটি আপনাকে কোড ব্যবহার করে তাদের মান পরিবর্তন করার অনুমতি দেবে। এটি করার জন্য, আপনাকে প্রথমে সহকারী সম্পাদক সক্রিয় করতে হবে। এটি করার জন্য, প্রথমে এটি অপসারণ করার জন্য এটির বোতামে ক্লিক করে বৈশিষ্ট্য সাইডবারটি বন্ধ করুন। (এই বোতামটি পূর্ববর্তী ধাপে দেখানো হয়েছিল)

তারপরে, সহকারী বোতামটি নির্বাচন করুন - এটি এখানে দেখানো ডাবল বৃত্ত:

e92dcc4ceea20a51.png

নিশ্চিত করুন যে এটি ViewController.h ফাইলটি রেন্ডার করছে। যদি না হয়, তাহলে আপনি সহকারী উইন্ডোর শীর্ষে থাকা সম্পাদক ব্যবহার করে এটি পরিবর্তন করতে পারেন:

d42f0fcc18b84703.png

তারপর, কন্ট্রোল কী ধরে রাখার সময়, প্রতিটি লেবেল টেনে আনুন এবং সহকারীর ViewController.h ফাইলে @ইন্টারফেস লাইনের নীচে ফেলে দিন। আপনি কি ধরনের সংযোগ করতে চান তা জিজ্ঞাসা করে একটি ডায়ালগ পপ আপ হবে:

a44b7888ed0f62b.png

সেটিংস যেমন দেখানো হয়েছে তা নিশ্চিত করুন (সংযোগ: আউটলেট; প্রকার: UILabel; সঞ্চয়স্থান: দুর্বল), এবং তারপর প্রত্যেককে একটি নাম দিন। এই কোডল্যাবের উদ্দেশ্যে, আমি দ্রাঘিমাংশ, অক্ষাংশ এবং উচ্চতা লেবেলগুলিকে যথাক্রমে lblLongitude, lblLatitude এবং lblAltidude বলেছি। এছাড়াও নিচ থেকে বড় লেবেলটি টেনে আনুন এবং এটিকে lblPlaces বলুন।

আপনার কাজ শেষ হয়ে গেলে, আপনার 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 ক্লায়েন্ট API-এর জন্য হেডার ফাইল সম্পাদনা করুন

চূড়ান্ত পদক্ষেপের আগে - যেখানে আপনি স্থান 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. আপনার ভিউ কন্ট্রোলার সম্পাদনা করুন

প্রথম ধাপ হল লোকেশন ম্যানেজার শুরু করার জন্য viewDidLoad ফাংশন সম্পাদনা করা, অবস্থান অ্যাক্সেস করার জন্য ব্যবহারকারীর অনুমোদনের অনুরোধ করা এবং অবশেষে লোকেশন ম্যানেজার চালু করা যাতে এটি বর্তমান অবস্থান ট্র্যাক করে। আপনি 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];

এরপর আপনি স্থান ক্লায়েন্ট ব্যবহার করে Places API কল করবেন। আপনি কলব্যাক ফাংশন নির্দিষ্ট করে এটি করবেন, যা স্থানের সম্ভাবনার তালিকা পাবে। স্থান API আপনার অবস্থানের উপর ভিত্তি করে আপনি একটি নির্দিষ্ট স্থানে থাকার সম্ভাবনা নির্ধারণ করে। এটি সম্ভাব্য স্থানের নাম প্রদান করে, সাথে 0 এবং 1 এর মধ্যে একটি মান যাতে আপনি সেই জায়গায় থাকার সম্ভাবনা রয়েছে।

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

আপনার কাজ শেষ হয়ে গেলে, আপনার 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 এ পরীক্ষা করছি।

bbbe0b8820c8a913.png

আপনি রান বোতাম টিপলে, অ্যাপটি তৈরি এবং চালু হবে। আপনি আগে নির্দিষ্ট করা কাস্টম স্ট্রিং সহ অ্যাপটিকে অবস্থান অ্যাক্সেস করার অনুমতি দেওয়ার অনুরোধটি দেখতে পাবেন।

b9bb2ace7e68f186.png

একবার আপনি এটি করলে, আপনি আপনার অক্ষাংশ এবং দ্রাঘিমাংশ আপডেট দেখতে পাবেন। অবস্থান পরিবর্তন করতে, ডিবাগ মেনু নির্বাচন করুন এবং একটি অবস্থান চয়ন করুন। উদাহরণস্বরূপ, আপনি 'ফ্রিওয়ে ড্রাইভ' বাছাই করতে পারেন

dcb1ce091d780f56.png

আপনি যখন এটি করবেন, তখন আপনি ফ্রিওয়ে ড্রাইভের অনুকরণে এর সম্ভাব্য স্থানগুলি আপডেট করার সাথে অবস্থানটি দেখতে পাবেন।

649e3eeb2321ae03.png

এবং এটাই! আপনি iOS-এ Google Places API ব্যবহার করে বর্তমান স্থানের বিবরণ সফলভাবে অ্যাক্সেস করেছেন।