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.53k stars 3.92k forks source link

🐛 [firebase_dynamic_links] No internet connection - Android doesn't trigger `onError` after app opened #5021

Closed furaiev closed 2 years ago

furaiev commented 3 years ago

Bug report

When the user opens a deep link without an internet connection, iOS returns an NSURLErrorDomain error in the onError callback but Android doesn't trigger the onError callback.

Steps to reproduce

Steps to reproduce the behavior:

  1. Disable internet connection on Android device/emulator
  2. Open the dynamic link
  3. App is opened, the onError callback hasn't called.

Expected behavior

onError callback must be called.


Additional context

AndroidManifest

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="${deepLinkHost}"
        android:scheme="https"/>
</intent-filter>

Dynamic links listeners

FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData dynamicLink) async {
      print('dynamicLink success');
    }, onError: (OnLinkErrorException e) async {
      print('dynamicLink error');
    });

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, 1.22.6, on macOS 11.2 20D64 darwin-x64, locale en-GB) [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 12.4) [!] Android Studio • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin installed • Dart plugin version 201.9245 • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01) [✓] Android Studio (version 4.1) [✓] VS Code (version 1.52.1) [✓] Connected device (1 available) ! Error: iPhone is not connected. Xcode will continue when iPhone is connected. (code -13) ! Doctor found issues in 1 category. ```

Flutter dependencies

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

Click To Expand ``` Dart SDK 2.10.5 Flutter SDK 1.22.6 charge 1.0.0+140 dependencies: - app_settings 4.0.3 [flutter] - backbone 0.0.1 [flutter rxdart flutter_bloc] - bip39 1.0.3 [pointycastle hex crypto] - bot_toast 3.0.0 [flutter] - built_value 7.1.0 [built_collection collection fixnum quiver] - cached_network_image 2.5.0 [flutter flutter_cache_manager octo_image] - crypton 1.1.1 [pointycastle asn1lib] - data_connection_checker 0.3.4 - ed25519_hd_key 1.0.1 [tweetnacl pointycastle hex] - environment_config 2.2.5 [dart_style code_builder args yaml] - equatable 1.2.4 [collection meta] - firebase_analytics 7.0.1 [meta flutter firebase_core firebase_analytics_web firebase_analytics_platform_interface] - firebase_core 0.7.0 [firebase_core_platform_interface flutter quiver meta firebase_core_web] - firebase_dynamic_links 0.7.0+1 [flutter firebase_core] - firebase_messaging 8.0.0-dev.14 [meta flutter firebase_core firebase_core_platform_interface firebase_messaging_platform_interface firebase_messaging_web] - flip_card 0.4.4 [flutter] - flutter 0.0.0 [characters collection meta typed_data vector_math sky_engine] - flutter_app_badger 1.1.2 [flutter] - flutter_appavailability 0.0.21 [flutter] - flutter_bloc 6.1.2 [flutter bloc provider] - flutter_html 1.2.0 [html csslib css_colors flutter_layout_grid video_player chewie webview_flutter chewie_audio flutter_svg flutter] - flutter_localizations 0.0.0 [flutter intl characters collection meta path typed_data vector_math] - flutter_markdown 0.5.2 [flutter markdown meta path] - flutter_secure_storage 3.3.5 [meta flutter] - flutter_svg 0.19.1 [flutter meta path_drawing vector_math xml] - freezed_annotation 0.12.0 [collection json_annotation meta] - get_it 5.0.6 [async meta] - hex 0.1.2 - http 0.12.2 [http_parser path pedantic] - image_cropper 1.3.1 [flutter] - image_picker 0.6.7+22 [flutter flutter_plugin_android_lifecycle image_picker_platform_interface] - intl 0.16.1 [path] - intl_messages 1.1.13 [intl resource_portable enum_to_string swiss_knife] - intl_translation 0.17.10+1 [analyzer args dart_style intl path petitparser] - let_log 1.1.4 [flutter] - local_auth 0.6.2+3 [flutter meta intl platform flutter_plugin_android_lifecycle] - package_info 0.4.3+4 [flutter] - platform 2.2.1 - rxdart 0.25.0 - sentry_flutter 4.0.4 [flutter flutter_web_plugins sentry package_info] - shared_preferences 0.5.12+4 [meta flutter shared_preferences_platform_interface shared_preferences_linux shared_preferences_macos shared_preferences_web shared_preferences_windows] - shimmer 1.1.2 [flutter] - steel_crypt 2.0.3 [args asn1lib meta union hex] - url_launcher 5.7.10 [flutter url_launcher_platform_interface url_launcher_web url_launcher_linux url_launcher_macos url_launcher_windows] - vibration 1.7.3 [flutter vibration_web] - web3dart 1.2.3 [pointycastle convert meta http uuid isolate typed_data stream_channel json_rpc_2] dev dependencies: - bloc_test 7.1.0 [bloc test meta mockito] - build_runner 1.10.2 [args async build build_config build_daemon build_resolvers build_runner_core code_builder collection crypto dart_style glob graphs http_multi_server io js logging meta mime path pedantic pool pub_semver pubspec_parse shelf shelf_web_socket stack_trace stream_transform timing watcher web_socket_channel yaml] - built_value_generator 7.1.0 [analyzer build build_config built_collection built_value source_gen quiver] - flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters charcode collection matcher meta source_span stream_channel string_scanner term_glyph typed_data] - freezed 0.12.2 [analyzer build build_config meta source_gen freezed_annotation] - mockito 4.1.2 [analyzer build code_builder collection dart_style matcher meta source_gen test_api] - pedantic 1.10.0-nullsafety.2 - test 1.16.0-nullsafety.5 [analyzer async boolean_selector coverage http http_multi_server io js node_preamble package_config path pedantic pool shelf shelf_packages_handler shelf_static shelf_web_socket source_span stack_trace stream_channel typed_data web_socket_channel webkit_inspection_protocol yaml test_api test_core] - testing_api 0.0.1 [backbone flutter charge mockito shared_preferences] transitive dependencies: - _fe_analyzer_shared 7.0.0 [meta] - analyzer 0.39.17 [_fe_analyzer_shared args charcode cli_util collection convert crypto glob html meta package_config path pub_semver source_span watcher yaml] - archive 2.0.13 [crypto args path] - args 1.6.0 - asn1lib 0.6.5 - async 2.5.0-nullsafety.1 [collection] - bloc 6.1.1 [meta] - boolean_selector 2.1.0-nullsafety.1 [source_span string_scanner] - build 1.3.0 [analyzer async convert crypto logging meta path glob] - build_config 0.4.2 [checked_yaml json_annotation meta path pubspec_parse yaml] - build_daemon 2.1.7 [built_collection built_value http_multi_server logging pedantic path pool shelf shelf_web_socket stream_transform watcher web_socket_channel] - build_resolvers 1.3.11 [analyzer build crypto graphs logging path package_config pub_semver] - build_runner_core 6.0.1 [async build build_config build_resolvers collection convert crypto glob graphs json_annotation logging meta path package_config pedantic pool timing watcher yaml] - built_collection 4.3.2 [collection quiver] - characters 1.1.0-nullsafety.3 - charcode 1.2.0-nullsafety.1 - checked_yaml 1.0.4 [json_annotation source_span yaml] - chewie 0.12.2 [cupertino_icons flutter video_player wakelock] - chewie_audio 1.1.2 [video_player cupertino_icons flutter] - cli_util 0.2.0 [path] - clock 1.1.0-nullsafety.1 - code_builder 3.6.0 [built_collection built_value collection matcher meta] - collection 1.15.0-nullsafety.3 - convert 2.1.1 [charcode typed_data] - coverage 0.14.2 [args logging package_config path source_maps stack_trace vm_service] - crypto 2.1.5 [collection convert typed_data] - css_colors 1.0.2 [flutter] - csslib 0.16.2 [source_span] - cupertino_icons 1.0.0 - dart_style 1.3.6 [analyzer args path source_span] - enum_to_string 1.0.14 - fake_async 1.2.0-nullsafety.1 [clock collection] - ffi 0.1.3 - file 5.2.1 [intl meta path] - firebase 7.3.3 [http http_parser js] - firebase_analytics_platform_interface 1.0.3 [flutter meta] - firebase_analytics_web 0.1.1 [flutter flutter_web_plugins firebase firebase_analytics_platform_interface meta] - firebase_core_platform_interface 3.0.1 [flutter meta plugin_platform_interface quiver] - firebase_core_web 0.2.1+3 [firebase_core_platform_interface flutter flutter_web_plugins meta js] - firebase_messaging_platform_interface 1.0.0-dev.10 [flutter meta firebase_core plugin_platform_interface] - firebase_messaging_web 0.1.0-dev.5 [flutter flutter_web_plugins meta firebase_core firebase_core_web firebase_messaging_platform_interface js service_worker] - fixnum 0.10.11 - flutter_blurhash 0.5.0 [flutter meta] - flutter_cache_manager 2.1.1 [flutter path_provider uuid http path sqflite pedantic clock file rxdart image] - flutter_layout_grid 0.10.5 [collection flutter meta quiver] - flutter_plugin_android_lifecycle 1.0.11 [flutter] - flutter_web_plugins 0.0.0 [flutter characters collection meta typed_data vector_math] - glob 1.2.0 [async collection node_io path pedantic string_scanner] - graphs 0.2.0 - html 0.14.0+4 [csslib source_span] - http_multi_server 2.2.0 [async] - http_parser 3.1.4 [charcode collection source_span string_scanner typed_data] - image 2.1.19 [archive xml meta] - image_picker_platform_interface 1.1.6 [flutter meta http plugin_platform_interface] - import_js_library 1.0.2 [flutter html flutter_web_plugins js] - io 0.3.4 [charcode meta path string_scanner] - isolate 2.0.3 - js 0.6.3-nullsafety.2 - json_annotation 3.1.1 - json_rpc_2 2.2.2 [stack_trace stream_channel] - logging 0.11.4 - markdown 3.0.0 [args charcode meta] - matcher 0.12.10-nullsafety.1 [stack_trace] - meta 1.3.0-nullsafety.3 - mime 0.9.7 - nested 0.0.4 [flutter] - node_interop 1.2.1 [js] - node_io 1.2.0 [file node_interop path] - node_preamble 1.4.13 - octo_image 0.3.0 [flutter flutter_blurhash] - package_config 1.9.3 [path charcode] - path 1.8.0-nullsafety.1 - path_drawing 0.4.1+1 [vector_math meta path_parsing flutter] - path_parsing 0.1.4 [vector_math meta] - path_provider 1.6.27 [flutter path_provider_platform_interface path_provider_macos path_provider_linux path_provider_windows] - path_provider_linux 0.0.1+2 [path xdg_directories path_provider_platform_interface flutter] - petitparser 3.1.0 [meta] - plugin_platform_interface 1.0.3 [meta] - pointycastle 1.0.2form_interface 1.0.4 [flutter meta platform plugin_platform_interface] - pool 1.5.0-nullsafety.2 [async stack_trace]r_platform_interface meta path flutter ffi win32] - process 3.0.13 [file intl meta path platform] - provider 4.3.3 [collection flutter nested] - pub_semver 1.4.4 [collection] - pubspec_parse 0.1.7 [checked_yaml json_annotation pub_semver yaml] - quiver 2.1.5 [matcher meta] - resource_portable 2.1.8 [typed_data] - sentry 4.0.4 [http meta stack_trace uuid] - service_worker 0.2.4 [js] - shared_preferences_linux 0.0.2+4 [file flutter meta path path_provider_linux shared_preferences_platform_interface] - shared_preferences_macos 0.0.1+11 [shared_preferences_platform_interface flutter] - shared_preferences_platform_interface 1.0.4 [meta flutter] - shared_preferences_web 0.1.2+7 [shared_preferences_platform_interface flutter flutter_web_plugins meta] - shared_preferences_windows 0.0.2+3 [shared_preferences_platform_interface flutter file meta path path_provider_platform_interface path_provider_windows] - shelf 0.7.9 [async collection http_parser path stack_trace stream_channel] - shelf_packages_handler 2.0.1 [path shelf shelf_static] - shelf_static 0.2.9+2 [convert http_parser mime path shelf] - shelf_web_socket 0.2.4 [shelf stream_channel web_socket_channel] - sky_engine 0.0.99 - source_gen 0.9.7+1 [analyzer async build dart_style glob meta path pedantic source_span] - source_map_stack_trace 2.1.0-nullsafety.3 [path stack_trace source_maps] - source_maps 0.10.10-nullsafety.2 [source_span] - source_span 1.8.0-nullsafety.2 [charcode collection path term_glyph] - sqflite 1.3.2+3 [flutter sqflite_common path] - sqflite_common 1.0.3+1 [synchronized path meta] - stack_trace 1.10.0-nullsafety.1 [path] - stream_channel 2.1.0-nullsafety.1 [async] - stream_transform 1.2.0 - string_scanner 1.1.0-nullsafety.1 [charcode source_span] - swiss_knife 2.5.25 [intl resource_portable] - synchronized 2.2.0+2 - term_glyph 1.2.0-nullsafety.1 - test_api 0.2.19-nullsafety.2 [async boolean_selector collection meta path source_span stack_trace stream_channel string_scanner term_glyph matcher] - test_core 0.3.12-nullsafety.5 [analyzer async args boolean_selector collection coverage glob io meta package_config path pedantic pool source_map_stack_trace source_maps source_span stack_trace stream_channel vm_service yaml matcher test_api] - timing 0.1.1+3 [json_annotation] - tweetnacl 0.3.2 [fixnum convert] - typed_data 1.3.0-nullsafety.3 [collection] - union 0.0.3+1 - url_launcher_linux 0.0.1+4 [flutter] - url_launcher_macos 0.0.1+9 [flutter] - url_launcher_platform_interface 1.0.9 [flutter meta plugin_platform_interface] - url_launcher_web 0.1.5+3 [url_launcher_platform_interface flutter flutter_web_plugins meta] - url_launcher_windows 0.0.1+3 [flutter] - uuid 2.2.2 [crypto convert] - vector_math 2.1.0-nullsafety.3 - vibration_web 1.6.2 [flutter flutter_web_plugins] - video_player 1.0.1 [meta video_player_platform_interface video_player_web flutter] - video_player_platform_interface 2.2.0 [flutter meta] - video_player_web 0.1.4+1 [flutter flutter_web_plugins meta video_player_platform_interface] - vm_service 5.5.0 [meta] - wakelock 0.2.1+1 [flutter meta wakelock_platform_interface wakelock_web] - wakelock_platform_interface 0.1.0+1 [flutter meta] - wakelock_web 0.1.0+3 [flutter flutter_web_plugins import_js_library js wakelock_platform_interface] - watcher 0.9.7+15 [async path pedantic] - web_socket_channel 1.2.0 [async crypto stream_channel] - webkit_inspection_protocol 0.7.4 [logging] - webview_flutter 1.0.7 [flutter] - win32 1.7.4+1 [ffi] - xdg_directories 0.1.2 [meta path process] - xml 4.5.1 [collection convert meta petitparser] - yaml 2.2.1 [charcode collection string_scanner source_span] ```

markusaksli-nc commented 3 years ago

Hi @furaiev How are you opening the link on android without internet? Thank you

furaiev commented 3 years ago

Hi @markusaksli-nc I use 'fly mode' for testing.

1) Open the source with a clickable deep link. (e.g. mail app) 2) Enable the 'Fly mode' 3) Tap the deep link 4) The app is opened, no error that deep link can't be fetched triggered

markusaksli-nc commented 3 years ago

I can't test this on either Pixel emulator, physical SM G950F or Onplus 7T because all of them open the link through the browser and it doesn't work without internet.

furaiev commented 3 years ago

@markusaksli-nc have you registered the deep link host and scheme in the AndroidManifest?

Android should know that link e.g. 'https://my-app.com' should be opened by the 'MyApp', shouldn't it? It opens browser only when it doesn't know what app can open 'https://my-app.com'.

markusaksli-nc commented 3 years ago

Nevermind I just had the wrong a typo in the host. Seeing this as well on the latest master 1.27.0-2.0.pre.126 with firebase_dynamic_links: ^0.7.0+1.

flutter doctor -v ```console [√] Flutter (Channel master, 1.27.0-2.0.pre.126, on Microsoft Windows [Version 10.0.19041.804], locale et-EE) • Flutter version 1.27.0-2.0.pre.126 at C:\Development\flutter_master • Framework revision 50897c98fc (8 hours ago), 2021-02-16 20:13:53 -0800 • Engine revision 9bcb3bfb0e • Dart version 2.13.0 (build 2.13.0-30.0.dev) [√] Android toolchain - develop for Android devices (Android SDK version 30.0.2) • Android SDK at C:\Users\marku\AppData\Local\Android\sdk • Platform android-30, build-tools 30.0.2 • Java binary at: C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882\jre\bin\java • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01) • All Android licenses accepted. [√] Chrome - develop for the web • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe [√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.7.7) • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community • Visual Studio Community 2019 version 16.7.30621.155 • Windows 10 SDK version 10.0.18362.0 [√] Android Studio (version 4.1.0) • Android Studio at C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882 • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01) [√] IntelliJ IDEA Ultimate Edition (version 2020.3) • IntelliJ at C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\203.7148.57 • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart [√] Connected device (5 available) • SM G950F (mobile) • ce12171c51cc001c03 • android-arm64 • Android 9 (API 28) • sdk gphone x86 arm (mobile) • emulator-5554 • android-x86 • Android 11 (API 30) (emulator) • Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19041.804] • Chrome (web) • chrome • web-javascript • Google Chrome 88.0.4324.150 • Edge (web) • edge • web-javascript • Microsoft Edge 88.0.705.68 • No issues found! ```
russellwheatley commented 2 years ago

Hey @furaiev, the dynamic links plugin has been reworked and the API has changed which you can read here.

Please open a new issue if there is a problem. Thanks.