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のエミュレータに接続できるようになりました🦑✨
この記事が気に入ったらサポートをしてみませんか?