iOS için Places SDK'yı Kullanmaya Başlama (Objective-C)

1. Başlamadan önce

Kodlamaya başlamadan önce ayarlamanız gereken birkaç ön koşul vardır.

Xcode

Bu eğitim, emülatörde çalışan basit bir iOS uygulaması oluşturmak için Objective-C diliyle Apple'ın Xcode aracını kullanır. Fiziksel bir cihaza ihtiyacınız yoktur. Xcode'u https://developer.apple.com/xcode/ adresinden edinebilirsiniz

CocoaPods

iOS için Places SDK, CocoaPods kapsülü olarak kullanılabilir. CocoaPods, Swift ve Objective-C projeleri için açık kaynak bağımlılık yönetimi aracıdır. Bu araca henüz sahip değilseniz, devam etmeden önce aracı yüklemeniz gerekir. Terminalden şu şekilde yüklenebilir:

sudo gem install cocoapods

CocoaPods hakkında daha fazla bilgi için CocoaPods Başlangıç Kılavuzu'na göz atın.

SDK'yı yükleme

SDK'yı yüklemek için, CocoaPods'un gerekli bağımlılıkları indirmek ve yapılandırmak üzere kullanacağı proje dizininizde bir Podfile oluşturmanız gerekir. Bunu yapmanın en kolay yolu, Xcode'da yeni bir Proje oluşturmak, buna bir Podfile eklemek ve kapsülleri buraya yüklemektir.

Xcode'u açtığınızda "Xcode' uygulamasına hoş geldiniz" ifadesini görürsünüz. Buradan "Yeni bir Xcode projesi oluşturun'

4f1ecee473937c7b.png

Sonraki ekranda, yeni projeniz için bir şablon istenir. iOS için "Tek Görünüm Uygulaması"nı seçin ve "İleri'

Ürün Adı istendiğinde, istediğiniz herhangi bir şeyi seçebilirsiniz. Ancak sizin için oluşturulan Paket Tanımlayıcıyı not ettiğinizden emin olun. Buna daha sonra ihtiyacınız olacaktır.

72fbf25cb2db22ad.png

"Sonraki&#39" tuşuna basın; proje sizin için oluşturulur. Dizinin oluşturulduğu dizini not edin. Xcode'u kapatın ve Terminal'i kullanarak bu dizine gidin.

Terminal'i kullanarak aşağıdaki komutu girin:

pod init

Podfile adlı bir dosya sizin için oluşturulur. Google Haritalar için aşağıdaki gibi bir kapsül eklemek üzere düzenleyin:

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

Kaydet'i tıklayın ve Xcode'u kapatın. Sonraki adımda temel projeyi düzenleyeceğiniz için projeyi kapatmayı unutmayın. Bu işlem tamamlandıktan sonra farklı bir proje dosyası açacaksınız ve bu geliştirici, daha önce Xcode'u kapatmadığında her şeyin neyle ilgili olduğu konusunda kafasını karıştıracak kadar yaygın bir şey olacak. Şimdi bir terminalde proje dizininize gidin ve "pod install&#39" komutunu şu şekilde çalıştırın:

789c5bc62817f68a.png

Bu işlem tamamlandığında kapsüller yüklenir ve yeni bir .xcworkspace dosyası oluşturulur. Şu andan itibaren proje için bunu kullanın. Ancak kodlamadan önce, ihtiyaç duyacağınız bir sonraki şey API anahtarıdır.

2. API Anahtarınızı Alma

Aşağıdaki etkinleştirme adımı için iOS için Haritalar SDK'sını etkinleştirin.

Google Haritalar Platformu'nu kurma

Henüz bir Google Cloud Platform hesabınız ve faturalandırmanın etkin olduğu bir projeniz yoksa faturalandırma hesabı ve proje oluşturmak için lütfen Google Haritalar Platformu'nu Kullanmaya Başlama kılavuzuna bakın.

  1. Cloud Console'da proje açılır menüsünü tıklayın ve bu codelab için kullanmak istediğiniz projeyi seçin.

  1. Google Cloud Marketplace'te bu codelab için gerekli olan Google Haritalar Platformu API'lerini ve SDK'larını etkinleştirin. Bunu yapmak için bu video veya bu dokümanlardaki adımları uygulayın.
  2. Cloud Console'un Kimlik Bilgileri sayfasında API anahtarı oluşturun. Bu video veya bu dokümanlardaki adımları uygulayabilirsiniz. Google Haritalar Platformu'na gönderilen tüm istekler bir API anahtarı gerektirir.

3. Places API Uygulaması Oluşturma

Artık bir konsol projesi oluşturduğunuz ve bu projede Places API'yi etkinleştirerek API anahtarı edindiğinize göre ilk Places API uygulamanızı kodlamaya başlayabilirsiniz.

Kapsül dosyalarını daha önce yüklediğinizde sizin için yeni bir .xcworkspace dosyası oluşturulmuştur. Bu öğeyi çift tıklayarak açın.

19d62f34c08e645c.png

Proje Gezgini'nde artık "Kapsüller" adlı yeni bir klasöre sahip olduğunuzu fark edeceksiniz. Bu işlem başarılı olduysa çerçevenin içinde bir Google Haritalar klasörü görürsünüz.

8844d861f64c61aa.png

4. Info.plist dosyasını düzenleyin.

Uygulamayı ilk çalıştırdığınızda iOS, kullanıcıdan konum hizmetlerine erişim izni vermesini isteyen bir iletişim kutusu gösterir. Bu iletişim kutusu, tanımladığınız bir dizeyi verir ve info.plist dosyasına eklersiniz. Bu dize mevcut değilse iletişim kutusu gösterilmez ve uygulamanız çalışmaz.

Info.plist dosyasını, proje gezgininde şu konumda bulabilirsiniz:

c224c920ab3f1ef.png

Bunu seçtiğinizde plist düzenleyiciyi görürsünüz.

859ca56f3b19da5.png

Fareyi öğelerden herhangi birinin üzerine getirdiğinizde "+' simgesini görürsünüz. Düğmeye bastığınızda yeni bir giriş görünür. Bu kutuya "NSLocationEveryUsageDescription' değerini girin.

9fb225d6f5508794.png

Yeni anahtarı eklemek için Enter tuşuna basın. Ardından, bu anahtarın Değer sütununu çift tıklayın ve bir dize ekleyin:

5aefeb184187aa58.png

Bu dize hakkında daha fazla bilgi için buradaki elma geliştirici belgelerini inceleyin.

5. Uygulama Yetkinizi Düzenleme

Proje gezgininde AppAuth.m dosyasını bulun ve açın. API Anahtarınızı eklemek için bu kimliği kullanacaksınız.

Dosyanın en üstünde, #import satırının hemen altına ekleyin:

@import GoogleMaps;

Ardından, hasFinishLaunchingWithOptions: işlevinde, "return YES' line"ın hemen üzerine şu değeri ekleyin:

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

Daha önce oluşturduğunuz API Anahtarını kullandığınızdan emin olun.

6. Resimli taslak dosyanızı düzenleme

Proje gezgininde Main.storyboard dosyasını açın. Sağ üst köşedeki kenar çubuğu düğmesine basarak kenar çubuğunun etkin olduğundan emin olun.

352af28b970d9e2.png

Ardından, Nesne Kitaplığı'nın seçili olduğundan emin olarak kenar çubuğunun alt tarafındaki Etiket Denetimi'ni bulun.

adec7051ae949531.png

Sol taraftaki Görünüm Kumandası Sahnesi'nde "Görünüm&#39" seçeneğinin belirlendiğinden emin olun:

e4827b92b5861e3e.png

Daha sonra, 7 etiketi görünüme sürükleyin ve bırakın. Hepsini burada gösterildiği gibi düzenleyin. Boyutlarını, gösterilenlerle eşleşecek şekilde sürükleyin. Etiketteki metni çift tıklayıp gerekli değeri yazarak düzenleyebilirsiniz:

f8a9457772358069.png

En alttaki (çok büyük) etiket için özellikler düzenleyiciye gidin ve 0 satırlı (varsayılan olarak 1) değerine ayarlandığından emin olun. Bu, birden fazla satır oluşturulmasına olanak tanır.

a4abacf00d8888fe.png

7. Değerler için Çıkışlar Oluşturma

3 "değer" etiketi için bir çıkış oluşturmanız gerekir. Bu sayede değerleri kod kullanarak değiştirebilirsiniz. Bunun için önce asistan düzenleyiciyi etkinleştirmen gerekiyor. Bunu yapmak için önce üzerindeki düğmeyi tıklayarak özellikler kenar çubuğunu kapatın. (Bu düğme önceki adımda gösteriliyordu)

Ardından, asistan düğmesini seçin. Asistan düğmesi burada gösterilir:

e92dcc4ceea20a51.png

ViewController.h dosyasını ürettiğinden emin olun. Görmüyorsanız Asistan penceresinin üst tarafındaki düzenleyiciyi kullanarak bunu değiştirebilirsiniz:

d42f0fcc18b84703.png

Ardından, Ctrl tuşunu basılı tutarken her bir etiketi sürükleyip Asistan'daki ViewController.h dosyasındaki @interface satırının altına bırakın. Ne tür bir bağlantı kurmak istediğinizi soran bir iletişim kutusu açılır:

a44b7888ed0f62b.png

Ayarların gösterildiği gibi olduğundan emin olun (Bağlantı: Çıkış; Tür: UILabel; Depolama: Zayıf) ve ardından her birine bir ad verin. Bu codelab'in amaçları doğrultusunda, Boylam, Enlem ve Rakım etiketlerini lblLongitude, lblEnlem ve lblAltidude olarak adlandırdım. Ayrıca alttan yukarı doğru büyük etiketi sürükleyin ve lblPlaces adını verin.

İşiniz bittiğinde, ViewController.h dosyanız şu şekilde görünmelidir:

#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. Konum ve Google İstemci API'ları için Başlık Dosyasını Düzenleme

Son adımlardan önce, places API'yi kullanmak için uygulamayı derlediğinizde, başlık dosyasında (ViewController.h) birkaç değişken daha oluşturmanız gerekir. Bunlar, Temel Konum Yöneticisi ve Temel Konum nesnesidir:

@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;

Ayrıca bir Google API İstemcisine ihtiyacınız olacaktır:

@property GMSPlacesClient *placesClient;

Son olarak, sınıfın CLLocationManagerTemsilcisini uygulayabilmesi için başlık dosyasını güncellemeniz gerekir:

@interface ViewController : UIViewController<CLLocationManagerDelegate>

İşiniz bittiğinde, başlık dosyanız şu şekilde görünmelidir:

#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. Görünüm Denetleyicinizi düzenleyin

İlk adım, Konum Yöneticisi'ni başlatmak için viewIdLoad işlevini düzenlemek, kullanıcının konuma erişim yetkisi istemek ve son olarak konum yöneticisini geçerli konumu izlemek üzere başlatmaktır. Ayrıca Google Places API istemcisini de başlatırsınız.

- (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. Konum Güncellemelerini Yönetme

Konum yöneticisi, satUpdateLocations işlevini çağırarak konum güncellemeleriyle birlikte Görünüm Denetleyicinize geri döner. Bunu ViewController.m cihazınıza eklemeniz gerekir. İşlev şöyle görünür:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    // Enter code here
}

Bu işlevin birkaç işlem yapması gerekecek.

Öncelikle, konum en son alınan konumla önbelleğe alınır:

self.location = locations.lastObject;

Ardından, Enlem, Boylam ve Rakım için üç etiket güncellenmelidir:

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

Daha sonra, Places İstemcisini kullanarak Places API'yi çağıracaksınız. Bunu, yerin olasılık listesini alacak olan geri çağırma işlevini belirterek yapabilirsiniz. Places API, bulunduğunuz konuma göre belirli bir yerde bulunma olasılığınızı belirler. Bu değer, olası yerlerin adını ve 0 ile 1 arasında bir değer sağlar. Bu değer, söz konusu yerde bulunma olasılığınızı içerir.

[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

Ardından geri çağırmayı uygulayabilirsiniz. Böylece bir olasılık listesi oluşturulur ve bu yerler için konumlar ve olasılıklar eklenir.

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

İşiniz bittiğinde, hasUpdateLocations fonksiyonunuz aşağıdaki gibi görünecektir:

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

Artık uygulamanızı çalıştırıp test etmeye hazırsınız.

11. Uygulamayı Emülatörde Çalıştırma

Uygulamayı, başlık çubuğundaki çalıştır düğmesini kullanarak çalıştırırsınız. Bu, aynı zamanda çalıştırma türünü seçmenize de olanak tanır. Burada da, emülatörü kullanarak iPhone 6'da testinizi görebilirsiniz.

bbbe0b8820c8a913.png

Çalıştır düğmesine bastığınızda, uygulama derlenip başlatılır. Uygulamanın, daha önce belirttiğiniz özel dize de dahil olmak üzere, konuma erişmesine izin verme isteğini görürsünüz.

b9bb2ace7e68f186.png

Bunu yaptıktan sonra, Enlem ve Boylam güncellemenizi görebilirsiniz. Konumu değiştirmek için Hata Ayıklama menüsünü seçip bir konum seçin. Örneğin, "Otoyol Sürücüsü"#39;

dcb1ce091d780f56.png

Bunu yaptığınızda, ilgili yerin güncelleme olasılığı bulunan yerini görürsünüz.

649e3eeb2321ae03.png

Hepsi bu kadar! iOS'teki Google Rehber API'sini kullanarak mevcut yer ayrıntılarına başarıyla eriştiniz.