Firebase GoogleSignIn-IOS

S.Tunahan Ustuntepe
4 min readFeb 1, 2023

--

HOŞGELDİN !!!

Bu paylaşımım da Firebase üzerinden Google ile kullanıcı kayıt işleminin nasıl yapıldığına dair bilgiler bulacaksın.

Bir önce ki paylaşımım da Uygulamamızı firebase’e nasıl bağladığımızı anlatmış olduğum için bu paylaşımda bu kısımları geçiyoruz.

GoogleSignIn:

Firebase’in sayfasın da bulunan anlatımı gösteriyorum.

İlk önce Firebasede Authentication kısmından Google’ı etkinleştirmemiz gerekiyor.

Şimdi Uygulamamıza “GoogleSignIn” SDK sini yüklememiz gerekiyor.Bunun için “CocoaPods” kullanarak son sürümünü indirdiğimde bir hata ile karşılaştım.Hata Firebase’de gerekli kodları yazdığımda yazılan method hata çıkartıyordu.Bunun için “Swift Package Manager” ile yüklemeyi gerçekleştirdim

https://github.com/google/GoogleSignIn-iOS

Son sürümü 7.0.0 bu sürümde hata aldığımız için 6.0.0 sürümünü yüklüyoruz.

Uygulamamızda “AppDelegate.swift” dosyamıza gelip gerekli kütüphaneleri ve methodları ekleriz.

1.

import FirebaseCore
import GoogleSignIn

2.

Firebase’i projemize eklerken indirmiş olduğumuz “GoogleSevice-Info” dosyasında bulunan “REVERSED_CLIENT_ID” bilgisini “Uygulamanın Url types” kısmına eklememiz gerekiyor.

3.

Projemize tekrardan geliyoruz. “AppDelegate.swift” dosyasına “FirebaseApp.configure()” kodumuzu eklememiz gerekiyor.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()

return true
}

Daha sonra Aşağıdaki methodu ekliyoruz.

@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any])
-> Bool {
return GIDSignIn.sharedInstance.handle(url)
}

4.

Şimdi “Google Kimlik Doğrulama Belirteci” için gerekli adımları yapmamız gerekiyor.

“ViewController.swift” dosyamıza geliyoruz.Bir button oluşturuyoruz.

    @IBAction func signInGoogle(_ sender: UIView)  {

guard let clientID = FirebaseApp.app()?.options.clientID else { return }
// Create Google Sign In configuration object.
let config = GIDConfiguration(clientID: clientID)
// Start the sign in flow!
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in

if let error = error {
// ...
return
}

guard
let authentication = user?.authentication,
let idToken = authentication.idToken
else {
return
}

let credential = GoogleAuthProvider.credential(withIDToken: idToken,
accessToken: authentication.accessToken)
}
}

Google’dan alınan kimlik Firebase e yollanması için button içerisine

“Auth.auth().SignIn()” methodunu kullanmamız gerekiyor.

Firebase İle Kimlik Doğrulaması:

   @IBAction func signInGoogle(_ sender: UIView)  {

guard let clientID = FirebaseApp.app()?.options.clientID else { return }
// Create Google Sign In configuration object.
let config = GIDConfiguration(clientID: clientID)
// Start the sign in flow!
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in

if let error = error {
// ...
return
}

guard
let authentication = user?.authentication,
let idToken = authentication.idToken
else {
return
}

let credential = GoogleAuthProvider.credential(withIDToken: idToken,
accessToken: authentication.accessToken)


// Authenticate with Firebase
Auth.auth().signIn(with: credential) { authResult, error in
if error != nil {

print("error")
}else {

performSegue(withIdentifier: "secondVC", sender: nil)

}
}

}
}

Kayıt işlemi yapıldıktan sonra kullanıcıyı yönlendirmek istediğimiz sayfaya “performSegue” ile yönlendiririz.

Kayıt İşlemi Gerçekleşti

Giriş Yapıldıktan Sonra Kullanıcı Hatırlama İşlemi

Projemizde bulunana “SceneDelegete.swift” dosyasına geliyoruz.Window nesnemizin olması gerekiyor.Burada Scene methodumuzun içerisine gerekli kodlarımız yazarız.

import FirebaseAuth
let currenctUser = Auth.auth().currentUser

Kullanıcı daha önceden giriş yaptıysa “Entry Point(uygulamanın hangi storyboard dan başlayacağını gösteren ok )” imizi Ana sayfadan başlatmamız gerekiyor bunun için şu kodları yazmamız gerekiyor.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {


if currenctUser != nil {
let board = UIStoryboard(name: "Main", bundle: nil)
let vc2 = board.instantiateViewController(withIdentifier: "secondVC2")
window?.rootViewController = vc2
}
guard let _ = (scene as? UIWindowScene) else { return }
}

board → storyboard ımızı tanımlıyoruz.

vc2 → ana sayfayamız “secondVC” adında “Storyboard ID” ye sahip,sayfamıza vc2 üzerinden gitmiş olacağız.

“window?.rootViewController” → diyerek açılacak sayfanın tabBar olsun diyoruz.

Bu işlem bittikten sonra Kullanıcı bir kere giriş yaptıktan sonra kendisi çıkış işlemi gerçekleştirmediği sürece tekrardan giriş ekranına ulaşmaz.

Logout:

Çıkış işlemini bir buttona atıyoruz.Kullanıcı Çıkış buttonuna bastığında hafızada tutulan kullanıcı hatırlama işlemi sonlanır.Böylece kullanıcı uygulamayı tekrar açtığında tekrardan kayıt olurken kullanmış olduğu bilgileri girerek kayıt olmak zorunda kalır.

   @IBAction func signOutButtonClick(_ sender: Any) {
let firebaseAuth = Auth.auth()
do {
try firebaseAuth.signOut()
performSegue(withIdentifier: "tobackFirstPage", sender: nil)
} catch let signOutError as NSError {
print("Error signing out: %@", signOutError)
}

}

--

--