1. Başlamadan önce
Kodlamaya başlamadan önce ayarlamanız gereken birkaç ön koşul vardır.
Xcode
Bu eğiticide, bir emülatörde çalışan basit bir iOS uygulaması oluşturmak için Objective-C diliyle birlikte Apple'ın Xcode aracı kullanılır. Fiziksel bir cihaza ihtiyacınız yoktur. Xcode'u https://developer.apple.com/xcode/ adresinden edinebilirsiniz.
CocoaPods
iOS için Yerler SDK'sı, CocoaPods pod'u olarak kullanılabilir. CocoaPods, Swift ve Objective-C projeleri için açık kaynaklı bir bağımlılık yönetimi aracıdır. Bu aracı henüz yüklemediyseniz devam etmeden önce yüklemeniz gerekir. Terminalden şu şekilde yüklenebilir:
sudo gem install cocoapods
CocoaPods hakkında daha fazla bilgi için CocoaPods'u Kullanmaya Başlama Kılavuzu'na bakın.
SDK'yı yükleme
SDK'yı yüklemek için proje dizininizde bir Podfile oluşturmanız gerekir. CocoaPods, gerekli bağımlılıkları indirmek ve yapılandırmak için bu dosyayı kullanır. Bu işlemi en kolay şekilde yapmak için Xcode'da yeni bir proje oluşturun, bu projeye bir Podfile ekleyin ve pod'ları buraya yükleyin.
Xcode'u açtığınızda "Welcome to Xcode" (Xcode'a Hoş Geldiniz) ekranı gösterilir. Burada "Yeni bir Xcode projesi oluştur"u seçin.
Sonraki ekranda yeni projeniz için bir şablon seçmeniz istenir. iOS için "Single View Application" (Tek Görünüm Uygulaması) seçeneğini belirleyin ve "Next" (İleri) seçeneğine basın.
Ürün adı istendiğinde istediğiniz adı seçebilirsiniz ancak sizin için oluşturulan paket tanımlayıcıyı not etmeyi unutmayın. Bu bilgiye daha sonra ihtiyacınız olacak.
"İleri"yi tıkladığınızda proje sizin için oluşturulur. 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 oluşturulur. GoogleMaps için aşağıdaki gibi bir pod ekleyerek düzenleyin:
target '{YOUR APP NAME}' do
pod 'GoogleMaps'
end
Kaydedin ve Xcode'u kapatın. Bir sonraki adımda temel projeyi düzenleyeceğiniz için bu dosyayı kapattığınızdan emin olun. İşlem tamamlandıktan sonra farklı bir proje dosyası açacaksınız. Geliştiricilerin, Xcode'u daha önce kapatmamaları durumunda her şeyin nerede olduğu konusunda kafalarının karışması oldukça yaygın bir durumdur. Şimdi bir terminalde proje dizininize gidin ve "pod install" komutunu aşağıdaki gibi çalıştırın:
İşlemi tamamladığınızda pod'ler yüklenir ve yeni bir .xcworkspace dosyası oluşturulur. Bundan sonra proje için bu kimliği kullanın. Ancak kodlamadan önce ihtiyacınız olan 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 ayarlama
Henüz bir Google Cloud Platform hesabınız ve faturalandırmanın etkinleştirildiği bir projeniz yoksa lütfen faturalandırma hesabı ve proje oluşturmak için Google Haritalar Platformu'nu Kullanmaya Başlama kılavuzuna bakın.
- Cloud Console'da proje açılır menüsünü tıklayın ve bu codelab için kullanmak istediğiniz projeyi seçin.
- Bu codelab için gereken Google Haritalar Platformu API'lerini ve SDK'larını Google Cloud Marketplace'te etkinleştirin. Bunun için bu videodaki veya bu dokümandaki adımları uygulayın.
- Cloud Console'un Kimlik Bilgileri sayfasında bir API anahtarı oluşturun. Bu videodaki veya bu dokümandaki adımları uygulayabilirsiniz. Google Haritalar Platformu'na yapılan tüm istekler için API anahtarı gerekir.
3. Places API uygulaması oluşturma
Artık bir konsol projesi oluşturup Places API'yi etkinleştirdiğinize ve API anahtarı aldığınıza göre ilk Places API uygulamanızı kodlamaya başlayabilirsiniz.
Daha önce pod dosyalarını yüklediğinizde sizin için yeni bir .xcworkspace dosyası oluşturulmuştu. Üzerine çift tıklayarak açın.
Proje Gezgini'nde artık "Pods" adlı yeni bir klasör olduğunu görürsünüz. Bu işlem başarılı olursa klasörde çerçeveleri içeren bir GoogleMaps klasörü görürsünüz.
4. Info.plist dosyasını düzenleyin.
Uygulamayı ilk kez ç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 kutusunda, tanımladığınız bir dize verilir ve bu dizeyi Info.plist dosyasına yerleştirirsiniz. Bu dize yoksa iletişim kutusu gösterilmez ve uygulamanız çalışmaz.
Info.plist dosyasını proje gezgininde şu konumda bulabilirsiniz:
Dosyayı seçtiğinizde plist düzenleyici gösterilir.
Fareyi öğelerin herhangi birinin üzerine getirdiğinizde "+" simgesi görünür. Düğmeye bastığınızda yeni bir giriş gösterilir. Bu kutuya "NSLocationAlwaysUsageDescription" değerini girin.
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:
Bu dize hakkında daha fazla bilgi edinmek için Apple geliştirici belgelerini buradan inceleyin.
5. Uygulama temsilcinizi düzenleme
Proje Gezgini'nde AppDelegate.m dosyasını bulup açın. Bu dosyayı API anahtarınızı eklemek için kullanacaksınız.
Dosyanın en üstünde, #import satırının hemen altına şunu ekleyin:
@import GoogleMaps;
Ardından, didFinishLaunchingWithOptions: işlevinde "return YES" satırının hemen üstüne aşağıdakileri ekleyin:
[GMSServices provideAPIKey:@"<Add your API Key>"];
Daha önce oluşturduğunuz API anahtarını kullandığınızdan emin olun.
6. Senaryo panosu dosyanızı düzenleme
Proje Gezgini'nde Main.storyboard dosyasını açın. Sağ üst köşedeki kenar çubuğu düğmesine basarak kenar çubuğunun etkin olduğundan emin olun.
Ardından, kenar çubuğunun en altında, Nesne Kitaplığı'nın seçili olduğundan emin olarak Etiket Kontrolü'nü bulun.
Sol taraftaki View Controller Scene'de "View" seçeneğinin belirlendiğinden emin olun:
Ardından, 7 etiketi görünümün üzerine sürükleyip bırakın. Bunları burada gösterildiği gibi düzenleyin. Boyutlarını, gösterilenlerle eşleşecek şekilde sürüklediğinizden emin olun. Etiketteki metni çift tıklayıp gerekli değeri yazarak düzenleyebilirsiniz:
En alttaki etiket (gerçekten büyük olan) için özellik düzenleyiciye gidin ve 0 satır olarak ayarlandığından emin olun (varsayılan olarak 1 satır ayarlanır). Bu, birden fazla satırın oluşturulmasına olanak tanır.
7. Değerler için Çıkış Noktaları Oluşturma
3 "değer" etiketi için bir çıkış oluşturmanız gerekir. Bu sayede, kod kullanarak değerlerini değiştirebilirsiniz. Bunu yapmak için önce yardımcı düzenleyiciyi etkinleştirmeniz gerekir. Bunu yapmak için önce özellikler kenar çubuğunu kapatın. (Bu düğme önceki adımda gösterilmişti)
Ardından, burada gösterilen çift daire şeklindeki asistan düğmesini seçin:
ViewController.h dosyasının oluşturulduğundan emin olun. Değilse asistan penceresinin üst kısmındaki düzenleyiciyi kullanarak bunu değiştirebilirsiniz:
Ardından, CONTROL tuşunu basılı tutarak her etiketi sürükleyin ve yardımcıdaki ViewController.h dosyasında @interface satırının altına bırakın. Ne tür bir bağlantı oluşturmak istediğinizi soran bir iletişim kutusu açılır:
Ayarların gösterildiği gibi olduğundan (Bağlantı: Çıkış; Tür: UILabel; Depolama: Zayıf) emin olun ve her birine ad verin. Bu codelab'de, boylam, enlem ve yükseklik etiketlerine sırasıyla lblLongitude, lblLatitude ve lblAltitude adını verdim. Ayrıca alttaki büyük etiketi de sürükleyip lblPlaces olarak adlandırın.
İşleminiz tamamlandığında ViewController.h dosyanız aşağıdaki gibi 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 Client API'leri için Başlık Dosyasını Düzenleme
Son adımlardan önce (uygulamayı yerler API'sini kullanacak şekilde oluşturduğunuz adımlar), başlık dosyasında (ViewController.h) birkaç değişken daha ayarlamanız gerekir. Bunlar, Core Location Manager ve Core Location nesnesidir:
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;
Ayrıca bir Google API istemcisine de ihtiyacınız vardır:
@property GMSPlacesClient *placesClient;
Son olarak, sınıfın CLLocationManagerDelegate'i uygulayabilmesi için üstbilgi dosyasını güncellemeniz gerekir:
@interface ViewController : UIViewController<CLLocationManagerDelegate>
İşleminiz tamamlandığında başlık dosyanız aşağıdaki gibi 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üzenleme
İlk adım, viewDidLoad işlevini düzenleyerek konum yöneticisini başlatmak, kullanıcının konuma erişim yetkisini istemek ve son olarak konum yöneticisini başlatarak mevcut konumu izlemesini sağlamaktır. Google Places API istemcisini de başlatacaksı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 işleme
Konum yöneticisi, didUpdateLocations işlevini çağırarak konum güncellemeleriyle View Controller'ınızı geri arar. Bunu ViewController.m dosyanıza eklemeniz gerekir. İşlev şu şekilde görünür:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
// Enter code here
}
Bu işlevin birkaç işlem yapması gerekir.
Öncelikle, konumu en son alınan konumla birlikte önbelleğe alır:
self.location = locations.lastObject;
Ardından, enlem, boylam ve yükseklik 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];
Ardından, Places API'yi places istemcisini kullanarak çağıracaksınız. Bunu, yer olasılıkları listesini alacak geri çağırma işlevini belirterek yaparsınız. Places API, konumunuza göre belirli bir yerde olma olasılığınızı belirler. Olası yerlerin adını ve bu yerde olma olasılığınızı içeren 0 ile 1 arasında bir değer döndürür.
[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {
Ardından geri aramayı uygulayabilirsiniz. Bu işlem, olasılıklar listesinde tekrarlama yaparak yerleri ve bu yerlerin olasılıklarını ekler.
[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;
}];
İşleminiz tamamlandığında didUpdateLocations işleviniz aşağıdaki gibi görünmelidir:
-(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ırmaya ve test etmeye hazırsınız.
11. Uygulamayı Emülatörde Çalıştırma
Başlık çubuğundaki çalıştır düğmesini kullanarak uygulamayı çalıştırırsınız. Bu sayede çalıştırma türünü de seçebilirsiniz. Burada gördüğünüz gibi, emülatörü kullanarak iPhone 6'da test yapıyorum.
Çalıştır düğmesine bastığınızda uygulama oluşturulup başlatılır. Uygulamanın konuma erişmesine izin verme isteği gösterilir. Bu istekte, daha önce belirttiğiniz özel dize de yer alır.
Bu işlemi yaptığınızda enlem ve boylamınız güncellenir. Konumu değiştirmek için Hata Ayıklama menüsünü seçip bir konum belirleyin. Örneğin, "Otoyolda Sürüş"ü seçebilirsiniz.
Bunu yaptığınızda, olası yerleri güncellenen konum gösterilir. Bu, otoyol sürüşünü simüle eder.
Hepsi bu kadar! iOS'te Google Places API'yi kullanarak mevcut yer ayrıntılarına başarıyla erişiyorsunuz.