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.6k stars 3.95k forks source link

πŸ› [firebase_messaging] FirebaseMessaging.instance.requestPermission doesn't show system permission dialog on devices running < Android 13 (API 33) #11487

Closed NickalasB closed 11 months ago

NickalasB commented 1 year ago

Bug report

Describe the bug On a device running something less than Android 13, if a user turns off the notification permission from the app settings, calling FirebaseMessaging.instance.requestPermission() will not pop up the system dialog asking the user to grant notification permission. The user is stuck and can only grant permission from the app settings.

Steps to reproduce

Steps to reproduce the behavior:

  1. Launch the firebase_messaging_example app on an Android device running something lower than API33 (Pixel 3a on API29 in my example)
  2. Navigate to firebase_messaging_example app settings
  3. Toggle the Show Notifications to off
  4. Return to firebase_messaging_example
  5. Hit the Request Permissions button
  6. See error or incorrect behavior that simply shows the Authorization Status: Denied

Expected behavior

The Request Permissions button should display the os system dialog prompting the user to either grant or deny notification permission

Sample project

This is reproducible on the firebase_messaging_example app included in this repo. The same behavior is present in our app.


Additional context

This is similar to https://github.com/firebase/flutterfire/issues/11369 but not quite the same

This is somewhat of an edge-case because users who install an app with targetSdk: 33 onto a device running < API29 are automatically opted in to Notification permissions. However, if for some reason, a user turns that permission off, the app has lost the ability to actually request that permission ever again... which is not supposed to be the case.

The Android Documentation states,

Starting in Android 11 (API level 30), if the user taps Deny for a specific permission more than once during your app's lifetime of installation on a device, the user doesn't see the system permissions dialog if your app requests that permission again. The user's action implies "don't ask again."

I could not find any documentation stating that disabling a permission from the settings would qualify as a status of "don't ask again." This page on Runtime Permissions mentions nothing.

https://github.com/firebase/flutterfire/assets/16969303/aaed005c-a304-4004-b8d6-15a7bc22b7de


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 macOS 13.4.1 22F770820d darwin-arm64, locale en-US) [βœ“] Android toolchain - develop for Android devices (Android SDK version 33.0.1) [βœ“] Xcode - develop for iOS and macOS (Xcode 14.1) [βœ“] Chrome - develop for the web [βœ“] Android Studio (version 2022.1) [βœ“] VS Code (version 1.79.2) [βœ“] Connected device (5 available) ! Device adb-2B141FDH2003DT-iOy42D._adb-tls-connect._tcp. is offline. [βœ“] Network resources ```

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 motorsapp 2.96.0+1 dependencies: - algolia_client 0.0.1 [cache equatable error_logging flutter search] - analytics 0.0.1 [equatable flutter flutter_test listing_entities provider testing_tools visibility_detector] - analytics_private 0.0.1 [advertising_id analytics batch_track_api categories connectivity_plus debug device_info_plus entities error_logging flutter flutter_native_timezone platform provider recase remote_config retry usv_time] - app_scaffold 0.0.1 [analytics debug ebay_web error_logging flutter flutter_localizations flutter_svg intl local_storage motors_ui package_info_plus performance_fps pub_semver remote_config routing testing_tools_ui] - appcheck 1.0.6 [flutter] - apptentive_flutter 6.1.1 [flutter] - asset_gallery 0.0.1 [collection equatable flutter flutter_bloc flutter_localizations flutter_test intl listing_entities motors_ui photo_view testing_tools_ui] - batch_track_api 0.0.1 [http intl meta] - bidding 0.0.1 [analytics asset_gallery categories data_retriever ebay_web entities error_logging flutter flutter_localizations flutter_svg intl listing_entities listing_ui motors_ui notification_prompts_ui usv_time] - browse_landing 0.0.1 [analytics canned_searches categories collection file flutter flutter_localizations flutter_test intl location motors_ui remote_config search search_formatting shopping_cart testing_tools_ui] - camera_ui 0.0.1 [camera error_logging file flutter flutter_localizations flutter_test intl motors_ui native_device_orientation path_provider permissions provider testing_tools testing_tools_file_system testing_tools_ui usv_time uuid] - canned_searches 0.0.1 [categories error_logging flutter flutter_localizations flutter_svg intl motors_ui quiver remote_config search] - categories 0.0.1 [collection equatable flutter listenable_stream testing_tools] - categories_private 0.0.1 [bloc built_collection built_value categories collection equatable error_logging flutter gql gql_code_builder gql_exec http lookingglass motors_gql path_provider remote_config] - category_traversal_private 0.0.1 [categories category_traversal_ui error_logging flutter http] - category_traversal_ui 0.0.1 [categories collection error_logging flutter flutter_localizations flutter_test intl motors_ui page_object routing search shopping_cart testing_tools_ui] - connectivity_plus 3.0.6 [flutter flutter_web_plugins connectivity_plus_platform_interface js meta nm] - curated_explore_carousel 0.0.1 [analytics collection flutter flutter_localizations intl motors_ui search testing_tools] - curated_explore_carousel_private 0.0.1 [curated_explore_carousel error_logging flutter http] - data_retriever 0.0.1 [error_logging flutter] - debug 0.0.1 [flutter] - deep_link 0.0.1 [collection entities error_logging firebase_core firebase_dynamic_links flutter flutter_test listing_entities motors_ui notifications platform search testing_tools webview_flutter] - device_info 0.0.1 [device_info_plus platform] - device_info_plus 8.2.2 [device_info_plus_platform_interface ffi file flutter flutter_web_plugins meta win32] - ebay_client 0.0.1 [batch_track_api built_collection built_value cache categories collection debug dio entities error_logging flutter http http_parser listing_entities local_storage location meta my_garage networking_config package_info_plus recase result_type search syi_model usv_bff usv_time uuid xml] - ebay_identifiers 0.0.1 [device_info error_logging flutter hex local_storage package_info_plus platform usv_time] - ebay_web 0.0.1 [equatable flutter_test testing_tools] - ebay_web_private 0.0.1 [analytics debug ebay_web error_logging flutter flutter_web_browser remote_config url_launcher] - entities 0.0.1 [built_collection built_value categories collection equatable flutter flutter_test intl listing_entities meta quiver result_type testing_tools usv_time] - error_logging 0.0.1 [equatable flutter flutter_test testing_tools] - escrow 0.0.1 [analytics ebay_web flutter flutter_localizations flutter_svg intl motors_ui provider video] - favorites 0.0.1 [flutter flutter_localizations flutter_test intl listing_entities motors_ui testing_tools_ui] - favorites_private 0.0.1 [analytics built_collection built_value cache categories collection data_retriever entities equatable error_logging favorites flutter flutter_bloc flutter_localizations flutter_test full_listing_details_cache gql gql_code_builder gql_exec intl listing_entities listing_ui local_storage login lookingglass meta motors_gql motors_ui provider remote_config result_type testing_tools_ui usv_time] - file 6.1.4 [meta path] - firebase_analytics 10.4.1 [firebase_analytics_platform_interface firebase_analytics_web firebase_core firebase_core_platform_interface flutter] - firebase_core 2.15.1 [firebase_core_platform_interface firebase_core_web flutter meta] - firebase_crashlytics 3.3.1 [firebase_core firebase_core_platform_interface firebase_crashlytics_platform_interface flutter stack_trace] - firebase_performance 0.9.2+1 [firebase_core firebase_core_platform_interface firebase_performance_platform_interface firebase_performance_web flutter] - firebase_performance_platform_interface 0.1.4+1 [_flutterfire_internals firebase_core flutter plugin_platform_interface] - firebase_remote_config 3.0.15 [firebase_core firebase_core_platform_interface firebase_remote_config_platform_interface firebase_remote_config_web flutter] - flutter 0.0.0 [characters collection js material_color_utilities meta vector_math sky_engine] - flutter_localizations 0.0.0 [flutter intl characters clock collection js material_color_utilities meta path vector_math] - full_listing_details_cache 0.0.1 [cache entities flutter flutter_test result_type testing_tools] - geocoding 2.1.0 [flutter geocoding_platform_interface geocoding_android geocoding_ios] - http 0.13.6 [async http_parser meta] - intl 0.18.0 [clock meta path] - listing_carousel 0.0.1 [analytics categories flutter flutter_localizations intl listing_entities listing_ui motors_ui search] - listing_entities 0.0.1 [categories equatable flutter intl meta transparent_image usv_time] - listing_ui 0.0.1 [categories entities equatable error_logging favorites flutter flutter_localizations flutter_svg flutter_test intersperse intl listing_entities motors_ui page_view_dot_indicator skeletons testing_tools_ui usv_time] - local_storage 0.0.1 [flutter flutter_test testing_tools] - local_storage_private 0.0.1 [error_logging file flutter flutter_secure_storage http local_storage localstorage path_provider shared_preferences usv_time] - location 0.0.1 [entities equatable flutter flutter_localizations flutter_test intl motors_ui testing_tools testing_tools_ui] - location_private 0.0.1 [analytics collection entities error_logging flutter flutter_localizations flutter_test geocoding google_maps_flutter google_maps_flutter_android google_maps_flutter_platform_interface intl local_storage location motors_ui testing_tools] - login 0.0.1 [entities flutter flutter_test testing_tools] - login_private 0.0.1 [analytics data_retriever ebay_web entities error_logging flutter flutter_localizations flutter_web_auth full_listing_details_cache intl login motors_ui platform plugin_platform_interface remote_config usv_time] - matcher 0.12.15 [async meta stack_trace term_glyph test_api] - messaging 0.0.1 [analytics equatable flutter flutter_localizations flutter_test intl listing_entities motors_ui testing_tools_ui] - messaging_private 0.0.1 [analytics asset_gallery built_collection built_value categories collection data_retriever ebay_web entities equatable error_logging flutter flutter_bloc flutter_localizations flutter_markdown flutter_svg flutter_test full_listing_details_cache gql gql_code_builder gql_exec html html2md intersperse intl listenable_stream listing_entities listing_ui local_storage login lookingglass matcher messaging motors_gql motors_ui notification_prompts_ui notifications periodic provider public_profile remote_config rxdart shopping_cart testing_tools_file_system testing_tools_ui transparent_image usv_time uuid] - ml 0.0.1 [cache entities error_logging file flutter google_mlkit_image_labeling listing_entities path_provider platform uuid] - motors_blog 0.0.1 [flutter flutter_localizations flutter_test intl motors_ui testing_tools] - motors_blog_private 0.0.1 [analytics cache categories collection ebay_web entities equatable error_logging flutter flutter_bloc flutter_localizations flutter_markdown flutter_svg html html2md http intl listing_entities listing_ui markdown motors_blog motors_ui remote_config search xml] - motors_gql 0.0.1 [collection error_logging gql_exec gql_http_link http] - motors_ui 0.0.1 [collection flutter flutter_localizations flutter_svg flutter_test html intersperse intl testing_tools_ui usv_time] - motors_ui_private 0.0.1 [cached_network_image file flutter flutter_cache_manager motors_ui remote_config] - my_garage 0.0.1 [categories entities equatable flutter flutter_bloc flutter_test listing_entities motors_ui provider search testing_tools_ui transactions] - my_garage_private 0.0.1 [analytics built_collection built_value cache categories collection data_retriever debug ebay_web entities equatable error_logging file flutter flutter_bloc flutter_localizations flutter_svg gql gql_code_builder gql_exec http intersperse intl listenable_stream listing_entities listing_ui local_storage login lookingglass messaging motors_gql motors_ui my_garage path_provider personalization picture_selection provider remote_config result_type rxdart search shop_by_job shopping_cart skeletons tires transactions usv_time uuid] - my_motors 0.0.1 [analytics categories collection device_info_plus ebay_fgql ebay_web entities equatable error_logging escrow favorites flutter flutter_bloc flutter_email_sender flutter_localizations flutter_test full_listing_details_cache intl listing_entities listing_ui local_storage login lookingglass motors_gql motors_ui my_garage notification_prompts_ui offer_domain package_info_plus page_view_dot_indicator percent_indicator platform profile_ui saved_searches syi_domain syi_model testing_tools_ui transactions usv_time vehicle_shipping] - networking_config 0.0.1 [flutter] - notification_prompts_ui 0.0.1 [analytics flutter flutter_localizations flutter_svg flutter_test intl motors_ui testing_tools_ui] - notifications 0.0.1 [collection equatable error_logging flutter flutter_test testing_tools] - notifications_private 0.0.1 [analytics app_settings debug ebay_web error_logging firebase_core firebase_messaging firebase_messaging_platform_interface flutter flutter_app_badger flutter_local_notifications flutter_test http intersperse local_storage login motors_ui notification_prompts_ui notifications testing_tools_ui timezone] - offer 0.0.1 [analytics asset_gallery categories collection data_retriever ebay_web entities error_logging flutter flutter_localizations flutter_svg flutter_test full_listing_details_cache intl listing_entities listing_ui login motors_ui notification_prompts_ui notifications offer_domain provider testing_tools_ui usv_time] - offer_domain 0.0.1 [entities flutter flutter_localizations intl listing_ui motors_ui usv_time] - onboarding 0.0.1 [analytics debug error_logging flutter flutter_localizations flutter_svg intl local_storage login motors_ui my_garage provider] - package_info_plus 4.0.1 [ffi flutter flutter_web_plugins http meta path package_info_plus_platform_interface win32] - permissions 0.0.1 [debug flutter flutter_localizations flutter_test intl motors_ui permissions_plugin provider testing_tools] - personalization_private 0.0.1 [analytics built_collection built_value cache categories collection debug ebay_fgql entities equatable error_logging file flutter gql gql_code_builder gql_exec listing_entities listing_ui local_storage motors_gql my_garage path_provider personalization remote_config rxdart search] - personalized_feed 0.0.1 [analytics canned_searches categories collection entities equatable error_logging file flutter flutter_bloc flutter_localizations flutter_svg flutter_test intl listing_entities listing_ui motors_ui personalization provider search testing_tools_ui] - picture_selection 0.0.1 [device_info error_logging file_picker flutter flutter_exif_rotation flutter_native_image flutter_svg image_picker listing_entities permissions platform] - platform 3.1.0 - pna_home_private 0.0.1 [analytics categories category_traversal_ui curated_explore_carousel file flutter flutter_localizations flutter_svg flutter_test intl listing_entities motors_blog motors_ui my_garage personalization provider quiver remote_config search shop_by_job shopping_cart testing_tools_ui tires video] - profile_ui 0.0.1 [ebay_web entities equatable flutter flutter_bloc flutter_localizations flutter_svg flutter_test intersperse intl login motors_ui skeletons testing_tools_ui] - provider 6.0.5 [collection flutter nested] - public_profile 0.0.1 [analytics categories crypto data_retriever ebay_web entities flutter flutter_localizations flutter_svg flutter_test intersperse intl listing_entities listing_ui motors_ui profile_ui provider search testing_tools] - remote_config 0.0.1 [flutter flutter_test provider testing_tools] - remote_config_private 0.0.1 [debug firebase_core firebase_remote_config flutter flutter_test remote_config testing_tools] - routing 0.0.1 [flutter flutter_localizations flutter_test testing_tools_ui] - saved_searches 0.0.1 [analytics canned_searches categories collection flutter flutter_localizations flutter_slidable flutter_test intl motors_ui search search_formatting testing_tools_ui] - saved_searches_private 0.0.1 [analytics built_collection categories collection data_retriever ebay_web error_logging file flutter login motors_ui notifications path_provider provider saved_searches search usv_time] - search 0.0.1 [built_collection built_value categories equatable flutter flutter_test listing_entities meta testing_tools uuid] - search_domain 0.0.1 [built_collection built_value cache categories collection entities equatable error_logging gql gql_code_builder gql_exec intl listing_entities location lookingglass meta motors_gql remote_config search usv_time] - search_formatting 0.0.1 [canned_searches categories flutter flutter_localizations intl search] - search_results_ui 0.0.1 [analytics bloc_concurrency built_collection canned_searches categories collection copy_with_extension delayed_display entities equatable error_logging favorites flutter flutter_bloc flutter_localizations flutter_sticky_header flutter_svg flutter_test intersperse intl listing_entities listing_ui local_storage location login meta motors_blog motors_ui my_garage notification_prompts_ui provider remote_config result_type rxdart saved_searches search search_domain search_formatting shop_by_job shopping_cart testing_tools_ui tires uuid] - share_plus 7.0.1 [cross_file meta mime flutter flutter_web_plugins share_plus_platform_interface file url_launcher_web url_launcher_windows url_launcher_linux url_launcher_platform_interface ffi win32] - shop_by_job 0.0.1 [analytics collection equatable flutter flutter_localizations flutter_test intersperse intl json_annotation json_serializable listing_entities motors_ui remote_config testing_tools] - shop_by_job_private 0.0.1 [analytics categories equatable error_logging flutter flutter_bloc flutter_localizations flutter_test intl listing_entities listing_ui local_storage motors_blog motors_ui my_garage personalization remote_config search shop_by_job skeletons testing_tools_ui] - shopping_cart 0.0.1 [equatable flutter flutter_localizations flutter_test intl listing_entities motors_ui testing_tools] - shopping_cart_private 0.0.1 [analytics bloc_concurrency built_collection built_value categories collection ebay_web entities equatable error_logging flutter flutter_bloc flutter_localizations gql gql_code_builder gql_exec intl listing_entities listing_ui login lookingglass motors_gql motors_ui my_garage remote_config rxdart shopping_cart skeletons transactions] - syi_domain 0.0.1 [analytics built_collection built_value categories collection ebay_fgql entities error_logging file flutter flutter_test gql gql_code_builder gql_exec listing_entities local_storage location login lookingglass matcher meta motors_gql notifications path_provider provider remote_config result_type rxdart syi_model testing_tools_file_system testing_tools_ui usv_time] - syi_ui 0.0.1 [analytics app_scaffold camera_ui categories collection debug device_info ebay_web entities error_logging escrow flutter flutter_localizations flutter_svg flutter_test full_listing_details_cache intl listing_entities local_storage location motors_ui notification_prompts_ui path path_provider permissions picture_selection provider rive syi_domain syi_model testing_tools_ui usv_time video_thumbnail] - tires 0.0.1 [entities equatable flutter flutter_localizations flutter_test intl listing_entities motors_ui my_garage result_type testing_tools] - tires_private 0.0.1 [analytics cache collection ebay_web entities equatable error_logging flutter flutter_bloc flutter_localizations flutter_test http intl listing_entities listing_ui location motors_ui my_garage number_to_words personalization remote_config result_type search shopping_cart testing_tools tires video] - transactions_private 0.0.1 [analytics built_collection built_value categories collection data_retriever ebay_fgql entities error_logging flutter gql gql_code_builder gql_exec listing_entities login lookingglass motors_gql my_garage remote_config result_type transactions usv_time] - usv_bff 0.0.1 [http intl meta] - usv_time 0.0.1 [flutter] - uuid 3.0.7 [crypto] - vehicle_shipping 0.0.1 [analytics collection ebay_web entities equatable error_logging flutter flutter_localizations flutter_test intl listing_entities local_storage location motors_ui provider remote_config testing_tools] - vehicle_transactions 0.0.1 [analytics cache categories debug ebay_web entities error_logging escrow flutter flutter_localizations flutter_svg full_listing_details_cache intersperse intl listing_entities listing_ui local_storage location motors_ui provider quiver remote_config result_type rive usv_time vehicle_shipping video] - vehicles_home_private 0.0.1 [analytics canned_searches categories error_logging file flutter flutter_localizations flutter_test intl listing_carousel listing_ui local_storage motors_ui personalized_feed search shopping_cart testing_tools_ui] - video 0.0.1 [analytics equatable error_logging flutter flutter_localizations flutter_svg intl motors_ui video_player video_player_platform_interface youtube_player_flutter] - vip_ui 0.0.1 [analytics asset_gallery bloc categories collection curated_explore_carousel debug ebay_web entities equatable error_logging escrow favorites flutter flutter_bloc flutter_localizations flutter_staggered_grid_view flutter_svg flutter_test full_listing_details_cache intersperse intl listenable_stream listing_carousel listing_entities listing_ui local_storage location login motors_blog motors_gql motors_ui my_garage offer_domain personalization profile_ui provider remote_config result_type rxdart search shop_by_job shopping_cart testing_tools_ui tires transactions usv_time vehicle_shipping video vip_domain webview_flutter] - youtube_player_flutter 8.1.0 [flutter flutter_svg motors_ui webview_flutter webview_flutter_android webview_flutter_platform_interface webview_flutter_wkwebview] dev dependencies: - built_collection 5.1.1 - cache 0.0.1 [quiver] - cached_network_image 3.2.3 [flutter flutter_cache_manager octo_image cached_network_image_platform_interface cached_network_image_web] - dependency_validator 3.2.2 [args build_config checked_yaml glob io json_annotation logging package_config path pub_semver pubspec_parse yaml] - firebase_core_platform_interface 4.8.0 [collection flutter flutter_test meta plugin_platform_interface] - flutter_cache_manager 3.3.1 [clock collection file flutter http path path_provider rxdart sqflite uuid] - flutter_driver 0.0.0 [file flutter flutter_test fuchsia_remote_debug_protocol path meta vm_service webdriver async boolean_selector characters clock collection js matcher material_color_utilities platform process source_span stack_trace stream_channel string_scanner sync_http term_glyph test_api vector_math] - 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] - integration_test 0.0.0 [flutter flutter_driver flutter_test path vm_service async boolean_selector characters clock collection fake_async file js matcher material_color_utilities meta source_span stack_trace stream_channel string_scanner sync_http term_glyph test_api vector_math webdriver] - mockito 5.4.2 [analyzer build code_builder collection dart_style matcher meta path source_gen test_api] - motors_gql_testing_tools 0.0.1 [error_logging flutter_test http mock_web_server motors_gql testing_tools] - motors_styleguide 0.0.1 [flutter flutter_lints] - path_provider 2.0.15 [flutter path_provider_android path_provider_foundation path_provider_linux path_provider_platform_interface path_provider_windows] - result_type 0.2.0 [meta] - shared_preferences 2.1.1 [flutter shared_preferences_android shared_preferences_foundation shared_preferences_linux shared_preferences_platform_interface shared_preferences_web shared_preferences_windows] - test 1.24.1 [analyzer async boolean_selector collection coverage http_multi_server io js node_preamble package_config path 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 matcher] - testing_tools 0.0.1 [clock dependency_validator flutter flutter_test path] - testing_tools_file_system 0.0.1 [file flutter_test path_provider_platform_interface plugin_platform_interface testing_tools] - testing_tools_ui 0.0.1 [async bloc dependency_validator flutter flutter_localizations flutter_test golden_toolkit motors_ui testing_tools webview_flutter_platform_interface] - vip_domain 0.0.1 [built_collection built_value collection entities equatable error_logging flutter full_listing_details_cache gql gql_code_builder gql_exec listing_entities lookingglass motors_gql result_type rxdart] transitive dependencies: - _fe_analyzer_shared 61.0.0 [meta] - _flutterfire_internals 1.3.5 [collection firebase_core firebase_core_platform_interface flutter meta] - advertising_id 2.4.0 [flutter] - analyzer 5.13.0 [_fe_analyzer_shared collection convert crypto glob meta package_config path pub_semver source_span watcher yaml] - app_settings 5.0.0 [flutter plugin_platform_interface] - args 2.4.2 - async 2.11.0 [collection meta] - bloc 8.1.2 [meta] - bloc_concurrency 0.2.2 [bloc stream_transform] - boolean_selector 2.1.1 [source_span string_scanner] - build 2.4.1 [analyzer async convert crypto glob logging meta package_config path] - build_config 1.1.1 [checked_yaml json_annotation path pubspec_parse yaml] - built_value 8.6.1 [built_collection collection fixnum meta] - built_value_generator 8.6.1 [analyzer build build_config built_collection built_value collection source_gen] - cached_network_image_platform_interface 2.0.0 [flutter flutter_cache_manager] - cached_network_image_web 1.0.2 [flutter flutter_cache_manager cached_network_image_platform_interface] - camera 0.10.5+3 [camera_android camera_avfoundation camera_platform_interface camera_web flutter flutter_plugin_android_lifecycle quiver] - camera_android 0.10.8+2 [camera_platform_interface flutter flutter_plugin_android_lifecycle stream_transform] - camera_avfoundation 0.9.13+2 [camera_platform_interface flutter stream_transform] - camera_platform_interface 2.5.1 [cross_file flutter plugin_platform_interface stream_transform] - camera_web 0.3.1+4 [camera_platform_interface flutter flutter_web_plugins stream_transform] - characters 1.3.0 - checked_yaml 2.0.3 [json_annotation source_span yaml] - clock 1.1.1 - code_builder 4.5.0 [built_collection built_value collection matcher meta] - collection 1.17.1 - connectivity_plus_platform_interface 1.2.4 [flutter meta plugin_platform_interface] - convert 3.1.1 [typed_data] - copy_with_extension 4.0.4 - coverage 1.6.3 [args logging package_config path source_maps stack_trace vm_service] - cross_file 0.3.3+4 [js meta] - crypto 3.0.3 [typed_data] - csslib 1.0.0 [source_span] - dart_style 2.3.2 [analyzer args path pub_semver source_span] - dbus 0.7.8 [args ffi meta xml] - delayed_display 2.0.0 [flutter] - device_info_plus_platform_interface 7.0.0 [flutter meta plugin_platform_interface] - dio 4.0.6 [http_parser path] - ebay_fgql 0.0.1 [built_collection built_value gql_code_builder motors_gql_codegen] - equatable 2.0.5 [collection meta] - fake_async 1.3.1 [clock collection] ```

darshankawar commented 1 year ago

Thanks for the detailed report @NickalasB There was a breaking change introduced in version 13.0 of the plugin, which is as below:

https://github.com/firebase/flutterfire/blob/master/packages/firebase_messaging/firebase_messaging/CHANGELOG.md#1300

It states that:

firebase_messaging now includes this permission: Manifest.permission.POST_NOTIFICATIONS in its AndroidManifest.xml file which requires updating your android/app/build.gradle to target API level 33. indicating, we need to target API level 33. This also probably indicates that if application target SDK is less than 33, devs shouldn't try to request permissions if app runs on Android device which could be a redundant step.

Also, below from documentation talks about handling permission requests that you can take a look and see if it helps further or not:

https://firebase.google.com/docs/cloud-messaging/flutter/receive#request_permission_to_receive_messages_apple_and_web

NickalasB commented 1 year ago

Thank you @darshankawar. I'm not sure either of those links answers the central question though... Should we be able to re-request notification permission on devices running < Android 13 but targeting API level 33?

I can't actually find any documentation in native Android docs that answers this question either. Maybe it's just that turning off those permissions that are granted by default equates to "permanently denied/don't ask again?"

Again- this is an edge case but if it's expected does it need to be documented??

Thank you again

darshankawar commented 1 year ago

Thanks for the feedback. In this documentation, if the permission is denied, it does say The user denied permission. but not sure if that can be revoked or not or it is permanently denied and shouldn't be asked again or not.

Keeping this issue open if documentation need to be updated for devices running < 13 but targeting api 33.

/cc @russellwheatley

russellwheatley commented 1 year ago

FYI; this is what is happening on the native side. Permissions are only required from API level => 33. I can update documentation to reflect this.