0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Flutter で Google Sign_in の環境分け

Posted at

Flutter で Firebase Auth を利用したアプリ開発をしているときに、環境分けを試みたらえらくハマったので解決に至るまでの記録を残しておく。

まず、環境別に Firebase も用意することになるので、今までだと GoogleService-Info.plist や google-service.json をそれぞれの Firebase Project から DL して、環境別に切り替えるということが必要でったが、最近はそれが不要になったと読んだので、そちらでチャレンジしてみた。

Dart コードのみで環境分けにチャレンジ

最初に参考にしたのはこちらの記事
【Flutter】flutterfire_cli を使って Dart コードのみで環境分けする

説明にある通りうまく環境分けが行えたのだが、iOS シミュレーターでテストしようとすると、GoogleService-Info.plist が無いと言われる。

結果的にわかったことは、Firebase Auth で利用しようとしている Google Sign-in プラグインは Dart コードのみの初期化に未対応ということ。

google_sign_in plugin currently doesn't support dart-only initialization and for mean time, you'll need to fallback on manual installation.

[google_sign_in] iOS PlatformException (PlatformException(missing-config, GoogleService-Info.plist file not found, null, null)) after CLI initialization migration #96248

ということで、ここは一旦 Dart コードのみでの環境分けは諦めて、素直に plist や json をそれぞれ用意する方法に変更する。

環境分け

次に参考にしたのはこちら。
flutterでスマホアプリ開発するときに必ずやってること

ただし、一度上述した DART コードのみの環境分けにチャレンジしたため、その際の環境が残っている状態だったので、xcode の Run Script を一部修正。

env=""

if [[ $CONFIGURATION =~ -([^-]*)$ ]]; then
env=${BASH_REMATCH[1]}
fi

if [ "${env}" == "dev" ]; then
cp -r "${PROJECT_DIR}/Runner/GoogleService-Info-dev.plist" "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/GoogleService-Info.plist"
elif [ "${env}" == "prod" ]; then
cp -r "${PROJECT_DIR}/Runner/GoogleService-Info-prod.plist" "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/GoogleService-Info.plist"
fi

/bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build

一通りの設定が終わり、テストすると今度は以下のメッセージでクラッシュ。

“Your app is missing support for the following URL schemes: {REVERSED_CLIENT_ID}”

GoogleService-Info.plist の中にある REVERSED_CLIENT_ID を xcode の URL_Types に指定する必要があることがわかるが、ここで問題。環境別にしているので、Google Sign-In のでべローパーガイド にある方法では、1つの環境にしか対応できない。

調べてみると、どうやら xcode で User-Defined setting ができるので、これを使うやり方を発見

Target -> Runner -> Build Settings -> + -> Add User-Defined settings
で、URL_SCHEME を作成する。そうすると 各 Configuration ごとに値を設定できるので、

Debug-dev
Release-dev
に開発環境の Firebase への接続情報を持つ GoogleService-Info-dev.plist の中の REVERSED_CLIENT_ID を指定し、

Debug-prod
Release-prod
に本番環境の Firebase への接続情報を持つ GoogleService-Info-prod.plist の中の REVERSED_CLIENT_ID を指定。

これでひとまず、環境分けの環境が整った。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?