
๋ชจ๋ฐ์ผ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋จธ์ ๋ฌ๋ https://firebase.google.com/products/ml-kit/?authuser=0 Firebase ML Kit๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ จ๋ ๋จธ์ ๋ฌ๋ ๊ฐ๋ฐ์๋ ์ด์ ๋ง ์์ํ ์ด๋ณด์๋ ๊ด๊ณ์์ด ๊ฐ๋ ฅํ ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฅ์ Android์ฉ ๋๋ iOS์ฉ ์ฑ์ ๋์ ํ ์ ์์ต๋๋ค. firebase.google.com ML Kit๋ ๊ธฐ๊ธฐ๋ณ API ์ Cloud API๊ฐ ์๋ค. ๊ธฐ๊ธฐ๋ณ API๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ , ๋คํธ์ํฌ ์ฐ๊ฒฐ ์์ด ์๋ํ๋ฉฐ, ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ API๋ Google Cloud Platform์ ๊ฐ๋ ฅํ ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ ํ์ฉํ์ฌ ๋ณด๋ค ๋์ ์ ํ๋๋ฅผ ์ ๊ณตํ๋ค๊ณ ํ๋ค..! ๊ทธ๋ฆฌ๊ณ ์ปค์คํ ๋ชจ๋ธ๋ ์ฌ์ฉํ ์ ์๋ค...!!! >__

๋ก๊ทธ์ธ๋ Auth์ signIn ํจ์๋ฉด ๊ฐ๋จํ ๋ -! FirebaseManager์ ๋ค์๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ class func login(email: String, password: String, completion: @escaping (Result) -> Void) { Auth.auth().signIn(withEmail: email, password: password) { (result, error) in if let result = result { completion(.success(result)) } else if let error = error { completion(.failure(error)) } } } LoginViewModel๋ ๊ตฌํํด์ค๋ค struct LoginViewModel { stru..

ํ์๊ฐ์ ์ Auth์ createUser๋ผ๋ ํจ์๋ง ๋ถ๋ฌ์ฃผ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค FirebaseManager์ signup ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ค๋ค extension FirebaseManager { class func signup(email: String, password: String, completion: @escaping (Result) -> Void) { Auth.auth().createUser(withEmail: email, password: password) { (result, error) in if let result = result { completion(.success(result)) } else if let error = error { completion(.failure(error)) } } ..

Firebase ์ฝ์์ ๋ค์ด๊ฐ์ ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ ์ค์ ์ ํด์ค๋๋ค --! ์ด๋ ๊ฒ ์ฌ๋ฌ ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ๋ค์ด ์์ต๋๋ค : ) ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ๋ฐฉ๋ฒ์ ์ค์ ํด์ค๋๋ค ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ๋ก ์์ ๋ก๊ทธ์ธ, ํ์๊ฐ์ ํ๋ฉด์ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด์ค๋๋ค Podfile์ ๋ฅผ ์ถ๊ฐํ๊ณ ์ค์นํด์ค๋๋ค

firebase-modify๋ผ๋ feature๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ค๋๋ค ํ๋ก์ ํธ์์๋ modify ๋์ change๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, change๋ผ๋ ๋ค์ด๋ฐ์ ์ฌ์ฉํ์ฌ ์ฝ๋ฉํด์ฃผ๊ฒ ์ต๋๋ค FirebaseManager์ changeํจ์๋ฅผ ์ถ๊ฐํด์ค๋๋ค ์์ ํ ๋ฉ๋ชจ์ ํค๊ฐ๊ณผ ์๋ก์ด ๋ฉ๋ชจ๋ฅผ ๋ฐ๋ ํจ์์ ๋๋ค class func change(key: String, to memo: Memo) { let rootRef = Database.database().reference() let memoRef = rootRef.child("memos").child(key) memoRef.setValue(memo.toDictionary()) } ์์ ์ ๋๋ฅด๋ฉด ์ด๋ ๊ฒ AlertViewController๊ฐ ๋ ์ผํ๋ฏ๋ก textfiel..

firebase-delete๋ผ๋ feature ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋๋ค FirebaseManager ์์ delete๋ผ๋ class fucntion์ ๋ง๋ญ๋๋ค class func delete(key: String) { let rootRef = Database.database().reference() let memoRef = rootRef.child("memos").child(key) memoRef.removeValue() } deleteํ๋ ค๋ฉด ๊ฐ ๋ฐ์ดํฐ(๋ฉ๋ชจ)์ key ๊ฐ์ ์๊ณ ์์ด์ผํฉ๋๋ค ํ์ฌ๋ Memo๋ฅผ Firebase์ ์ถ๊ฐํ ๋ firebase๊ฐ ์๋์ผ๋ก key๊ฐ(ํน์ ์์ด๋ ๊ฐ) ์ ๋ง๋ค์ด์ฃผ๊ฒ ์ค์ ๋์ด์์ต๋๋ค class func add(memo: Memo) { let rootRef = Dat..

์ผ๋จ feature๋ธ๋์น๋ก firebase-fetch๋ฅผ ํ๋ ๋ง๋ค๊ณ ์์ ์ ์์ํฉ๋๋ค memos์ ์ด๋ค ๋ณํ๋ ๊ด์ฐฐํ๊ฒ ๋ค(?) ํ๋ ์ฝ๋์ธ๋ฐ, let rootRef = Database.database().reference() rootRef.child("memos").observe(.value) { snapshot in let memosDic = snapshot.value as? [String: Any] ?? [:] for (key, value) in memosDic { print("key \(key) value\(value)") } } ๋์ ๋๋ฆฌ๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด key๋ ์๋์ผ๋ก ๋ง๋ค์ด์ค ๋ฉ๋ชจ์ ์์ด๋ / value๋ ํด๋น๋ฉ๋ชจ์ ์์ฑ์ ๋ํ ๋์ ๋๋ฆฌ์ด๋ค key -Lfu2XqePDtQA6KcyvJs value{..

FirebaseManager ํด๋์ค๋ฅผ ๋ง๋ค๊ณ class fuction์ธ add๋ฅผ ๋ง๋ค์ด์ค๋ค import Foundation import Firebase class FirebaseManager { class func add(memo: Memo) { let rootRef = Database.database().reference() let memosRef = rootRef.child("memos") let memoRef = memosRef.childByAutoId() memoRef.setValue(memo.toDictionary()) } } Memo ๊ตฌ์กฐ์ฒด์ dictionary๋ก ๋ฐ๊พธ๋ ํจ์๋ ์ถ๊ฐํด์ค๋ค struct Memo { let title: String } extension Memo { func toD..

1. firebase-setup ์ด๋ผ๋ feature ๋ธ๋์น๋ฅผ ๋ง๋ ๋ค 2. podfile์ pod 'Firebase/Core' ๋ฅผ ์ถ๊ฐํ๋ค ์ค์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก pod 'Firebase/Database' ์ด๊ฒ๋ ์ถ๊ฐํ๊ณ ์ค์นํด์ค๋ค 3. Firebase console ์ ๋ค์ด๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ถ๊ฐํ๋ค 4. Firebase์์ ์น์ ํ ์๋ ค์ฃผ๋ ๋๋ก ์ค์ ์ ํด์ค๋ค 5. ์ฑ์ด ์ฝ์์ ์ถ๊ฐ๋๋ฉด Realtime Database๋ฅผ ๋ง๋ค์ด์ค๋ค ํ ์คํธ ๋ชจ๋๋ก ์ค์ ํด์ ์ฝ๊ธฐ ์ฐ๊ธฐ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค --! ์ด๊ฒ์ ๋์ค์ '๊ท์น'์์ ๋ฐ๊ฟ ์ ์๋ค

Firebase๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ๊ณ ์์ /์ญ์ ํ ์ ์๋ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ํด๋ณด์ : ) ํ๋ฌ์ค๋ฒํผ์ ๋๋ฌ์ ๋ฉ๋ชจ๋ฅผ ์ ์ฅํ๊ณ ์ผ์ชฝ ์ค์์ดํ๋ก ๋ฉ๋ชจ๋ฅผ ์์ , ์ค๋ฅธ์ชฝ ์ค์์ดํ๋ก ์ญ์ ํ๋๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ์ ์ด๋ ๊ฒ MVVM ๊ตฌ์กฐ๋ก ํ๋ก์ ํธ๋ฅผ ์งฐ๊ณ Rx๋ฅผ ์ฌ์ฉํ์๋ค : ) ์์ค์ฝ๋๋ ๊นํ ์์ ๋ณผ ์ ์๋ค + git๋ ๊ฐ์ด ์ฐ์ตํด๋ณด๊ธฐ ์ํด master๋ธ๋์น๋ฅผ ๋ฐ์ develop๋ธ๋์น๋ฅผ ๋ง๋ค์๋ค ๊ทธ ํ, feature branch๋ค๋ก firebase-setup / firebase-insert / firebase-delete / firebase-change ๋ฅผ ๋ง๋ค๊ณ develop ๋ธ๋์น์ mergeํด๊ฐ๋ฉด์ ์์ ํ ๊ฒ์ด๋ค --!
- Total
- 867,868
- Today
- 438
- Yesterday
- 1,696
- ์ฅ๊ณ URL querystring
- ํ๋ฌํฐ ์ฑ๊ธํค
- Flutter Clipboard
- flutter build mode
- ipad multitasking
- PencilKit
- ribs
- Dart Factory
- Sketch ๋๋ผ
- flutter dynamic link
- ํ๋ฌํฐ ์ผ๋ฟ
- Watch App for iOS App vs Watch App
- Flutter Spacer
- github actions
- Django FCM
- Django Heroku Scheduler
- Flutter ๋ก๋ฉ
- ๊ตฌ๊ธ Geocoding API
- Flutter getter setter
- flutter deep link
- SerializerMethodField
- cocoapod
- Django Firebase Cloud Messaging
- ์ฅ๊ณ Custom Management Command
- METAL
- DRF APIException
- Flutter Text Gradient
- flutter ์ฑ ์ถ์
- drf custom error
- Python Type Hint