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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 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) } } ୀձ Τϥʔ͕ͳ͚Ε͹࡟আ׬ྃ