FirebaseUIでOAuthを使いTwitter認証をする

# はじめに
FirebaseUIを使って、ソーシャルログインを簡単に実装していました。
しかし、[TwitterKitの廃止](https://blog.twitter.com/developer/ja_jp/topics/community/2018/TKSDK_tr.html)に伴い、FirebaseUIからTwitter認証の機能が削除されました。（詳しくはこちら: https://github.com/firebase/FirebaseUI-iOS/pull/650）

そこで、FirebaseUIでOAuthを使ってTwitter認証を行う方法を残しておこうと思います。

# TwitterKitの廃止前
FirebaseUIのversion 7.0.0で廃止になったようなので、それより前のversionです。
[公式](https://firebase.google.com/docs/auth/ios/firebaseui?hl=ja)に手順は書いてありますが、一応スクリーンショットをおいておきます。<img width="938" alt="スクリーンショット 2019-06-13 14.48.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/a323a496-591e-371f-85d4-e404c38585d9.png">
<img width="941" alt="スクリーンショット 2019-06-13 14.49.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/5a0e18d5-f865-4aad-9ce5-d204489646b8.png">
<img width="937" alt="スクリーンショット 2019-06-13 14.49.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/70fd88e3-2775-f028-48b4-48c525ccc73d.png">
<img width="938" alt="スクリーンショット 2019-06-13 14.50.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/c843dc1a-eee4-331e-84d5-b8102ebcc722.png">
<img width="938" alt="スクリーンショット 2019-06-13 14.50.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/c66765ce-39fe-e3ed-907e-ed00f48f42e9.png">

# TwitterKitの廃止後
FirebaseUIのversion 7.0.0以降のversionです。

## 方法
`FUITwitterAuth`が使用できなくなったため、代わりに`FUIOAuth`を使用します。

### Twitter認証用の`FUIOAuth`のインスタンスを作成
Twitterログインボタンのアイコンは自分で用意する必要があります。（今回は`twtrsymbol.png`という名前でproject内においてあります。）

```swift
func twitterAuthProvider() -> FUIAuthProvider? {
  let buttonColor = UIColor(red: 71.0/255.0, green: 154.0/255.0, blue: 234.0/255.0, alpha: 1.0)
  return FUIOAuth(authUI: self.authUI!,
                  providerID: "twitter.com",
                  buttonLabelText: "Sign in with Twitter",
                  shortName: "Twitter",
                  buttonColor: buttonColor,
                  iconImage: UIImage(contentsOfFile: Bundle.main.path(forResource: "twtrsymbol", ofType: "png")!)!,
                  scopes: ["user.readwrite"],
                  customParameters: ["prompt" : "consent"],
                  loginHintKey: nil)
}
```

### 今まで使っていたコードを修正
```AppDelegate.swift
func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//   Twitter.sharedInstance().start(withConsumerKey:"TWITTER_CONSUMER_KEY",
//                                  consumerSecret:"TWITTER_CONSUMER_SECRET")
  return true
}
```

```swift
import FirebaseUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
//  FUITwitterAuth(),
  twitterAuthProvider()!, // FUITwitterAuthの代わりに使用
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers
```

## 結果
- `FUITwitterAuth`を使用していた時と同じボタンが表示されます。（アイコンは自分で用意するため少し違うかもしれません。）
- ボタンを押すとアプリ内Safariが表示されTwitter認証ができます。（TwitterKitを廃止前はTwitterアプリに遷移していましたが、FUIOAuthではしません。）

# 最後に
そこまで変更を加えずに、FIrebaseUIでOAuthを使ってTwitter認証を実装することができました。
自分がTwitterKitの廃止に対応するために、調べたのですが、記事が出てこなくて困ったため、公式のsampleに方法が載っていましたので、今回紹介させてもらいました。
https://github.com/firebase/FirebaseUI-iOS/blob/master/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUIAuthViewController.swift

TwitterKitの廃止前にFirebaseUIを使用するときに行ったTwitter認証用の設定をどこまで残しておけばよいのかの検証はしていないので、のちのち...
Twitter認証用の設定例
- Firebase コンソールで [Authentication] セクションを開き、Twitter を有効にします。
- Xcode プロジェクトに twitterkit-TWITTER_CONSUMER_KEY を URL スキームとして追加します
- etc