I keep receiving an error when running on flutter:
FirebaseAuthException ([firebase_auth/unknown] An internal error has occurred. [ Failed to connect to /10.0.2.2:9099)
I'm using a physical Android device, connected via cable, and I try to access the firebase emulator on the computer.
My flutter code:
String ip = kIsWeb ? 'localhost' : 'localhost'; // 10.0.2.2
FirebaseFirestore.instance
.useFirestoreEmulator(ip, 8080, sslEnabled: false);
await FirebaseAuth.instance.useAuthEmulator(ip, 9099);
I used adb reverse
to tunnel the localhost ports to the computer, but it still doesn't work. It seems to ignore the localhost
directive and attempts to connect to 10.0.2.2
.
When using an emulator, the Firebase SDK assumes that you're running on an actual Android Studio emulator, and maps localhost
to 10.0.2.2
behind the scenes:
//Android considers localhost as 10.0.2.2 - automatically handle this for users. if (!kIsWeb && defaultTargetPlatform == TargetPlatform.android) { if ((mappedHost == 'localhost' || mappedHost == '127.0.0.1') && automaticHostMapping) { ignore: avoid_print print('Mapping Firestore Emulator host "$mappedHost" to "10.0.2.2".'); mappedHost = '10.0.2.2'; } }
In order to avoid this behavior, set automaticHostMapping
to false:
FirebaseFirestore.instance
.useFirestoreEmulator(ip, 8080, sslEnabled: false, automaticHostMapping: false);
await FirebaseAuth.instance.useAuthEmulator(ip, 9099, automaticHostMapping: false);
Now localhost
will actually point to 127.0.0.1
, and together with the adb reverse
tunnel it will send the traffic to the host machine.