Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FirebaseAuthenticationをiOSに取り込んでみよう入門編

 FirebaseAuthenticationをiOSに取り込んでみよう入門編

Avatar for Yuichi Nakayasu

Yuichi Nakayasu

April 16, 2019
Tweet

More Decks by Yuichi Nakayasu

Other Decks in Technology

Transcript

  1. 'JSFCBTF4%,Λ௥Ճ import UIKit import Firebase @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate

    { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } }
  2. 'JSFCBTF4%,Λ௥Ճ import UIKit import Firebase @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate

    { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } }
  3. αΠϯΞοϓ import UIKit class SignUpViewController: UIViewController { @IBOutlet private weak

    var nameTextField: UITextField! @IBOutlet private weak var emailTextField: UITextField! @IBOutlet private weak var passwordTextField: UITextField! @IBAction private func didTapSignUpButton() { // ͋ͱͰ࣮૷ } } ϏϡʔίϯτϩʔϥΛ࡞Δ
  4. αΠϯΞοϓ private func errorMessage(of error: Error) -> String { var

    message = "Τϥʔ͕ൃੜ͠·ͨ͠" guard let errcd = AuthErrorCode(rawValue: (error as NSError).code) else { return message } switch errcd { case .networkError: message = "ωοτϫʔΫʹ઀ଓͰ͖·ͤΜ" case .userNotFound: message = "Ϣʔβ͕ݟ͔ͭΓ·ͤΜ" case .invalidEmail: message = "ෆਖ਼ͳϝʔϧΞυϨεͰ͢" case .emailAlreadyInUse: message = "͜ͷϝʔϧΞυϨε͸طʹ࢖ΘΕ͍ͯ·͢" case .wrongPassword: message = "ೖྗͨ͠ೝূ৘ใͰαΠϯΠϯͰ͖·ͤΜ" case .userDisabled: message = "͜ͷΞΧ΢ϯτ͸ແޮͰ͢" case .weakPassword: message = “ύεϫʔυ͕੬ऑ͗͢·͢" default: break } return message } ΤϥʔॲཧΛઌʹ࡞͓͖ͬͯ·͢
  5. αΠϯΞοϓ private func errorMessage(of error: Error) -> String { var

    message = "Τϥʔ͕ൃੜ͠·ͨ͠" guard let errcd = AuthErrorCode(rawValue: (error as NSError).code) else { return message } switch errcd { case .networkError: message = "ωοτϫʔΫʹ઀ଓͰ͖·ͤΜ" case .userNotFound: message = "Ϣʔβ͕ݟ͔ͭΓ·ͤΜ" case .invalidEmail: message = "ෆਖ਼ͳϝʔϧΞυϨεͰ͢" case .emailAlreadyInUse: message = "͜ͷϝʔϧΞυϨε͸طʹ࢖ΘΕ͍ͯ·͢" case .wrongPassword: message = "ೖྗͨ͠ೝূ৘ใͰαΠϯΠϯͰ͖·ͤΜ" case .userDisabled: message = "͜ͷΞΧ΢ϯτ͸ແޮͰ͢" case .weakPassword: message = “ύεϫʔυ͕੬ऑ͗͢·͢" default: break } return message } ΤϥʔॲཧΛઌʹ࡞͓͖ͬͯ·͢
  6. αΠϯΞοϓ ΤϥʔॲཧΛઌʹ࡞͓͖ͬͯ·͢ private func showErrorIfNeeded(_ errorOrNil: Error?) { // Τϥʔ͕ͳ͚Ε͹Կ΋͠·ͤΜ

    guard let error = errorOrNil else { return } let message = errorMessage(of: error) // ΤϥʔϝοηʔδΛऔಘ let alert = UIAlertController( title: nil, message: message, preferredStyle: .alert ) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) present(alert, animated: true, completion: nil) }
  7. αΠϯΞοϓ private func signUp(email: String, password: String, name: String) {

    // FirebaseʹαΠϯΞοϓΛϦΫΤετ͢Δ } private func updateDisplayName(_ name: String, of user: User) { // αΠϯΞοϓͨ͠ΞΧ΢ϯτͷϢʔβ໊Λߋ৽͢Δ } private func sendEmailVerification(to user: User) { // VerifyϝʔϧΛૹ৴͢Δ } private func showSignUpCompletion() { // ׬ྃͨ͜͠ͱΛදࣔ͢Δ } ॲཧͷྲྀΕ
  8. αΠϯΞοϓ @IBAction private func didTapSignUpButton() { let email = emailTextField.text

    ?? "" let password = passwordTextField.text ?? "" let name = nameTextField.text ?? "" signUp(email: email, password: password, name: name) } αΠϯΞοϓϘλϯԡԼ࣌
  9. αΠϯΞοϓ private func signUp(email: String, password: String, name: String) {

    Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in guard let self = self else { return } if let user = result?.user { self.updateDisplayName(name, of: user) } self.showErrorIfNeeded(error) } } 'JSFCBTFʹαΠϯΞοϓΛϦΫΤετ
  10. αΠϯΞοϓ private func signUp(email: String, password: String, name: String) {

    Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in guard let self = self else { return } if let user = result?.user { self.updateDisplayName(name, of: user) } self.showErrorIfNeeded(error) } } 'JSFCBTFʹαΠϯΞοϓΛϦΫΤετ "VUIΦϒδΣΫτͷDSFBUF6TFS ͰϢʔβ࡞੒
  11. αΠϯΞοϓ private func signUp(email: String, password: String, name: String) {

    Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in guard let self = self else { return } if let user = result?.user { self.updateDisplayName(name, of: user) } self.showErrorIfNeeded(error) } } 'JSFCBTFʹαΠϯΞοϓΛϦΫΤετ Ϣʔβ͕ਖ਼ৗʹऔಘͰ͖ͨΒ࣍΁
  12. αΠϯΞοϓ private func updateDisplayName(_ name: String, of user: User) {

    let request = user.createProfileChangeRequest() request.displayName = name request.commitChanges { [weak self] error in guard let self = self else { return } if error != nil { self.sendEmailVerification(to: user) } self.showErrorIfNeeded(error) } } αΠϯΞοϓͨ͠ΞΧ΢ϯτͷϢʔβ໊Λߋ৽
  13. αΠϯΞοϓ private func updateDisplayName(_ name: String, of user: User) {

    let request = user.createProfileChangeRequest() request.displayName = name request.commitChanges { [weak self] error in guard let self = self else { return } if error != nil { self.sendEmailVerification(to: user) } self.showErrorIfNeeded(error) } } αΠϯΞοϓͨ͠ΞΧ΢ϯτͷϢʔβ໊Λߋ৽ ϓϩϑΟʔϧมߋ༻ͷϦΫΤετΦϒδΣΫτΛ࡞Δ
  14. αΠϯΞοϓ private func updateDisplayName(_ name: String, of user: User) {

    let request = user.createProfileChangeRequest() request.displayName = name request.commitChanges { [weak self] error in guard let self = self else { return } if error != nil { self.sendEmailVerification(to: user) } self.showErrorIfNeeded(error) } } αΠϯΞοϓͨ͠ΞΧ΢ϯτͷϢʔβ໊Λߋ৽ มߋ͢Δ໊લΛ୅ೖ
  15. αΠϯΞοϓ private func updateDisplayName(_ name: String, of user: User) {

    let request = user.createProfileChangeRequest() request.displayName = name request.commitChanges { [weak self] error in guard let self = self else { return } if error != nil { self.sendEmailVerification(to: user) } self.showErrorIfNeeded(error) } } αΠϯΞοϓͨ͠ΞΧ΢ϯτͷϢʔβ໊Λߋ৽ DPNNJU$IBOHFT ͰมߋΛϦΫΤετ
  16. αΠϯΞοϓ private func updateDisplayName(_ name: String, of user: User) {

    let request = user.createProfileChangeRequest() request.displayName = name request.commitChanges { [weak self] error in guard let self = self else { return } if error != nil { self.sendEmailVerification(to: user) } self.showErrorIfNeeded(error) } } αΠϯΞοϓͨ͠ΞΧ΢ϯτͷϢʔβ໊Λߋ৽ Τϥʔ͕ͳ͚Ε͹࣍΁
  17. αΠϯΞοϓ private func sendEmailVerification(to user: User) { user.sendEmailVerification { [weak

    self] error in guard let self = self else { return } if error != nil { self.showSignUpCompletion() } self.showErrorIfNeeded(error) } } 7FSJGZϝʔϧΛૹ৴͢Δ
  18. αΠϯΞοϓ private func sendEmailVerification(to user: User) { user.sendEmailVerification { [weak

    self] error in guard let self = self else { return } if error != nil { self.showSignUpCompletion() } self.showErrorIfNeeded(error) } } 7FSJGZϝʔϧΛૹ৴͢Δ ϢʔβΦϒδΣΫτͷTFOE&NBJM7FSJpDBUJPO Ͱϝʔϧૹ৴
  19. αΠϯΞοϓ private func sendEmailVerification(to user: User) { user.sendEmailVerification { [weak

    self] error in guard let self = self else { return } if error != nil { self.showSignUpCompletion() } self.showErrorIfNeeded(error) } } 7FSJGZϝʔϧΛૹ৴͢Δ Τϥʔ͕ͳ͚Ε͹ऴΘΓ
  20. αΠϯΠϯ αΠϯΠϯ import UIKit class SignInViewController: UIViewController { @IBOutlet private

    weak var emailTextField: UITextField! @IBOutlet private weak var passwordTextField: UITextField! @IBAction private func didTapSignInButton() { // ͋ͱͰ࣮૷ } } ϏϡʔίϯτϩʔϥΛ࡞Δ
  21. αΠϯΠϯ @IBAction private func didTapSignInButton() { let email = emailTextField.text

    ?? "" let password = passwordTextField.text ?? "" signIn(email: email, password: password) } αΠϯΠϯϘλϯԡԼ࣌
  22. αΠϯΠϯ private func signIn(email: String, password: String) { Auth.auth().signIn(withEmail: email,

    password: password) { [weak self] result, error in guard let self = self else { return } if let user = result?.user { self.showSignInCompletion() } self.showErrorIfNeeded(error) } } 'JSFCBTFʹαΠϯΠϯΛϦΫΤετ
  23. αΠϯΠϯ private func signIn(email: String, password: String) { Auth.auth().signIn(withEmail: email,

    password: password) { [weak self] result, error in guard let self = self else { return } if let user = result?.user { self.showSignInCompletion() } self.showErrorIfNeeded(error) } } 'JSFCBTFʹαΠϯΠϯΛϦΫΤετ "VUIΦϒδΣΫτͷTJHO*O ͰαΠϯΠϯ
  24. αΠϯΠϯ private func signIn(email: String, password: String) { Auth.auth().signIn(withEmail: email,

    password: password) { [weak self] result, error in guard let self = self else { return } if let user = result?.user { self.showSignInCompletion() } self.showErrorIfNeeded(error) } } 'JSFCBTFʹαΠϯΠϯΛϦΫΤετ Ϣʔβ͕ਖ਼ৗʹऔಘͰ͖ͨΒ׬ྃ
  25. ͦͷଞͷػೳ private func passwordReset() { let email = emailTextField.text ??

    "" Auth.auth().sendPasswordReset(withEmail: email) { [weak self] error in guard let self = self else { return } if error != nil { self.showPasswordResetCompletion() } self.showErrorIfNeeded(error) } } ύεϫʔυϦηοτ
  26. ͦͷଞͷػೳ private func passwordReset() { let email = emailTextField.text ??

    "" Auth.auth().sendPasswordReset(withEmail: email) { [weak self] error in guard let self = self else { return } if error != nil { self.showPasswordResetCompletion() } self.showErrorIfNeeded(error) } } ύεϫʔυϦηοτ "VUI ΦϒδΣΫτͷTFOE1BTTXPSE3FTFU Ͱϝʔϧૹ৴
  27. ͦͷଞͷػೳ private func passwordReset() { let email = emailTextField.text ??

    "" Auth.auth().sendPasswordReset(withEmail: email) { [weak self] error in guard let self = self else { return } if error != nil { self.showPasswordResetCompletion() } self.showErrorIfNeeded(error) } } ύεϫʔυϦηοτ Τϥʔ͕ͳ͚Ε͹׬ྃ
  28. ͦͷଞͷػೳ ͦͷଞͷػೳ private func signOut() { do { try Auth.auth().signOut()

    } catch let error { showErrorIfNeeded(error) } } αΠϯΞ΢τ
  29. ͦͷଞͷػೳ private func signOut() { do { try Auth.auth().signOut() }

    catch let error { showErrorIfNeeded(error) } } αΠϯΞ΢τ ίʔϧόοΫͷΫϩʔδϟ͸ͳ͍ͷͰɺEPUSZDBUDIͰΤϥʔॲཧ
  30. ͦͷଞͷػೳ private func withdraw() { Auth.auth().currentUser?.delete() { [weak self] error

    in guard let self = self else { return } if error != nil { self.showWithdrawalCompletion() } self.showErrorIfNeeded(error) } } ୀձ
  31. ͦͷଞͷػೳ private func withdraw() { Auth.auth().currentUser?.delete() { [weak self] error

    in guard let self = self else { return } if error != nil { self.showWithdrawalCompletion() } self.showErrorIfNeeded(error) } } ୀձ αΠϯΠϯதͷϢʔβͷEFMFUF Ͱ࡟আΛϦΫΤετ
  32. ͦͷଞͷػೳ private func withdraw() { Auth.auth().currentUser?.delete() { [weak self] error

    in guard let self = self else { return } if error != nil { self.showWithdrawalCompletion() } self.showErrorIfNeeded(error) } } ୀձ Τϥʔ͕ͳ͚Ε͹࡟আ׬ྃ