https://firebase.google.com/docs/ios/setup?hl=ko&authuser=0
1. ๋ก๊ทธ์ธ(๋น๋ฐ๋ฒํธ ์ธ์ฆ) ๊ตฌํํ๊ธฐ
https://firebase.google.com/docs/auth/ios/password-auth?hl=ko&authuser=0
Firebase Document ๊ฐ ๋๋ฌด ์๋์ด ์์ด์ ๋ฐ๋ผํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
1) ์ธ์ฆ๊ณผ ๊ด๋ จ๋ firebase ๋ชจ๋ import ํ๊ธฐ
2) ์ฝ๋์ ์ฐ๊ฒฐํ๊ธฐ
๊ณ์ ์์ฑ์ด ํ์ํ ๋ถ๋ถ์ ์ฐ๊ฒฐํด์ค๋ค. ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
import UIKit
import FirebaseAuth
class RegisterViewController: UIViewController {
@IBOutlet weak var emailTextfield: UITextField!
@IBOutlet weak var passwordTextfield: UITextField!
@IBAction func registerPressed(_ sender: UIButton) {
if let email = emailTextfield.text, let password = passwordTextfield.text {
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
if let e = error {
print(e)
}
else {
self.performSegue(withIdentifier: "RegisterToChat", sender: self)
}
}
}
}
}
text field ๋ก email ๊ณผ password ๋ฅผ๋ฐ๊ณ , ์ฌ์ฉ์๋ฅผ ์์ฑํด์ค๋ค. error ๊ฐ ์์ ๊ฒฝ์ฐ ์ ํ๋ฉด์ผ๋ก ์ ํํ๋ค.
3) firebase ๊ถํ์์ Sign-in method ์ ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ ์ถ๊ฐํด์ฃผ๊ธฐ
์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ๋ฉ์๋ ๊ตฌํํ๊ฒ ๋ค๋ ๋ง!
4) ์คํ
์์ด๋/ํจ์ค์๋ ์ ๋ ฅํ ๋ฑ๋ก์ ๋๋ฅด๋ฉด Firebase ์ ์ถ๊ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋น๋ฐ๋ฒํธ๋ฅผ 6๊ธ์ ์ด์ ์ฌ์ฉํ๋ผ๋ ์ค๋ฅ์ iCloud Keychain ์ ์ด์ฉํด์ ๋ ๊ฐ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ง๋ค๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ๋ฌ๋ค.
2. ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
Firebase Document์ ์๋ ๋๋ก email ๊ณผ password ๋ฅผ ๋ฐ์์ signIn ํจ์์ ์ ๋ฌํด์ฃผ๋ฉด ๋๋ค.
๋ณธ ํ๋ก์ ํธ์์๋ login ์ฐฝ -> ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ๋ฐ๋ก ์ฑํ ์ฐฝ์ผ๋ก ์ ํ๋๋๋ก ํ๋ค.
์ฐธ๊ณ ๋ก [weak self] ๋ผ๋ ๊ตฌ๋ฌธ์ด ๋์๋๋ฐ, ๋ด๊ฐ ์ดํดํ ๋ฐ๋ก๋ ๊ทธ๋ฅ self๋ง ์ฌ์ฉํ์ ๋ Swift ARC(Automatic reference counting) ์์คํ ์ด ์๋์ํ๋ ์ํฉ์ด ์๊ธธ ๊ฒ์ ๋ฐฉ์งํ์ฌ weak self๋ก ๋ช ์ํด์ฃผ๋ ๊ฒ ๊ฐ๋ค. ์๋ ๋งํฌ ์ฐธ์กฐ.
https://www.quora.com/What-does-weak-self-mean-in-a-Swift-Closure
์ ์ฒด์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import UIKit
import FirebaseAuth
class LoginViewController: UIViewController {
@IBOutlet weak var emailTextfield: UITextField!
@IBOutlet weak var passwordTextfield: UITextField!
@IBAction func loginPressed(_ sender: UIButton) {
if let email = emailTextfield.text, let password = passwordTextfield.text{
Auth.auth().signIn(withEmail: email, password: password) { authResult, error in
if let e = error {
print(e)
}
else{
self.performSegue(withIdentifier: "LoginToChat", sender: self)
}
}
}
}
}
๊ทผ๋ฐ Angela๋ ๊ทธ๋ฅ weak self ํค์๋ ๋ช ์ ์์ด ์ผ๋ค. Swift ๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด์ ARC๊ฐ ๋ ๋๋ํด์ง๊ฒ ์๋๊น..?
๋ฌดํผ ์๋ ๋ชจ์ต์ ์๋์ ๊ฐ๋ค.
3. ๋ก๊ทธ์์ ๊ตฌํํ๊ธฐ
1) Logout ๋ฒํผ์ผ๋ก ์ฌ์ฉํ bar button ์ ๋ง๋ค์ด์ ์ฝ๋์ IBAction ํจ์๋ก ์ฐ๊ฒฐํด์ค๋ค.
2) Firebase Document ์ ์๋ logout ์ฝ๋๋ฅผ ์์ฑํด์ค๋ค.
3) logout ์ ๋งจ ์ฒ์ ํ๋ฉด์ผ๋ก ๋์์ฌ ์ ์๋๋ก popToRootViewController ํจ์๋ฅผ ํธ์ถํด์ค๋ค.
import UIKit
import FirebaseAuth
class ChatViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var messageTextfield: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sendPressed(_ sender: UIButton) {
}
@IBAction func logOutPressed(_ sender: UIBarButtonItem) {
do {
try Auth.auth().signOut()
navigationController?.popToRootViewController(animated: true)
} catch let signOutError as NSError {
print("Error signing out: %@", signOutError)
}
}
}
navigationcontroller ์ popToRootViewController ํจ์๋ ๋งจ ์ฒ์ Root ํ๋ฉด์ผ๋ก ๋์์ฌ ์ ์๋๋ก ํ๋ ํจ์์ด๋ค.
'๐ฑ App Development Study > iOS๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Udemy iOS & Swift Bootcamp] Table View(DataSource, Delegate) (0) | 2023.06.27 |
---|---|
[Udemy iOS & Swift Bootcamp] ๋ฌธ์์ด์ ์ํ ์์์ฝ๋ํ์ผ ๋ง๋ค๊ธฐ (0) | 2023.06.22 |
[Udemy iOS & Swift Bootcamp] 1. Firebase ์ถ๊ฐํ๊ธฐ (0) | 2023.06.19 |
[Udemy iOS & Swift Bootcamp] 3rd Party Libraries & Cocoapods (1) | 2023.06.18 |
[Udemy iOS & Swift Bootcamp] Typing Animation(Timers, For loops) (0) | 2023.06.17 |