firebase / flutterfire

🔥 A collection of Firebase plugins for Flutter apps.
https://firebase.google.com/docs/flutter/setup
BSD 3-Clause "New" or "Revised" License
8.5k stars 3.92k forks source link

🐛 [firebase_database] (Windows/Mac) firebase will not connect to the emulators for Android #11213

Closed DionJChapman closed 1 year ago

DionJChapman commented 1 year ago

Bug report

Describe the bug When using Firebase Database in Android to connect the emulator, it is trying to connect an IP6 connection to IP4. Even when using the emulators on IP6 it still defaults to 127.0.0.1

Steps to reproduce

Steps to reproduce the behavior:

  1. Write an app that authenticates with firebase
  2. add database to the app
  3. FirebaseDatabase.instance.useDatabaseEmulator(ip, 9000); database = FirebaseDatabase.instance; database!.setLoggingEnabled(true); ref = database!.ref("test");
  4. Access your data
  5. Query results = database!.ref(key).orderByKey().startAt(query).endAt('$query\uf8ff'); DataSnapshot? members = await results.get();

Expected behavior

It is expected that the data will be returned from the database if available.

Sample project

Providing a minimal example project which demonstrates the bug in isolation from your main App greatly enhances the chance of a timely fix. Please link to the public repository URL.


Additional context

Logs for emulators on 1270.0.0.1 D/WebSocket( 7506): ws_6 - WebSocket error. D/WebSocket( 7506): com.google.firebase.database.tubesock.WebSocketException: error while creating socket to ws://127.0.0.1:9000/.ws?ns=rtdb&v=5 D/WebSocket( 7506): at com.google.firebase.database.tubesock.WebSocket.createSocket(WebSocket.java:301) D/WebSocket( 7506): at com.google.firebase.database.tubesock.WebSocket.runReader(WebSocket.java:360) D/WebSocket( 7506): at com.google.firebase.database.tubesock.WebSocket.access$000(WebSocket.java:47) D/WebSocket( 7506): at com.google.firebase.database.tubesock.WebSocket$2.run(WebSocket.java:143) D/WebSocket( 7506): at java.lang.Thread.run(Thread.java:1012) D/WebSocket( 7506): Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 9000) from /:: (port 53498): connect failed: ECONNREFUSED (Connection refused) D/WebSocket( 7506): at libcore.io.IoBridge.connect(IoBridge.java:187) D/WebSocket( 7506): at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) D/WebSocket( 7506): at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) D/WebSocket( 7506): at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) D/WebSocket( 7506): at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) D/WebSocket( 7506): at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) D/WebSocket( 7506): at java.net.Socket.connect(Socket.java:646) D/WebSocket( 7506): at java.net.Socket.connect(Socket.java:595) D/WebSocket( 7506): at java.net.Socket.<init>(Socket.java:475) D/WebSocket( 7506): at java.net.Socket.<init>(Socket.java:243) D/WebSocket( 7506): at com.google.firebase.database.tubesock.WebSocket.createSocket(WebSocket.java:297) D/WebSocket( 7506): ... 4 more D/WebSocket( 7506): Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused) D/WebSocket( 7506): at libcore.io.Linux.connect(Native Method) D/WebSocket( 7506): at libcore.io.ForwardingOs.connect(ForwardingOs.java:201) D/WebSocket( 7506): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:158) D/WebSocket( 7506): at libcore.io.ForwardingOs.connect(ForwardingOs.java:201) D/WebSocket( 7506): at libcore.io.IoBridge.connectErrno(IoBridge.java:201) D/WebSocket( 7506): at libcore.io.IoBridge.connect(IoBridge.java:179) D/WebSocket( 7506): ... 14 more D/WebSocket( 7506): ws_6 - closing itself D/Connection( 7506): conn_6 - Realtime connection failed D/Connection( 7506): conn_6 - closing realtime connection D/PersistentConnection( 7506): pc_0 - Got on disconnect due to OTHER D/PersistentConnection( 7506): pc_0 - Scheduling connection attempt D/ConnectionRetryHelper( 7506): Scheduling retry in 2468ms D/WebSocket( 7506): ws_6 - closed

Logs for the emulator on IP6 D/WebSocket( 4994): ws_52 - WebSocket error. D/WebSocket( 4994): com.google.firebase.database.tubesock.WebSocketException: error while creating socket to ws://::1:9000/.ws?ns=platformtodo-default-rtdb&v=5 D/WebSocket( 4994): at com.google.firebase.database.tubesock.WebSocket.createSocket(WebSocket.java:301) D/WebSocket( 4994): at com.google.firebase.database.tubesock.WebSocket.runReader(WebSocket.java:360) D/WebSocket( 4994): at com.google.firebase.database.tubesock.WebSocket.access$000(WebSocket.java:47) D/WebSocket( 4994): at com.google.firebase.database.tubesock.WebSocket$2.run(WebSocket.java:143) D/WebSocket( 4994): at java.lang.Thread.run(Thread.java:1012) D/WebSocket( 4994): Caused by: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 80) from /:: (port 44794): connect failed: ECONNREFUSED (Connection refused) D/WebSocket( 4994): at libcore.io.IoBridge.connect(IoBridge.java:187) D/WebSocket( 4994): at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) D/WebSocket( 4994): at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) D/WebSocket( 4994): at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) D/WebSocket( 4994): at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) D/WebSocket( 4994): at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) D/WebSocket( 4994): at java.net.Socket.connect(Socket.java:646) D/WebSocket( 4994): at java.net.Socket.connect(Socket.java:595) D/WebSocket( 4994): at java.net.Socket.<init>(Socket.java:475) D/WebSocket( 4994): at java.net.Socket.<init>(Socket.java:243) D/WebSocket( 4994): at com.google.firebase.database.tubesock.WebSocket.createSocket(WebSocket.java:297)D/WebSocket( 4994): ... 4 more D/WebSocket( 4994): Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused) D/WebSocket( 4994): at libcore.io.Linux.connect(Native Method) D/WebSocket( 4994): at libcore.io.ForwardingOs.connect(ForwardingOs.java:201) D/WebSocket( 4994): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:158) D/WebSocket( 4994): at libcore.io.ForwardingOs.connect(ForwardingOs.java:201) D/WebSocket( 4994): at libcore.io.IoBridge.connectErrno(IoBridge.java:201) D/WebSocket( 4994): at libcore.io.IoBridge.connect(IoBridge.java:179) D/WebSocket( 4994): ... 14 more D/WebSocket( 4994): ws_52 - closing itself


Flutter doctor

Run flutter doctor and paste the output below:

Click To Expand ``` Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 3.10.5, on Microsoft Windows [Version 10.0.22000.2057], locale en-AU) [√] Windows Version (Installed version of Windows is version 10 or higher) [√] Android toolchain - develop for Android devices (Android SDK version 33.0.2) [√] Chrome - develop for the web [√] Visual Studio - develop for Windows (Visual Studio Build Tools 2019 16.8.6) [√] Android Studio (version 2022.2) [√] IntelliJ IDEA Ultimate Edition (version 2020.1) [√] VS Code (version 1.79.2) [√] Connected device (3 available) [√] Network resources • No issues found! ```

Flutter dependencies

Run flutter pub deps -- --style=compact and paste the output below:

Click To Expand ``` Dart SDK 3.0.5 Flutter SDK 3.10.5 platformtodo 1.0.0+1 dependencies: - cloud_functions 4.3.3 [cloud_functions_platform_interface cloud_functions_web firebase_core firebase_core_platform_interface flutter] - cupertino_icons 1.0.5 - easy_splash_screen 1.0.4 [flutter] - firebase_auth 4.6.3 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta] - firebase_core 2.14.0 [firebase_core_platform_interface firebase_core_web flutter meta] - firebase_database 10.2.3 [firebase_core firebase_core_platform_interface firebase_database_platform_interface firebase_database_web flutter] - flutter 0.0.0 [characters collection js material_color_utilities meta vector_math sky_engine] - flutter_colorpicker 1.0.3 [flutter] - flutter_launcher_icons 0.13.1 [args checked_yaml cli_util image json_annotation path yaml] - flutter_localization 0.1.12 [flutter flutter_web_plugins flutter_localizations plugin_platform_interface shared_preferences] - flutter_localizations 0.0.0 [flutter intl characters clock collection js material_color_utilities meta path vector_math] - intl 0.18.0 [clock meta path] - material_design_icons_flutter 7.0.7296 [flutter] - package_info_plus 4.0.2 [ffi flutter flutter_web_plugins http meta path package_info_plus_platform_interface win32] - page_transition 2.0.9 [flutter] - percent_indicator 4.2.3 [flutter] - responsive_builder 0.7.0 [flutter provider] - system_theme 2.2.0 [system_theme_web flutter] - word_generator 0.4.3 [flutter] dev dependencies: - flutter_lints 2.0.2 [lints] - flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters collection js matcher material_color_utilities meta source_span stream_channel string_scanner term_glyph] transitive dependencies: - _flutterfire_internals 1.3.3 [collection firebase_core firebase_core_platform_interface flutter meta] - archive 3.3.7 [crypto path pointycastle] - args 2.4.2 - async 2.11.0 [collection meta] - boolean_selector 2.1.1 [source_span string_scanner] - characters 1.3.0 - checked_yaml 2.0.3 [json_annotation source_span yaml] - cli_util 0.4.0 [meta path] - clock 1.1.1 - cloud_functions_platform_interface 5.4.3 [firebase_core flutter meta plugin_platform_interface] - cloud_functions_web 4.5.3 [cloud_functions_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins js] - collection 1.17.1 - convert 3.1.1 [typed_data] - crypto 3.0.3 [typed_data] - fake_async 1.3.1 [clock collection] - ffi 2.0.2 - file 6.1.4 [meta path] - firebase_auth_platform_interface 6.15.3 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface] - firebase_auth_web 5.5.3 [firebase_auth_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins http_parser js meta] - pointycastle 3.7.3 [collection convert js] - process 4.2.4 [file path platform] - provider 6.0.5 [collection flutter nested] - shared_preferences 2.2.0 [flutter shared_preferences_android shared_preferences_foundation shared_preferences_linux shared_preferences_platform_interface shared_preferences_web shared_preferences_windows] - shared_preferences_android 2.2.0 [flutter shared_preferences_platform_interface] - shared_preferences_foundation 2.3.0 [flutter shared_preferences_platform_interface] - shared_preferences_linux 2.3.0 [file flutter path path_provider_linux path_provider_platform_interface shared_preferences_platform_interface] - shared_preferences_platform_interface 2.3.0 [flutter plugin_platform_interface] - shared_preferences_web 2.2.0 [flutter flutter_web_plugins shared_preferences_platform_interface] - shared_preferences_windows 2.3.0 [file flutter path path_provider_platform_interface path_provider_windows shared_preferences_platform_interface] - sky_engine 0.0.99 - source_span 1.9.1 [collection path term_glyph] - stack_trace 1.11.0 [path] - stream_channel 2.1.1 [async] - string_scanner 1.2.0 [source_span] - system_theme_web 0.0.2 [flutter flutter_web_plugins] - term_glyph 1.2.1 - test_api 0.5.1 [async boolean_selector collection meta source_span stack_trace stream_channel string_scanner term_glyph matcher] - typed_data 1.3.2 [collection] - vector_math 2.1.4 - win32 5.0.5 [ffi] - xdg_directories 1.0.0 [meta path process] - xml 6.3.0 [collection meta petitparser] - yaml 3.1.2 [collection source_span string_scanner] ```

darshankawar commented 1 year ago

Thanks for the report @DionJChapman I tried the plugin example and was unable to replicate the reported behavior. Can you try the same and check if using it, you still get the same error ?

darshankawar commented 1 year ago

Also, please see if this is related / helpful.

DionJChapman commented 1 year ago

Also, please see if this is related / helpful.

This is the first time I have seen documentation saying to use 10.0.2.2 for Android. Both Firebase Auth and Firebase Functions do an automatic conversion for 127.0.0.1 to 10.0.2.2 as they work. But Firebase Database doesn't do the same.

DionJChapman commented 1 year ago

Thanks for the report @DionJChapman I tried the plugin example and was unable to replicate the reported behavior. Can you try the same and check if using it, you still get the same error?

Thanks for the example.

changing the following produces there error: // Android device emulators consider localhost of the host machine as 10.0.2.2 // so let's use that if running on Android. final emulatorHost = (!kIsWeb && defaultTargetPlatform == TargetPlatform.android) ? '127.0.0.1' : 'localhost';

and change this from false to true

database.setLoggingEnabled(true);

I now understand that I need to use 10.0.2.2 instead of 127.0.0.1 for Android. But find it strange that Firebase Auth will work if I use 127.0.0.1

It would be good if we had consistent behaviour throughout the modules.

My Project now works as expected, thanks.