FirebaseとParseでの認証
 
 このシリーズのパート1とパート2では、アプリの作成プロセスとフレームワークをXCodeプロジェクトに統合するプロセスを比較し、FirebaseとParseデータベースが似ているようで異なる特徴を持ち、あなたのユースケースによりフィットする可能性があることを説明した。
この第3部では、コーディングを開始し、サインアップ/サインイン処理を両方のプラットフォームで動作させるために必要なコードの量を評価します。
何を作るか
両プラットフォームは基本的に同じタスクを行うので、まったく同じビュー・コントローラー設計を使用し、すべてのコントロールを同様に作成する:


メインのビューコントローラは、サインアップビューコントローラとサインインビューコントローラにセグし、それぞれのアクションを実行します。
Firebaseのコード
前編で説明したようにFirebase SDKをインストールしたら、AppDelegate.swiftで初期化します:
import Firebaseそして application:didFinishLaunchingWithOptions メソッドの中で、FirebaseApp オブジェクトを初期化する必要があります:
FirebaseApp.configure()ここで、サインインしたユーザーのプライベートな情報を必要とするすべてのViewに、サインインの状態が変わるたびに呼び出されるFIRAuthオブジェクトをリッスンするコードを追加する必要があります。
このコードを置くのに良い場所は、viewWillAppearメソッドで、許可されていない場合、ビューがデータをロードしないようにします:
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
  // Any other actions that happen upon state change can be written here
}また、Viewから離れる前にリスナーをデタッチする必要があるので、viewWillDisappearメソッドに以下のコードを追加します:
Auth.auth().removeStateDidChangeListener(handle!)
新規ユーザーのサインアップは SignUpViewController で行うので、ユーザーが Singn-Up ボタンを押したときに呼び出されるメソッドにこのコードを追加しましょう:
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
  // Code for error handling and other actions can be put here
}上記のメソッドに対する適切なエラー処理は次のようになる:
guard let user = authResult?.user, error == nil else {
    print("ERROR CREATING USER \(user.email!).")
    print(error!.localizedDescription)
    return
}
print("\(user.email!) successfuly created.")
ユーザーのサインインは SignInViewController で行われ、ユーザーが Sign In ボタンをクリックしたときに行われます。ユーザーにサインインするコードは次のようになります:
Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
  guard let strongSelf = self else { return }
  // Aditional code for error handling and other actions can be put here
}そして、このコードを使ってログインしたユーザーの詳細を取得することができる:
if let user = user {
  let uid = user.uid
  let email = user.email
  // Aditional properties can be retrieved here 
}サインアウトの手続きは、次のようにして行う:
firebase.auth().signOut().then(function() {
  // Sign-out successful.
}).catch(function(error) {
  // An error happened.
});さて、これは非常にシンプルでわかりやすい。
Parseのアプローチを見てみよう:
Parse コード
Firebaseと同様に、まずはParse IOS SDKをインストールし、AppDelegate.swiftで初期化します:
import ParseParseは実質的にどこでもホストできるため、App ID、キー、使用するParseホストのURLも設定する必要があります:
let configuration = ParseClientConfiguration {
    $0.applicationId = "PASTE_YOUR_APPLICATION_ID_HERE"
    $0.clientKey = "PASTE_YOUR_CLIENT_ID_HERE"
    $0.server = "https://parseapi.back4app.com"
}
Parse.initialize(with: configuration)viewDidAppearメソッドでは、ユーザーがすでにログインしているかどうかをチェックし、データを表示することができます:
let currentUser = PFUser.current()
if currentUser != nil {
    // User is NOT logged in. Do not display data.
}SignUpViewController に、Sign-Up ボタンがクリックされたときにユーザーを作成するコードを追加しましょう:
let user = PFUser()
user.username = signUpUsernameField.text
user.password = signUpPasswordField.text
user.signUpInBackground { (success, error) in
    UIViewController.removeSpinner(spinner: sv)
    if success{
        // Success signing up. Display data for this user.
    }else{
        if let descrip = error?.localizedDescription{
            // Error signing up. Do not display data and show error message.
        }
    }
}サインインは SignInViewController で行われ、ユーザーが Sign In ボタンをクリックしたときに行われます:
PFUser.logInWithUsername(inBackground: signInUsernameField.text!, password: signInPasswordField.text!) { (user, error) in
    if user != nil {
        // User signed In. Display data.
    }else{
        if let descrip = error?.localizedDescription{
            // User not signed in. Do not display data and show error message
        }
    }
}サイン・アウトを行う:
PFUser.logOutInBackground { (error: Error?) in
    if (error == nil){
        // Success logging out
    }else{
        // Error logging out. Display error message.
    }
}結論
Firebaseのサインアップとサインインに必要なコードはParseより数行少ないが、Parseは実質的にどこでもホストできる。
どちらもサインアップ、サインイン、サインアウトのプロセスを提供し、エラー処理と簡単なコード管理ができる。
そうであるように、3、4行のコードをアドバンテージとは考えない。
これは引き分けとしよう。

