あけましておめでとうございます。もみじんです。
新年一発目の投稿です。
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, ), ), ), );
コメント