見出し画像

FlutterアプリからLocal Emulator Suite で Firebase Authentication を使用した時のネットワークエラーを解決する

状況

FlutterFireのドキュメントを参考に、Flutterアプリから Firebase Authentication のエミュレータへ接続設定したあと、iOS Simulator でアプリを実行すると下記エラーが出てしまいました。

[VERBOSE-2:ui_dart_state.cc(186)] Unhandled Exception: [firebase_auth/network-request-failed] Network error (such as timeout, interrupted connection or unreachable host) has occurred.

ちなみに、接続先をエミュレータ(http://localhost:9099)ではなく、本番環境に接続する分にはエラーが出ない…。

原因

iOS9で導入された App Transport Security (ATS) によってHTTP通信がブロックされていることでした(デフォルトオン)。原因調査するのになかなかの時間を溶かしました😇🍭

解決

例外的にローカルホスト上では制限がかからないよう、ios/Runner/Info.plistファイルに NSAllowsLocalNetworking(iOS10以上から設定可能)を追加していきます!

<plist version="1.0">
<dict>
    ...略...
    
    // 追加
	<key>NSAppTransportSecurity</key>
    <dict>
       <key>NSAllowsLocalNetworking</key>
       <true/>
    </dict>
</dict>
</plist>

これでFlutterアプリからFirebase Authenticationのエミュレータに接続できるようになりました🦑✨

この記事が気に入ったらサポートをしてみませんか?