FirebaseのRemoteConfigを使ってLabelの値を変更しよう![RemoteConfig初級編]

##開発環境
Xcode: Version 11.3
実機iPhone: iOS 13.1
Firebase: Version 6.14.0
FirebaseRemoteConfig: Version 4.4.6


##やりたいこと
FirebaseのRemoteConfigを使ってLabelの値を変更したい。
初級編では、RemoteConfigを利用してViewControllerのLabelを変更してみようということで以下の画像のように、「Firebase　勉強中!!!」の文字を実際にRemoteConfigを利用して表示させていきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279165/b7ebc30f-5b14-d959-68ce-d45ad7b151fe.png" width="200">

**RemoteConfig応用編**
応用編では、RemoteConfigを利用してモーダルの値を変更してモーダルで表示することをやります。
[応用編はこちらをクリック！](https://qiita.com/mototaji/items/89a3e27bd8b6c425df72)

完成形の画面はこんな感じだよ！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279165/335bce36-6224-869b-3e8f-6310f086ffb9.png" width="200">

#**実装の準備**
それでは実際に開発してみよう！
今回は、タイトル通りFirebaseを利用するので、XcodeのプロジェクトファイルにFirebaseのライブラリーをインストールしておきましょう！サンプルコードでも、Cocoa Podを利用してFirebaseをインストールする必要があります。Firebaseの設定時に、「GoogleService-Info.plist」をプロジェクトファイルに追加する必要があります。

Firebaseの初期導入がわからない方は、以下の記事を参考にしてください。
[Firebaseの初期導入はこちらを参考に！](https://qiita.com/kumas/items/74d74a87b04d8614259a)


##RemoteConfigの設定
画像を参考にしながら、FirebaseのRemoteConfigの画面から、任意のパラメータキー(この記事ではtitle_name)とLabelに表示する文字列を入力しよう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279165/453d06f6-18e4-adb0-d4bd-604fffa56d49.png" width="800">


##コーディング


RemoteConfigManagerを作ります。
ここでは、先ほど設定したパラメータキーの名前を変数として代入する

```swift:RemoteConfigManager.swift
import FirebaseRemoteConfig

class RemoteConfigManager {
    static let shared = RemoteConfigManager()
    private let remoteConfig = RemoteConfig.remoteConfig()
    //初期の値
    var titleString: String = "まだデータがありません。"
    //パラメータキー
    private let titleKey = "title_name"
```

取得したデータを変数に代入

```swift:RemoteConfigManager.swift
    private func updateVariables() {
        //RemoteConfigから取得したデータを入れる。
        titleString = remoteConfig[titleKey].stringValue ?? ""
    }
```

インスタンス生成時にRemoteConfigからのデータをfetchする処理

```swift:RemoteConfigManager.swift
    private init() {
        remoteConfig.configSettings = RemoteConfigSettings()
        updateVariables()
        //開発環境の場合は0、本番環境(App Storeに配布する場合)では、は3600(１時間)以上に設定してください。
        let expirationDuration = 0
        remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) {
            [weak self] (status, _) in
            switch status {
            case .success:
                self?.remoteConfig.activate(completionHandler: { error in
                    if let error = error {
                        print("error:\(error)")
                    }
                    self?.updateVariables()
                })
            case .failure:
                print("error: remote config fetch failure")
            default: break
            }
        }
    }
```

最後にViewControlleを開いたタイミングで値をLabelに代入

```swift:ViewController.swift
class ViewController: UIViewController {
    
    @IBOutlet weak var titileLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        titileLabel.text = RemoteConfigManager.shared.titleString
    
    }
```


##⚠️実装におけるの問題点⚠️
今回の仕組みでは、アプリの初期起動時やRemoteConfigの値変更後のアプリ起動時には、変更した内容は次回起動時以降にUIに反映される仕様です。



##RemoteConfig応用編
応用編では、画像を加えてキャンペーンのようなモーダルを表示させることを紹介します。
[応用編はこちらをクリック！](https://qiita.com/mototaji/items/89a3e27bd8b6c425df72)

サンプルコードをダウンロードしたい方は[Github](https://github.com/tazima10827/FirebaseRemoteConfigSmaple)をクリックしよう！