Procedure

clound function のリージョン変えたら Flutter でリクエストを受け付けなくなった話

Procedure
この記事は約4分で読めます。
スポンサーリンク

あけましておめでとうございます。もみじんです。

新年一発目の投稿です。

Firebaseのclound functionにて、リージョンをデフォルトのアメリカから日本に変えて、Flutterでリクエストを投げたときにリクエストを受け付けなくなる事件が発生しました。

その問題の解決方法を記載します。

スポンサーリンク

結論

Flutter側でもリージョンを設定する必要があった。

経緯

Firebaseのclound functionとFlutterアプリを作っていたときです。

clound functionのリージョンをアメリカから日本に移したいときがありました。

Cloud Functions のロケーション  |  Cloud Functions for Firebase

Google Clound Platform で設定可能らしいが、 github で管理したいということもあり、clound functionを動かしているサーバーのプログラム(TypeScirpt)にリージョン情報を書きました。

clound functionのコード

以下のように region に “asia-northeast1” を追加しました。

この状態でエミュレータを起動して、FlutterでこのAPIをリクエストしたらエラーになってしまった。

export const onWriteMyTagList = functions
.region("asia-northeast1") // これ
.runWith({ memory: "256MB"})
.https.onCall(
  async (data, context) => {
    // 略
    }

    return await writeMyTagList(admin, context.auth.uid, myTagList);
  });

解決方法

Futter 側でも リージョンを設定する必要があった。

開発環境で設定するなら以下の感じ。

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  if (Common.flavor == 'dev') {
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    FirebaseFunctions.instanceFor(region: 'asia-northeast1') //これ
        .useFunctionsEmulator('localhost', 5001);
  }

  runApp(const ProviderScope(child: App()));
}

本番環境なら以下のような感じ

final FirebaseFunctions _firebaseFunctions =
    FirebaseFunctions.instanceFor(region: 'asia-northeast1'); //ここ
final appProvider = StateNotifierProvider<AppProvider, AppState>(
  (_) => AppProvider(
    AppRepository(
      api: Api(
        firebaseFunctions: _firebaseFunctions,
      ),
    ),
  ),
);

参考

コメント

タイトルとURLをコピーしました