iOSのプログラム言語SwiftでFirebaseのAuthenticationを使ってみたい!(メアド編)

前回のFirebaseのRealtime Databaseに続き今回はAuthenticationを使ってみたいと思います。
Authenticationはメールアドレスや電話番号、IDプロバイダ(Google、Facebook、Twitter)等を使った認証機能を備え、ユーザ登録やログイン等が容易に管理できるようになります。
今回もRealtime Databaseの時と同様にテストアプリ動かすまでの流れを書いていきたいと思います。
Xcodeプロジェクト作成からFirebaseの導入まで
Xcodeのプロジェクト作成してFirebaseの導入までを行います。
手順は前回の記事「iOSのプログラム言語SwiftでFirebaseのRealtime Databaseを使ってみたい!」で書いた
「Xcodeプロジェクトを作成する」から「XcodeにFirebaseを導入する」
までと同じ手順となるのでそちらを参照してください。ただし、一点違う手順があるので参照する前の下記の赤枠部分の内容を確認してください。
前回はPodfileを開いて
pod ‘Firebase/Database’
を追加しましたが、今回は上記赤枠の
pod ‘Firebase/Auth’
を追加してください。
テストアプリを実装する
ここからはテストアプリを実装していきます。
実装内容は、
・メアドとパスワードでユーザ登録を行う。
・メアドとパスワードを入力してログインする。
・ログイン中のメアドとユーザIDを表示する。
・ログイン中のユーザをログアウトさせる。
となります。
Main.storyboardを選択してViewController上に必要なコントロールを配置していきます。
ここではユーザ登録やログインに必要な「email」「password」のUITextFieldとログイン中の「email」「password」を表示させるUILabel、「登録」「ログイン」「ログアウト」ボタンをそれぞれ配置します。更に登録やログイン・ログアウトなどの操作に対する状態を表示させるUILabelも配置しておきます。
import UIKit
import Firebase
class ViewController: UIViewController {
@IBOutlet weak var toEmail: UITextField!
@IBOutlet weak var toPassword: UITextField!
@IBOutlet weak var fromEmail: UILabel!
@IBOutlet weak var fromUserId: UILabel!
@IBOutlet weak var status: UILabel!
var auth: Auth!
var handle: AuthStateDidChangeListenerHandle?
var isLogIn: Bool!
override func viewDidLoad() {
super.viewDidLoad()
self.auth = Auth.auth()
self.isLogIn = false
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.handle = self.auth.addStateDidChangeListener { (auth, user) in
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.auth.removeStateDidChangeListener(self.handle!)
}
@IBAction func entry(_ sender: AnyObject) {
self.auth.createUser(withEmail: self.toEmail.text!, password: self.toPassword.text!) { (authResult, error) in
if error == nil {
self.fromEmail.text = authResult?.email
self.fromUserId.text = authResult?.uid
self.isLogIn = true
self.status.text = "登録が成功しました"
} else {
self.status.text = error!.localizedDescription
}
}
}
@IBAction func logIn(_ sender: AnyObject) {
if self.isLogIn {
self.status.text = "既にログインしています"
return
}
self.auth.signIn(withEmail: self.toEmail.text!, password: self.toPassword.text!) { (authResult, error) in
if (error == nil) {
self.fromEmail.text = authResult?.email
self.fromUserId.text = authResult?.uid
self.isLogIn = true
self.status.text = "ログインに成功しました"
} else {
self.status.text = error!.localizedDescription
}
}
}
@IBAction func logOut(_ sender: AnyObject) {
if self.isLogIn == false {
self.status.text = "ログインしていません"
return
}
do {
try self.auth.signOut()
self.fromEmail.text = ""
self.fromUserId.text = ""
self.isLogIn = false
self.status.text = "ログアウトに成功しました"
} catch {
self.status.text = "ログアウトに失敗しました"
}
}
}
ViewController.swiftに上記ソースコードのハイライト部分を追加します。またはソースコードまるまるコピペでも問題ないと思います。
最後にストーリボード上のコントロールとソースコードのIBOutlet&IBActionの紐づけを行いましょう。
ソースコード上でIBOutletを定義したコントロールとストーリーボード上に配置したものをそれぞれ紐づけます。またボタンに関してはIBActionの「enty」「logIn」「logOut」メソッドをストーリーボード上の「登録」「ログイン」「ログアウト」各ボタンの「Touch Down」イベントと紐づけます。
ここまで出来たら実装完了です。
FirebaseのAuthenticationを設定する
Firebase ConsoleのAuthenticationから有効にする認証タイプの設定を行います。
使用するFirebaseプロジェクトを選択します。
左側のメニューから[Develop]-[Authentication]を選択し、Authenticationの「ログイン方法」タブに切り替えたらログインプロバイダ一覧にある「メール/パスワード」を選択します。
赤枠の部分を有効にして保存ボタンを押します。
「メール/パスワード」のステータスが「有効」になっていればOKです。最後にXcodeのシミュレーターを起動させてユーザ登録やログインが出来ているのかを確認していきましょう。
まとめ
前回のRealtime Databaseに続き今回も簡単に実装して動かす事ができました。クライアント・サーバーのアプリ開発にはこのユーザ管理機能は欠かせないのでこういったサーバー側の構築の手間が省けて、しかもアプリ側での開発も少ないソースコードの実装で実現できるので簡単なテストアプリを作るだけでもそれなりのコスト削減を実感できるものでした。
今回はメアドを使ったユーザ管理のテストアプリを作ってみましたが、次回はGoogleやTwitter等のアカウントと連携したユーザ管理に挑戦します!
1件のピンバック
iOSのプログラム言語SwiftでFirebaseのAuthenticationを使ってみたい!(Google編) – TOMMY imc FX Life