ios,swift2020. 3. 30. 10:46

[ios]Swift firebase auth displayname, photoURL 바꾸는 방법

 

 // update displayName, photoURL

    private func loadFirebaseCommitChanges()

    {

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

        changeRequest?.displayName = "nickname"

        changeRequest?.photoURL = URL(string: "http://naver.com")

        changeRequest?.commitChanges(completion: { (error) in

            if let error = error

            {

                if let errorCode : AuthErrorCode = AuthErrorCode(rawValue: error._code)

                {

                    print("-> error -> \(error.localizedDescription) -> code -> \(errorCode.rawValue)")

                }

            }

            else

            {

                // success

            }

        })

    }

Posted by thdeodls85
ios,swift2020. 3. 27. 15:52
ios,swift2020. 3. 20. 15:25

[ios]swift firebase auth login user delete방법

 

private func loadDeleteFirebase()

    {

        let user = Auth.auth().currentUser

        user?.delete(completion: { (error) in

            guard error == nil else

            {

                if let errorCode : AuthErrorCode = AuthErrorCode(rawValue: error!._code)

                {

                    print("delete -> error -> \(errorCode.rawValue)")

                }

 

                return

            }

            return

        })

    }

Posted by thdeodls85
ios,swift2020. 3. 18. 10:19

[ios]swift firebase Auth error code 확인하는방법

 

파이어베이스로 이메일 회원가입을 시도하려고 한다.

 

자 그러면 회원가입을 하는데 이미 회원가입이 되있으면 error처리를 해야 한다.. 

 

그런데 error안에 domain , code가 있다는걸 볼 수 있다. 

 

근데 이걸 어떻게 뽑아내냐?? 

 

두가지 방법이 있다.

 

Auth.auth().createUser(withEmail: email, password:password) { (authResult, error) in

            // error

            guard let user = authResult?.user  , error == nil else

            {

                // 1 이렇게 해야 한다. 권장

                if let errorCode : AuthErrorCode = AuthErrorCode(rawValue: error!._code)

                {

                    print("-> errorCode -> \(errorCode.rawValue)")

                    

                    if AuthErrorCode.emailAlreadyInUse.rawValue == errorCode.rawValue

                    {

                        

                    }

                }

                

                // 2 권장하지 않는 사항

                // 인증 메소드의 완료 콜백이 값이 nil이 아닌 NSError 인수를 받으면 오류가 발생한 것입니다.

                // 제품 코드에서 이 인수를 적절한 오류 처리 로직으로 전달하려면

                // 오류 코드를 아래의 공통 오류 및 메소드별 오류 목록과 대조하여 확인해야 합니다.

                let er : NSError = error as! NSError

                print("-> er -> \(er.description) , code -> \(er.code)")

                if er.code == AuthErrorCode.expiredActionCode.rawValue

                {

                    

                }

                

                

                print("-> eror-> \(error.debugDescription)")

                return

            }

        }

 

처음에는 NSError했더니.. 문서상에서 권장하지 않는단다..

 

그러면 AuthErrorCode(rawValue: error!._code) 하면 된다.

 

 

 

[참조1] https://firebase.google.com/docs/auth/ios/errors

 

Firebase iOS 인증 오류 처리하기

인증 메소드의 완료 콜백이 값이 nil이 아닌 NSError 인수를 받으면 오류가 발생한 것입니다. 제품 코드에서 이 인수를 적절한 오류 처리 로직으로 전달하려면 오류 코드를 아래의 공통 오류 및 메소드별 오류 목록과 대조하여 확인해야 합니다. 일부 오류는 특정한 사용자 조치를 통해 해결할 수 있습니다. 예를 들어 FIRAuthErrorCodeUserTokenExpired는 사용자를 다시 로그인 처리하면 해결할 수 있고 FIRAuthErrorCodeWro

firebase.google.com

[참조2] https://stackoverflow.com/questions/37449919/reading-firebase-auth-error-thrown-firebase-3-x-and-swift

 

Reading Firebase Auth Error Thrown (Firebase 3.x and Swift)

I'm having trouble figuring out how to read the FIRAuthErrorNameKey in the new version of Firebase. The following is what I have so far, but the "let errorCode = FIRAuthErrorNameKey" line is incor...

stackoverflow.com

 

Posted by thdeodls85
ios,swift2020. 3. 17. 11:35

[ios]swift UiDatePicker actionSheet 올리기

 

datepicker를 다이얼로그에 올리려고 한다..

 

UIAlertController view에 올리면 되는데.. height 설정 및 여러가지를 해줘서 안정화 해준다...

 

private func showDatePickerPopup()

    {

        let dateChooserAlert = UIAlertController(title: "년월일 선택", message: nil, preferredStyle: .actionSheet)

        

        let datePicker = UIDatePicker()

        datePicker.datePickerMode = .date

        datePicker.locale = NSLocale(localeIdentifier: "ko_KO") as Locale

        

        dateChooserAlert.view.addSubview(datePicker)

        dateChooserAlert.view.heightAnchor.constraint(equalToConstant: 350).isActive = true

        

        // constraint

        datePicker.translatesAutoresizingMaskIntoConstraints = false

        datePicker.leadingAnchor.constraint(equalTo: dateChooserAlert.view.leadingAnchor).isActive = true

        datePicker.trailingAnchor.constraint(equalTo: dateChooserAlert.view.trailingAnchor).isActive = true

        datePicker.topAnchor.constraint(equalTo: dateChooserAlert.view.topAnchor, constant: 0).isActive = true

        datePicker.bottomAnchor.constraint(equalTo: dateChooserAlert.view.bottomAnchor, constant: -30).isActive = true

        

        dateChooserAlert.addAction(UIAlertAction(title: "선택완료", style: .default, handler: { (action) in

            let formatter = DateFormatter()

            formatter.dateFormat = "yyyy/MM/dd"

            let date = formatter.string(from: datePicker.date)

            print("-> choose -> \(date)")

        }))

        

        self.present(dateChooserAlert, animated: true, completion: nil)

    }

 

[참조] https://ynwa13.tistory.com/3

Posted by thdeodls85
ios,swift2020. 3. 16. 15:07

[ios]swift navigationbar title color 변경방법

 

self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]

Posted by thdeodls85
ios,swift2020. 3. 16. 14:08

[ios]swift scroollview touchesBegan 동작하지 않을 때 대체하는방법

 

let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tabView))

singleTapGestureRecognizer.numberOfTapsRequired = 1

singleTapGestureRecognizer.isEnabled = true

singleTapGestureRecognizer.cancelsTouchesInView = false

self.scrollView.addGestureRecognizer(singleTapGestureRecognizer)

 

[참조] https://zeddios.tistory.com/309

Posted by thdeodls85
ios,swift2020. 3. 12. 13:30

[ios]swift 최상의 rootviewcontroller replace 하는 방법

 

예를 들어 메인에 있다가 로그인 하고 다시 메인으로 돌아 올시 스텍이 쌓일 수 있다..

 

uitransitionview이 계속 쌓이는걸 볼 수 있는데... 

 

편안하게 최상위 rooview를 바꿔주면 초기화 되서 메인으로 돌아 갈 수 있다..

 

 // 최상의 rootview 갱신

UIApplication.shared.keyWindow?.replaceRootViewController(WantController, animated: true, completion: nil)

 

extension UIWindow

{

    func replaceRootViewController(_ replacementController: UIViewController, animated: Bool, completion: (() -> Void)?) {

           let snapshotImageView = UIImageView(image: self.snapshot())

           self.addSubview(snapshotImageView)

 

           let dismissCompletion = { () -> Void in // dismiss all modal view controllers

               self.rootViewController = replacementController

               self.bringSubview(toFront: snapshotImageView)

               if animated {

                   UIView.animate(withDuration: 0.4, animations: { () -> Void in

                       snapshotImageView.alpha = 0

                   }, completion: { (success) -> Void in

                       snapshotImageView.removeFromSuperview()

                       completion?()

                   })

               }

               else {

                   snapshotImageView.removeFromSuperview()

                   completion?()

               }

           }

           if self.rootViewController!.presentedViewController != nil {

               self.rootViewController!.dismiss(animated: false, completion: dismissCompletion)

           }

           else {

               dismissCompletion()

           }

       }

    

    func snapshot() -> UIImage {

        UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)

        drawHierarchy(in: bounds, afterScreenUpdates: true)

        guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return UIImage.init() }

        UIGraphicsEndImageContext()

        return result

    }

}

 

[참조] https://stackoverflow.com/questions/15774003/changing-root-view-controller-of-a-ios-window

Posted by thdeodls85