FirebaseUI Authを使って最低限のログイン機能を実装する

FirebaseUI Authを使って最低限のログイン機能を実装します。
今回はGoogleログインとAppleログインの2つを実装します。
Firebaseのプロジェクトは作成できている前提です。

## 1. XcodeにFirebase Authenticationを追加する
今回はcocoapodsでFirebaseを導入します。
podfileに以下を追加し、
```
  pod 'Firebase/Analytics'
  pod 'FirebaseUI'
```
`pod install`します。


## 2. Firebaseのプロジェクト上でAuthenationを有効にする
左側のタブから`Authenation`を探し、`始める`を押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/fb092a8c-cff7-b446-c054-b896b536b1c1.png)
このような画面になるはずです
今回はGoogleとAppleの認証を行うので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/6d63b900-3887-fffb-60d8-ead99b25a373.png)

### 2-1. Googleを有効にする
`Google`を押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/6d63b900-3887-fffb-60d8-ead99b25a373.png)
`有効にする`のチェックをオンにします
`公開名`と`サポートメール`を入力し、`保存`を押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/b39867e8-6352-13cb-38ee-7adbd2b46a1c.png)

次に、`GoogleSercvice-Info.plist`を開き、`REVERSED_CLIENT_ID`の内容をコピーし、
![20230122-093504.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/c10c8996-03fd-267b-4b7c-955d6fa8481a.png)
`Info`内の`URL Types`内の`URL Schemes`にペーストします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/f535e209-e804-327e-d13c-3fbca1e70ca5.png)

### 2-2. Appleを有効にする
`新しいプロバイダを追加`を押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/d7c702b6-8f0b-dda5-3261-6595127262d9.png)
`Apple`を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/9251c644-60c6-054a-e13d-8e2bc02dc233.png)
`有効にする`のチェックをオンにし、`保存`を押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/09d35a0c-6840-2dd6-2575-1c0880846ca4.png)
`Signing & Capabilities`で`+ Capability`を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/a7d2fc0d-ccba-5fd5-6d16-94d493ff07ee.png)
`Sign in with Apple`をドラッグ&ドロップして追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540178/958c5976-d44f-0f35-010d-f40e80d4bb96.png)


(リリースするときに必要)
Appleの開発者サイトの[Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources)ページを開き、アプリのSign In with Appleを有効にします。

## 3. Xcodeで設定する
```diff_swift:AppDelegate.swift
import UIKit
+ import FirebaseCore
+ import FirebaseAuthUI

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+         FirebaseApp.configure()
        return true
    }
```

```diff_swift:ログイン実装する画面 (ViewController.swift)
import UIKit
+ import FirebaseAuthUI
+ import FirebaseOAuthUI
+ import FirebaseGoogleAuthUI

+ class ViewController: UIViewController, FUIAuthDelegate {
    
+     let authUI = FUIAuth.defaultAuthUI()!

    override func viewDidLoad() {
        super.viewDidLoad()
        
+         let providers: [FUIAuthProvider] = [
+             FUIGoogleAuth(authUI: authUI),
+             FUIOAuth.appleAuthProvider()
+         ]
+         self.authUI.delegate = self
+         self.authUI.providers = providers
    }

+     @IBAction func LoginButtonTapped(){
+         let authViewController = self.authUI.authViewController()
+         self.present(authViewController, animated: true, completion: nil)
+     }
    
+     public func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?){
+         if error == nil {
+             print("成功")
+         } else {
+             print(error!)
+         }
+     }

}
```

これでできます！お疲れ！

# 参考

https://firebase.google.com/docs/auth

https://dev.classmethod.jp/articles/spm-add-new-package-product/