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を利用して表示させていきます。

RemoteConfig応用編
応用編では、RemoteConfigを利用してモーダルの値を変更してモーダルで表示することをやります。
応用編はこちらをクリック!

完成形の画面はこんな感じだよ!

実装の準備

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

Firebaseの初期導入がわからない方は、以下の記事を参考にしてください。
Firebaseの初期導入はこちらを参考に!

RemoteConfigの設定

画像を参考にしながら、FirebaseのRemoteConfigの画面から、任意のパラメータキー(この記事ではtitle_name)とLabelに表示する文字列を入力しよう。

コーディング

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

RemoteConfigManager.swift
import FirebaseRemoteConfig

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

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

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

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

RemoteConfigManager.swift
    private init() {
        remoteConfig.configSettings = RemoteConfigSettings()
        updateVariables()
        //開発環境の場合は0、本番環境(App Storeに配布する場合)では、は3600(1時間)以上に設定してください。
        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に代入

ViewController.swift
class ViewController: UIViewController {

    @IBOutlet weak var titileLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        titileLabel.text = RemoteConfigManager.shared.titleString

    }

⚠️実装におけるの問題点⚠️

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

RemoteConfig応用編

応用編では、画像を加えてキャンペーンのようなモーダルを表示させることを紹介します。
応用編はこちらをクリック!

サンプルコードをダウンロードしたい方はGithubをクリックしよう!