iOS Google Places API Entegrasyonu

Android ortamında Google Places API’nin nasıl entegre edileceğinden burda bahsetmiştim, bahsederken Places API’nin getirdiği avantajlarına ve limitlerine değinmiştim. Bu nedenle tekrar burda tekrar açıklamayıp, direkt olarak iOS platformunda nasıl kullanılacağından bahsedeceğim.

Places API kütüphanesinin eklenmesi

Places API kütüphanelerini manuel olarak da indirip projenize ekleyebilirsiniz ama ben CocoaPods kullanarak devam etmeyi tercih ettim. İlk olarak Pod.file dosyamıza aşağıdaki şekilde gerekli kütüphaneleri ekliyoruz :

(ios_places_api_sample yerine sizin kendi projenizin ismi gelmeli )

Ardından projemizin klasörüne girip, pod install komutunu çalıştırıp kütüphanelerin indirilmesini bekliyoruz.

Ben burda şu şekilde bir hata ile karşılaştım vecocoapods klasörünün içine girip **git pull** yaptığımda çözüldü. Bu hata sizde görülmeyebilir, benim cocoapods sürümümle ilgili bir sorundu.

Hata : Unable to find a specification for GooglePlacePicker

Başarılı bir şekilde tamamlanan pod install komutundan sonra artık api anahtarımızı oluşturup projemize eklememiz gerekiyor. Google Console‘dan yine oluşturduğumuz proje için iOS key seçeneğini seçerek api anahtarınızı üretebilirsiniz.

Ardından AppDelegate.swift dosyasında didFinishLaunchingWithOptions methodunun içerisinde api anahtarımızı ekliyoruz.

Benim için yine işler çok düzgün gitmedi ve api anahtarını yukarıdaki gibi kullanıp uygulamayı çalıştırdığımda şöyle bir hata aldım : 

Hata : Terminating app due to uncaught exception ‘GMSServicesException’, reason: ‘Google Maps SDK for iOS must be initialized via [GMSServices provideAPIKey:...] prior to use’

Uygulamamın Google Console’daki özelliklerini ve yaptığım adımları tekrar gözden geçirdim ama problemi ancak GMSServices provideAPIKey methodunu da çağırarak çözebildim.

Henüz mantıklı bir cevap bulabilmiş değilim, sorunu tam anladığımda burayı da güncelleyeceğim.

Bu işlemin de sonunda artık kütüphanelerimizi kullanabilir hale geliyoruz. O zaman Place Picker’ı uygulamamıza ekleyerek başlayalım.

Place Picker

Benim örnek uygulamamda Select Place butonuna tıkladığımızda  place picker ekranı açılıyor ve kullanıcı istediği lokasyonu seçtiğinde, lokasyon bilgisi ekrana yazdırılıyor. Place picker kullanmanız için uygulamanızda lokasyon kullanım izinlerini almanız gerekiyor.

LocationManager benim anlık konumu almak için bu projede oluşturduğum bir sınıf, siz istediğiniz şekilde anlık konumu alıp burda latitude ve longitude değerlerine tanımlayabilirsiniz. )

Place picker uygulamanızda şu şekilde görülecek :

Anlık konum – Etrafımdaki Yerler

Places API ile birlikte kullanıcının anlık konumunu ve konuma bağlı olarak etrafındaki yerleri elde edebilirsiniz. Bunun için kullanıcıdan lokasyon izni almanız gerekiyor.

Ardından GMSPlacesClient örneğini oluşturup currentPlaceWithCallback methodu ile birlikte kullanıcının etrafındaki yerlere ulaşabilirsiniz. currentPlaceWithCallback methodu GMSPlaceLikelihood listesi dönecektir, her GMSPlaceLikelihood objesi bir yer bilgisi ve benzerlik oranı içerir. Benzerlik oranı (likelihood) ne kadar yüksekse bulunduğu konum olma olasılığı daha yüksek anlamına gelir.

Place Autocomplete

Autocomplete bileşeni ise kullanıcıdan alınan arama anahtarına göre GMSPlace objelerini geri döndürür. Kullanıcı seçtiği yer nesnesi ile yer ile ilgili ayrıntılı bilgileri elde edebilir. Autocomplete servisini bir UI elemanı olarak uygulamanıza ekleyebilir ya da sadece kodun içerisinde çağırarak kullanabilirsiniz. Arayüz elemanı olarak kullanmak istediğinizde de farklı şekillerde ekleme ve arayüzü UIAppearance protokol kullanarak kendinize göre değiştirme şansınız var. Ben yandaki şekilde eklemeyi tercih ettim ama hem arayüz olarak farklı şekillerde ekleyebilir hem de GMSPlacesClient‘ın autocompleteQuery:bounds:filter:callback methodu ile kod tarafında da yer bilgilerini çekebilir ve kullanabilirsiniz.

Ben GMSAutocompleteViewController kullanarak ilerleyeceğim. UISearchController oluşturarak searchResultController parametresi olarak GMSAutocompleteViewController veriyoruz ve bunu ekrana ekliyoruz.

Arama sonuçlarını ve hata durumlarını yönetebilmek için ise GMSAutocompleteResultsViewControllerDelegate protokolünü uygulamanız gerekir.

Google Places API Kullanım Limiti

Google Places API’nin maalesef ücretsiz kullanım için limiti var. Günde 1000 sorgu olan bu limiti aştığınızda uygulamanızda hatalarla karşılaşabilirsiniz. Eğer çok fazla sorgu isteği alacak olan bir uygulamanız var ise ücretli versiyonlara geçmeniz gerekir. Bu sorgu limiti yakın yerlerin sorgusu, autocomplete sorgularının toplamı olarak hesaplanıyor. PlacePicker kullanımı bu limite dahil değil, onu sınırsız şekilde kullanabilirsiniz.

Bu yazıdaki örnek projeyi de https://github.com/busradeniz/ios_places_api_sample linkinden indirip inceleyebilirsiniz.

Leave a reply:

Your email address will not be published.

Site Footer