iOS Swift/Library, Framework 연동

[iOS/Swift] 파이어베이스 프로필 생성 Profile Firebase Auth (4)

주니어코더 2023. 7. 11. 17:44

 

 

 

 

 

 

 iOS 파이어베이스 회원정보 관리 

 

 

 

Swift로 Firebase Auth 회원정보 구현 4탄

"파이어베이스 프로필 관리 이름, 이미지"

 

 

 

 

🛑 이글에서는 파이어베이스 Auth를 이용한 프로필 관리, 닉네임, 이미지만 다룬다 🛑 
Xcode와 Firebase 연동 방법과 회원가입은 아래 글에서 참조 


iOS와 Firebase 연동 1탄

2023.06.20 - [iOS Swift/Firebase 연동] - [ios/Swift] iOS 파이어베이스 연동 Firebase Auth (1)

 

[ios/Swift] iOS 파이어베이스 연동 Firebase Auth (1)

iOS 와 파이어베이스 연동하기 Swift로 Firebase Auth 회원정보 구현 1탄 "파이어베이스 연동" Chap1. 파이어베이스 프로젝트 생성 파이어베이스 콘솔 사이트에서 프로젝트를 생성 아래 파이어베이스 콘

ohwhatisthis.tistory.com

 

 

 

iOS와 Firebase Auth 회원가입 2탄

 

2023.06.28 - [iOS Swift/Firebase 연동] - [ios/Swift] iOS 파이어베이스 회원가입 Firebase Auth (2)

 

[ios/Swift] iOS 파이어베이스 회원가입 Firebase Auth (2)

iOS에서 파이어베이스 회원가입 구현 Swift로 Firebase Auth 회원정보 구현 2탄 "파이어베이스 회원가입" 🛑 이글에서는 파이어베이스 Auth를 이용한 회원가입만 다룬다 🛑 Xcode와 Firebase 연동 방법은

ohwhatisthis.tistory.com

 

 

 

iOS와 Firebase Auth 로그인 로그아웃 비밀번호 재설정 회원탈퇴 3

 

2023.07.04 - [iOS Swift/Firebase 연동] - [ios/Swift] 로그인 비밀번호 재설정 로그아웃 회원탈퇴 Firebase Auth (3)

 

[ios/Swift] 로그인 비밀번호 재설정 로그아웃 회원탈퇴 Firebase Auth (3)

iOS 파이어베이스 회원정보 관리 Swift로 Firebase Auth 회원정보 구현 3탄 "파이어베이스 로그인, 로그아웃, 비밀번호 재설정, 회원탈퇴" 🛑 이글에서는 파이어베이스 Auth를 이용한 로그인, 로그아웃,

ohwhatisthis.tistory.com

 

 

 

 

 

 

 

Chap1.  Firebase 라이브러리 import


 

파이어베이스 사용하려는 ViewController에 Firebase 라이브러리 import 한다

 

import FirebaseAuth
import FirebaseCore

 

 

 

 

 

 

Chap2.  Firebase Auth 로그인 확인


 

프로필 관리를 위해서는 현재 로그인된 유저가 있는지 확인한다

 

if let user = Auth.auth().currentUser {
	print("User Info : ",user)
} else {
    print("Login : Error")
}

 

 

 

 

 

Chap3.  createProfileChangeRequest 변수 생성 후 commit 요청


 

🔥 createProfileChangeRequest 사용방법

 

1️⃣ createProfileChangeRequest 변수 생성

 

2️⃣ 위 변수에 변경할 이름 또는 사진 url을 담는다

 

3️⃣ createProfileChangeRequest을 commit 요청한다

 

 

 

let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()

changeRequest?.commitChanges { [self] error in
    guard let error = error else {
        return
    }
}

 

✔️ 코드 설명

Auth.auth().currentUser?.createProfileChangeRequest() 존재하는 경우

- changeRequest 를 변경요청한다 

- 변경 요청에 문제가 있을 경우 error 반환

- changeRequest가 존재하지 않는 경우 코드가 실행되지 않는다

 

 

 

 

 

Chap4.  Firebase Auth displayName 이름 변경 


 

displayName에 변경할 이름을 입력한다

 

fileprivate func changeName() {
    guard let name = nameTf.text else { return }
    let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
    changeRequest?.displayName = name
    changeRequest?.commitChanges { [self] error in
        guard let error = error else {
            nameLb.text = name
            return
        }
        print("Error : "error)
    }
}

 

✔️ 코드 설명

- changeRequest 변수의 displayName에 변경할 이름을 입력

- commitChanges 함수를 통해 이메일이 제대로 발송된 경우 error가 발생되지 않는다

 

 

 

 

 

Chap5.  Firebase Auth displayName 사진 변경


 

photoURL에 변경할 사진의 url을 입력한다

 

fileprivate func changeImg() {
    let imageURL =  "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRGpoKZBzAsDRMIYXSKRRjkhKAqzSxQ1wq9wQ&usqp=CAU"
    let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
    changeRequest?.photoURL = URL(string: imageURL)
    changeRequest?.commitChanges { [self] error in
        guard let error = error else {
            let url = URL(string: imageURL)
            DispatchQueue.global().async { [weak self] in
                if let data = try? Data(contentsOf: url!) {
                    if let image = UIImage(data: data) {
                        DispatchQueue.main.async {
                            self?.profileImg.image = image
                        }
                    }
                }
            }
            return
        }
        print(error)
    }
}

 

✔️ 코드 설명

- changeRequest 변수의 photo 에 변경할 사진 url을 입력

- commitChanges 함수를 통해 사진url이 제대로 발송된 경우, ImgaeView가 변경

- imageURL의 이미지를 다운로드한 후 ImageView의 image를 변경

 

 

🚫 주의 🚫

🛑 이미지 다운로드의 경우 시간이 걸리기때문에 ,

앱이 멈추는걸 방지하기 위해 반드시 다른 thread 에서 실시한다

🛑  UI변경은 main thread에서만 가능하여, 
DispatchQueue.main.async 함수를 통해 메인스레드에서 동작하게 한다
                       

 

 



Chap6.  변경된 photoURL과 displayName 확인하기


 

displayName에 변경할 이름을 입력한다

 

fileprivate func getProfileInfo() {
    if let user = Auth.auth().currentUser {
        if let photoURL = user.photoURL {
            let url = photoURL
            DispatchQueue.global().async { [weak self] in
                if let data = try? Data(contentsOf: url) {
                    if let image = UIImage(data: data) {
                        DispatchQueue.main.async {
                            self?.profileImg.image = image
                        }
                    }
                }
            }            }
        if let userName = user.displayName {
            nameLb.text = userName
        }
    }
    else {
        print("Login : Error")
    }
}

 

✔️ 코드 설명

- 위에서 입력한 프로필 정보는 Auth.auth().currentUser 변수에서 받아온다

- 이미지를 firebase에 보낼 때와 똑같이 받아 올 때도 image url을 통해 다운로드하여 가져온다

 

 

 

 

 

 

 

 

 

 

 

 

👇 전체 소스코드 Github에서 확인하기 👇

 

https://github.com/hyeebin/ex-firebase-ios

 

GitHub - hyeebin/ex-firebase-ios: iOS와 Firebase 연동하여 회원정보 관리

iOS와 Firebase 연동하여 회원정보 관리 . Contribute to hyeebin/ex-firebase-ios development by creating an account on GitHub.

github.com

 

반응형