darwin-morocho / flutter-facebook-auth

A flutter plugin to add login with facebook in your flutter app
191 stars 124 forks source link

OAuth Issue on Sign-in (Code 190) #397

Open nroman446 opened 3 weeks ago

nroman446 commented 3 weeks ago

What version are you using?

6.2.0

What OS and version are you using to local deploy your application?

MacOS Sonoma 14.0

What platforms are you seeing the problem on?

iOS

pubspec.yaml

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 4.8.0+4304
environment:
  sdk: ">=3.2.6 <4.0.0"

dependencies:
  animated_size_and_fade: ^4.0.0
  app_review_plus: ^2.2.0
  app_settings: ^5.1.1
  archive: ^3.4.10
  cached_network_image: ^3.3.1
  connectivity_plus: ^5.0.2
  crypto: ^3.0.2
  cryptoutils: ^0.5.0
  drift: ^2.15.0
  drift_db_viewer: ^2.0.0
  drift_dev: ^2.8.1
  firebase_analytics: ^10.8.6
  firebase_auth: ^4.17.4
  firebase_core: ^2.16.0
  firebase_core_platform_interface: ^5.0.0
  firebase_crashlytics: ^3.4.15
  firebase_dynamic_links: ^5.4.14
  firebase_in_app_messaging: ^0.7.4+14
  firebase_messaging: ^14.7.16
  firebase_performance: ^0.9.3+14
  firebase_remote_config: ^4.3.14
  firebase_storage: ^11.6.6
  fk_user_agent: ^2.1.0
  fl_chart: ^0.66.2
  fluster: ^1.2.0
  flutter:
    sdk: flutter
  flutter_cache_manager: ^3.3.0
  flutter_command: ^5.0.0+17
  flutter_compass: ^0.8.0
  flutter_facebook_auth: ^6.1.1
  flutter_google_places_sdk: ^0.3.7
  flutter_secure_storage: ^9.0.0
  flutter_signin_button: ^2.0.0
  flutter_stripe: ^10.0.0
  flutter_stripe_web:
  flutter_svg: ^2.0.10+1
  gallery_saver_updated: ^3.0.0
  get_it: ^7.6.7
  go_router: ^13.2.0
  google_fonts: ^6.1.0
  google_maps_cluster_manager: ^3.1.0
  google_maps_flutter: ^2.5.3
  google_sign_in: ^6.2.1
  google_sign_in_web: ^0.12.3+2
  http: ^1.2.0
  image: ^4.1.7
  image_cropper: ^5.0.1
  image_picker: ^1.0.7
  in_app_purchase: ^3.1.13
  in_app_purchase_android: ^0.3.1
  in_app_purchase_storekit: ^0.3.11
  infinite_scroll_pagination: ^4.0.0
  injectable: ^2.3.2
  intl: ^0.19.0
  json_annotation: ^4.8.1
  location: ^5.0.3
  mailto: ^2.0.0
  map_launcher: ^3.1.0
  mockito: ^5.4.4
  open_filex: ^4.4.0
  open_mail_app: ^0.4.1
  package_info_plus: ^5.0.1
  path: ^1.8.3
  path_provider: ^2.1.2
  permission_handler: ^11.3.0
  pointer_interceptor: ^0.10.1
  protobuf: ^3.1.0
  quiver: ^3.0.1+1
  sentry_flutter: ^7.16.1
  share_plus: ^7.2.2
  shared_preferences: ^2.2.2
  speech_to_text: ^6.6.0
  sprintf: ^7.0.0
  sqlite3: ^2.4.0
  sqlite3_flutter_libs: ^0.5.20
  store_redirect: ^2.0.1
  synchronized: ^3.1.0+1
  timeago: ^3.4.0
  transparent_image: ^2.0.1
  tuple: ^2.0.0
  universal_html: ^2.2.1
  universal_platform: ^1.0.0+1
  url_launcher: ^6.2.5
  uuid: ^4.3.3
  vector_math: ^2.1.2
  watch_it: ^1.4.0
  webcrypto: ^0.5.3
  webview_flutter: ^4.7.0
  freezed_annotation: ^2.4.1

dependency_overrides:
  # downgraded to prevent build errors during upgrade
  flutter_google_places_sdk_ios: 0.1.3
  flutter_signin_button:
    git: https://github.com/elitree/Flutter-Sign-in-Button.git
  # This can be removed when updating to Flutter 3.19:
  # https://github.com/material-foundation/flutter-packages/issues/567
  google_fonts: 6.1.0
  google_maps_flutter:
    git:
      url: https://github.com/elitree/packages.git
      path: packages/google_maps_flutter/google_maps_flutter
      ref: lg-web-10
  google_maps_flutter_web:
    git:
      url: https://github.com/elitree/packages.git
      path: packages/google_maps_flutter/google_maps_flutter_web
      ref: lg-web-10
  google_maps_flutter_platform_interface:
    git:
      url: https://github.com/elitree/packages.git
      path: packages/google_maps_flutter/google_maps_flutter_platform_interface
      ref: lg-web-10
  google_maps_flutter_android:
    git:
      url: https://github.com/elitree/packages.git
      path: packages/google_maps_flutter/google_maps_flutter_android
      ref: lg-web-10
  google_maps_flutter_ios:
    git:
      url: https://github.com/elitree/packages.git
      path: packages/google_maps_flutter/google_maps_flutter_ios
      ref: lg-web-10
  # Privacy manifest was temporarily yanked in 5.7.5
  google_sign_in_ios: 5.7.4
  # Flutter stripe has an android issue
  # https://github.com/flutter-stripe/flutter_stripe/issues/1513
  stripe_android: 9.5.0+1
  # TODO LF-2434 Unpin webcrypto dependency
  webcrypto: 0.5.3

dev_dependencies:
  analyzer: ^6.2.0
  build: ^2.3.1
  build_runner: ^2.4.8
  build_web_compilers: ^4.0.9
  flutter_lints: ^3.0.1
  flutter_native_splash: ^2.3.10
  flutter_test:
    sdk: flutter
  freezed: ^2.4.7
  injectable_generator: ^2.4.1
  integration_test:
    sdk: flutter
  json_serializable: ^6.6.2
  test: ^1.24.9

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:
  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
    - google_fonts/
    - assets/google_maps_dark_style.json
    - assets/google_maps_light_style.json
    - assets/images/

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages

Describe the Bug

Attempting to login via facebook via FBSDK Login Kit facebook will spit out error [firebase_auth/invalid_credential]{"code":190,"message":"Invalid OAuth access token - Cannot parse access token"}

Expected Behavior

The facebook login popup should clear

To Reproduce

Log In via FacebookAuth.login()

Relevant log output

No response

flutter doctor -v

[✓] Flutter (Channel stable, 3.16.9, on macOS 14.0 23A344 darwin-arm64, locale
    en-US)
    • Flutter version 3.16.9 on channel stable at
      /Users/nickroman/fvm/versions/3.16.9
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 41456452f2 (3 months ago), 2024-01-25 10:06:23 -0800
    • Engine revision f40e976bed
    • Dart version 3.2.6
    • DevTools version 2.28.5

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.2)
    • Android SDK at /Users/nickroman/Library/Android/sdk
    • Platform android-34, build-tools 33.0.2
    • Java binary at: /Applications/Android
      Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      17.0.6+0-17.0.6b829.9-10027231)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 15E204a
    • CocoaPods version 1.15.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • 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
    • android-studio-dir = /Applications/Android Studio.app
    • Java version OpenJDK Runtime Environment (build
      17.0.6+0-17.0.6b829.9-10027231)

[✓] VS Code (version 1.70.0)
    • VS Code at /Users/nickroman/Downloads/Visual Studio Code 2.app/Contents
    • Flutter extension version 3.60.0

[✓] VS Code (version 1.63.2)
    • VS Code at /Users/nickroman/Downloads/Visual Studio Code.app/Contents
    • Flutter extension version 3.60.0

[✓] Connected device (3 available)
    • iPhone SE (3rd generation) (mobile) • 67ECF648-EB40-4948-8B97-639EA64CCCA4
      • ios            • com.apple.CoreSimulator.SimRuntime.iOS-17-2 (simulator)
    • macOS (desktop)                     • macos
      • darwin-arm64   • macOS 14.0 23A344 darwin-arm64
    • Chrome (web)                        • chrome
      • web-javascript • Google Chrome 123.0.6312.123
    ! Error: Browsing on the local area network for Nicholas’s iPad. Ensure the
      device is unlocked and attached with a cable or associated with the same
      local area network as this Mac.
      The device must be opted into Developer Mode to connect wirelessly. (code
      -27)

[✓] Network resources
    • All expected network resources are available.

• No issues found!

Info.plist (iOS)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CADisableMinimumFrameDurationOnPhone</key>
    <true/>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>com.reportallusa.landglide.LandGlide</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>LandGlide</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>$(FLUTTER_BUILD_NAME)</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>com.googleusercontent.apps.234930406912-a1fs9qfpmhe44d6c0kbhdm96oq219sru</string>
                <string>com.googleusercontent.apps.861823949799-vc35cprkp249096uujjn0vvnmcvjppkn</string>
                <string>fb227087388526612</string>
            </array>
        </dict>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>dynamic-links</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>com.reportallusa.landglide.LandGlide</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>$(FLUTTER_BUILD_NUMBER)</string>
    <key>FLTEnableWideGamut</key>
    <false/>
    <key>FacebookAppID</key>
    <string>227087388526612</string>
    <key>FacebookClientToken</key>
    <string>69c1edc733dee022826657fc78491379</string>
    <key>FacebookDisplayName</key>
    <string>LandGlide</string>
    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
        <string>https://applinks.landglide.com</string>
    </array>
    <key>ITSAppUsesNonExemptEncryption</key>
    <false/>
    <key>LSApplicationCategoryType</key>
    <string></string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>comgooglemaps</string>
        <string>baidumap</string>
        <string>iosamap</string>
        <string>waze</string>
        <string>yandexmaps</string>
        <string>yandexnavi</string>
        <string>citymapper</string>
        <string>mapsme</string>
        <string>osmandmaps</string>
        <string>dgis</string>
        <string>fbapi</string>
        <string>fb-messenger-share-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
    </array>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>LSSupportsOpeningDocumentsInPlace</key>
    <true/>
    <key>NSCameraUsageDescription</key>
    <string>Use your camera to take a picture for your map pins or create a new profile photo in LandGlide.</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>See your location in real time on the parcel map and find properties near you.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>See your location in real time on the parcel map and find properties near you.</string>
    <key>NSLocationUsageDescription</key>
    <string>See your location in real time on the parcel map and find properties near you.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>See your location in real time on the parcel map and find properties near you.</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>Use your voice to search for properties.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Enable LandGlide to access your camera roll to upload pictures for your map pins or a new profile picture to use in LandGlide.</string>
    <key>NSSpeechRecognitionUsageDescription</key>
    <string>Use your voice to search for properties.</string>
    <key>UIApplicationSupportsIndirectInputEvents</key>
    <true/>
    <key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
        <string>remote-notification</string>
    </array>
    <key>UIFileSharingEnabled</key>
    <true/>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIStatusBarHidden</key>
    <false/>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
</dict>
</plist>

Podfile (iOS)

PODS:
  - app_review_plus (1.0.1):
    - Flutter
  - app_settings (5.1.1):
    - Flutter
  - AppAuth (1.7.3):
    - AppAuth/Core (= 1.7.3)
    - AppAuth/ExternalUserAgent (= 1.7.3)
  - AppAuth/Core (1.7.3)
  - AppAuth/ExternalUserAgent (1.7.3):
    - AppAuth/Core
  - connectivity_plus (0.0.1):
    - Flutter
    - ReachabilitySwift
  - FBAEMKit (17.0.0):
    - FBSDKCoreKit_Basics (= 17.0.0)
  - FBSDKCoreKit (17.0.0):
    - FBAEMKit (= 17.0.0)
    - FBSDKCoreKit_Basics (= 17.0.0)
  - FBSDKCoreKit_Basics (17.0.0)
  - FBSDKLoginKit (17.0.0):
    - FBSDKCoreKit (= 17.0.0)
  - Firebase/Analytics (10.22.0):
    - Firebase/Core
  - Firebase/Auth (10.22.0):
    - Firebase/CoreOnly
    - FirebaseAuth (~> 10.22.0)
  - Firebase/Core (10.22.0):
    - Firebase/CoreOnly
    - FirebaseAnalytics (~> 10.22.0)
  - Firebase/CoreOnly (10.22.0):
    - FirebaseCore (= 10.22.0)
  - Firebase/Crashlytics (10.22.0):
    - Firebase/CoreOnly
    - FirebaseCrashlytics (~> 10.22.0)
  - Firebase/DynamicLinks (10.22.0):
    - Firebase/CoreOnly
    - FirebaseDynamicLinks (~> 10.22.0)
  - Firebase/InAppMessaging (10.22.0):
    - Firebase/CoreOnly
    - FirebaseInAppMessaging (~> 10.22.0-beta)
  - Firebase/Messaging (10.22.0):
    - Firebase/CoreOnly
    - FirebaseMessaging (~> 10.22.0)
  - Firebase/Performance (10.22.0):
    - Firebase/CoreOnly
    - FirebasePerformance (~> 10.22.0)
  - Firebase/RemoteConfig (10.22.0):
    - Firebase/CoreOnly
    - FirebaseRemoteConfig (~> 10.22.0)
  - Firebase/Storage (10.22.0):
    - Firebase/CoreOnly
    - FirebaseStorage (~> 10.22.0)
  - firebase_analytics (10.8.9):
    - Firebase/Analytics (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_auth (4.17.8):
    - Firebase/Auth (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_core (2.27.0):
    - Firebase/CoreOnly (= 10.22.0)
    - Flutter
  - firebase_crashlytics (3.4.18):
    - Firebase/Crashlytics (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_dynamic_links (5.4.17):
    - Firebase/DynamicLinks (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_in_app_messaging (0.7.4-17):
    - Firebase/InAppMessaging (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_messaging (14.7.19):
    - Firebase/Messaging (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_performance (0.9.3-17):
    - Firebase/Performance (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_remote_config (4.3.17):
    - Firebase/RemoteConfig (= 10.22.0)
    - firebase_core
    - Flutter
  - firebase_storage (11.6.9):
    - Firebase/Storage (= 10.22.0)
    - firebase_core
    - Flutter
  - FirebaseABTesting (10.23.0):
    - FirebaseCore (~> 10.0)
  - FirebaseAnalytics (10.22.0):
    - FirebaseAnalytics/AdIdSupport (= 10.22.0)
    - FirebaseCore (~> 10.0)
    - FirebaseInstallations (~> 10.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
    - GoogleUtilities/MethodSwizzler (~> 7.11)
    - GoogleUtilities/Network (~> 7.11)
    - "GoogleUtilities/NSData+zlib (~> 7.11)"
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - FirebaseAnalytics/AdIdSupport (10.22.0):
    - FirebaseCore (~> 10.0)
    - FirebaseInstallations (~> 10.0)
    - GoogleAppMeasurement (= 10.22.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
    - GoogleUtilities/MethodSwizzler (~> 7.11)
    - GoogleUtilities/Network (~> 7.11)
    - "GoogleUtilities/NSData+zlib (~> 7.11)"
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - FirebaseAppCheckInterop (10.23.0)
  - FirebaseAuth (10.22.0):
    - FirebaseAppCheckInterop (~> 10.17)
    - FirebaseCore (~> 10.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.8)
    - GoogleUtilities/Environment (~> 7.8)
    - GTMSessionFetcher/Core (< 4.0, >= 2.1)
    - RecaptchaInterop (~> 100.0)
  - FirebaseAuthInterop (10.23.0)
  - FirebaseCore (10.22.0):
    - FirebaseCoreInternal (~> 10.0)
    - GoogleUtilities/Environment (~> 7.12)
    - GoogleUtilities/Logger (~> 7.12)
  - FirebaseCoreExtension (10.23.0):
    - FirebaseCore (~> 10.0)
  - FirebaseCoreInternal (10.23.0):
    - "GoogleUtilities/NSData+zlib (~> 7.8)"
  - FirebaseCrashlytics (10.22.0):
    - FirebaseCore (~> 10.5)
    - FirebaseInstallations (~> 10.0)
    - FirebaseSessions (~> 10.5)
    - GoogleDataTransport (~> 9.2)
    - GoogleUtilities/Environment (~> 7.8)
    - nanopb (< 2.30911.0, >= 2.30908.0)
    - PromisesObjC (~> 2.1)
  - FirebaseDynamicLinks (10.22.0):
    - FirebaseCore (~> 10.0)
  - FirebaseInAppMessaging (10.22.0-beta):
    - FirebaseABTesting (~> 10.0)
    - FirebaseCore (~> 10.0)
    - FirebaseInstallations (~> 10.0)
    - GoogleUtilities/Environment (~> 7.8)
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - FirebaseInstallations (10.23.0):
    - FirebaseCore (~> 10.0)
    - GoogleUtilities/Environment (~> 7.8)
    - GoogleUtilities/UserDefaults (~> 7.8)
    - PromisesObjC (~> 2.1)
  - FirebaseMessaging (10.22.0):
    - FirebaseCore (~> 10.0)
    - FirebaseInstallations (~> 10.0)
    - GoogleDataTransport (~> 9.3)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.8)
    - GoogleUtilities/Environment (~> 7.8)
    - GoogleUtilities/Reachability (~> 7.8)
    - GoogleUtilities/UserDefaults (~> 7.8)
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - FirebasePerformance (10.22.0):
    - FirebaseCore (~> 10.5)
    - FirebaseInstallations (~> 10.0)
    - FirebaseRemoteConfig (~> 10.0)
    - FirebaseSessions (~> 10.5)
    - GoogleDataTransport (~> 9.2)
    - GoogleUtilities/Environment (~> 7.8)
    - GoogleUtilities/ISASwizzler (~> 7.8)
    - GoogleUtilities/MethodSwizzler (~> 7.8)
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - FirebaseRemoteConfig (10.22.0):
    - FirebaseABTesting (~> 10.0)
    - FirebaseCore (~> 10.0)
    - FirebaseInstallations (~> 10.0)
    - FirebaseSharedSwift (~> 10.0)
    - GoogleUtilities/Environment (~> 7.8)
    - "GoogleUtilities/NSData+zlib (~> 7.8)"
  - FirebaseSessions (10.23.0):
    - FirebaseCore (~> 10.5)
    - FirebaseCoreExtension (~> 10.0)
    - FirebaseInstallations (~> 10.0)
    - GoogleDataTransport (~> 9.2)
    - GoogleUtilities/Environment (~> 7.10)
    - nanopb (< 2.30911.0, >= 2.30908.0)
    - PromisesSwift (~> 2.1)
  - FirebaseSharedSwift (10.23.0)
  - FirebaseStorage (10.22.0):
    - FirebaseAppCheckInterop (~> 10.0)
    - FirebaseAuthInterop (~> 10.0)
    - FirebaseCore (~> 10.0)
    - FirebaseCoreExtension (~> 10.0)
    - GTMSessionFetcher/Core (< 4.0, >= 2.1)
  - fk_user_agent (2.0.0):
    - Flutter
  - Flutter (1.0.0)
  - flutter_compass (0.0.1):
    - Flutter
  - flutter_facebook_auth (6.2.0):
    - FBSDKLoginKit (~> 17.0.0)
    - Flutter
  - flutter_google_places_sdk_ios (0.0.1):
    - Flutter
    - GooglePlaces (~> 7.1.0)
  - flutter_native_splash (0.0.1):
    - Flutter
  - flutter_secure_storage (6.0.0):
    - Flutter
  - gallery_saver_updated (0.0.1):
    - Flutter
  - google_maps_flutter_ios (0.0.1):
    - Flutter
    - GoogleMaps (< 9.0)
  - google_sign_in_ios (0.0.1):
    - Flutter
    - FlutterMacOS
    - GoogleSignIn (~> 7.0)
  - GoogleAppMeasurement (10.22.0):
    - GoogleAppMeasurement/AdIdSupport (= 10.22.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
    - GoogleUtilities/MethodSwizzler (~> 7.11)
    - GoogleUtilities/Network (~> 7.11)
    - "GoogleUtilities/NSData+zlib (~> 7.11)"
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - GoogleAppMeasurement/AdIdSupport (10.22.0):
    - GoogleAppMeasurement/WithoutAdIdSupport (= 10.22.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
    - GoogleUtilities/MethodSwizzler (~> 7.11)
    - GoogleUtilities/Network (~> 7.11)
    - "GoogleUtilities/NSData+zlib (~> 7.11)"
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - GoogleAppMeasurement/WithoutAdIdSupport (10.22.0):
    - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
    - GoogleUtilities/MethodSwizzler (~> 7.11)
    - GoogleUtilities/Network (~> 7.11)
    - "GoogleUtilities/NSData+zlib (~> 7.11)"
    - nanopb (< 2.30911.0, >= 2.30908.0)
  - GoogleDataTransport (9.4.1):
    - GoogleUtilities/Environment (~> 7.7)
    - nanopb (< 2.30911.0, >= 2.30908.0)
    - PromisesObjC (< 3.0, >= 1.2)
  - GoogleMaps (8.4.0):
    - GoogleMaps/Maps (= 8.4.0)
  - GoogleMaps/Base (8.4.0)
  - GoogleMaps/Maps (8.4.0):
    - GoogleMaps/Base
  - GooglePlaces (7.1.0)
  - GoogleSignIn (7.1.0):
    - AppAuth (< 2.0, >= 1.7.3)
    - GTMAppAuth (< 5.0, >= 4.1.1)
    - GTMSessionFetcher/Core (~> 3.3)
  - GoogleUtilities/AppDelegateSwizzler (7.13.0):
    - GoogleUtilities/Environment
    - GoogleUtilities/Logger
    - GoogleUtilities/Network
    - GoogleUtilities/Privacy
  - GoogleUtilities/Environment (7.13.0):
    - GoogleUtilities/Privacy
    - PromisesObjC (< 3.0, >= 1.2)
  - GoogleUtilities/ISASwizzler (7.13.0):
    - GoogleUtilities/Privacy
  - GoogleUtilities/Logger (7.13.0):
    - GoogleUtilities/Environment
    - GoogleUtilities/Privacy
  - GoogleUtilities/MethodSwizzler (7.13.0):
    - GoogleUtilities/Logger
    - GoogleUtilities/Privacy
  - GoogleUtilities/Network (7.13.0):
    - GoogleUtilities/Logger
    - "GoogleUtilities/NSData+zlib"
    - GoogleUtilities/Privacy
    - GoogleUtilities/Reachability
  - "GoogleUtilities/NSData+zlib (7.13.0)":
    - GoogleUtilities/Privacy
  - GoogleUtilities/Privacy (7.13.0)
  - GoogleUtilities/Reachability (7.13.0):
    - GoogleUtilities/Logger
    - GoogleUtilities/Privacy
  - GoogleUtilities/UserDefaults (7.13.0):
    - GoogleUtilities/Logger
    - GoogleUtilities/Privacy
  - GTMAppAuth (4.1.1):
    - AppAuth/Core (~> 1.7)
    - GTMSessionFetcher/Core (< 4.0, >= 3.3)
  - GTMSessionFetcher/Core (3.3.2)
  - image_cropper (0.0.4):
    - Flutter
    - TOCropViewController (~> 2.6.1)
  - image_picker_ios (0.0.1):
    - Flutter
  - in_app_purchase_storekit (0.0.1):
    - Flutter
    - FlutterMacOS
  - integration_test (0.0.1):
    - Flutter
  - location (0.0.1):
    - Flutter
  - map_launcher (0.0.1):
    - Flutter
  - nanopb (2.30910.0):
    - nanopb/decode (= 2.30910.0)
    - nanopb/encode (= 2.30910.0)
  - nanopb/decode (2.30910.0)
  - nanopb/encode (2.30910.0)
  - open_filex (0.0.2):
    - Flutter
  - open_mail_app (0.0.1):
    - Flutter
  - package_info_plus (0.4.5):
    - Flutter
  - path_provider_foundation (0.0.1):
    - Flutter
    - FlutterMacOS
  - permission_handler_apple (9.3.0):
    - Flutter
  - pointer_interceptor_ios (0.0.1):
    - Flutter
  - PromisesObjC (2.4.0)
  - PromisesSwift (2.4.0):
    - PromisesObjC (= 2.4.0)
  - ReachabilitySwift (5.2.1)
  - RecaptchaInterop (100.0.0)
  - Sentry/HybridSDK (8.21.0):
    - SentryPrivate (= 8.21.0)
  - sentry_flutter (0.0.1):
    - Flutter
    - FlutterMacOS
    - Sentry/HybridSDK (= 8.21.0)
  - SentryPrivate (8.21.0)
  - share_plus (0.0.1):
    - Flutter
  - shared_preferences_foundation (0.0.1):
    - Flutter
    - FlutterMacOS
  - speech_to_text (0.0.1):
    - Flutter
    - Try
  - sqflite (0.0.3):
    - Flutter
    - FlutterMacOS
  - sqlite3 (3.45.1):
    - sqlite3/common (= 3.45.1)
  - sqlite3/common (3.45.1)
  - sqlite3/fts5 (3.45.1):
    - sqlite3/common
  - sqlite3/perf-threadsafe (3.45.1):
    - sqlite3/common
  - sqlite3/rtree (3.45.1):
    - sqlite3/common
  - sqlite3_flutter_libs (0.0.1):
    - Flutter
    - sqlite3 (~> 3.45.1)
    - sqlite3/fts5
    - sqlite3/perf-threadsafe
    - sqlite3/rtree
  - store_redirect (0.0.1):
    - Flutter
  - Stripe (23.22.1):
    - StripeApplePay (= 23.22.1)
    - StripeCore (= 23.22.1)
    - StripePayments (= 23.22.1)
    - StripePaymentsUI (= 23.22.1)
    - StripeUICore (= 23.22.1)
  - stripe_ios (0.0.1):
    - Flutter
    - Stripe (~> 23.22.0)
    - StripeApplePay (~> 23.22.0)
    - StripeFinancialConnections (~> 23.22.0)
    - StripePayments (~> 23.22.0)
    - StripePaymentSheet (~> 23.22.0)
    - StripePaymentsUI (~> 23.22.0)
  - StripeApplePay (23.22.1):
    - StripeCore (= 23.22.1)
  - StripeCore (23.22.1)
  - StripeFinancialConnections (23.22.1):
    - StripeCore (= 23.22.1)
    - StripeUICore (= 23.22.1)
  - StripePayments (23.22.1):
    - StripeCore (= 23.22.1)
    - StripePayments/Stripe3DS2 (= 23.22.1)
  - StripePayments/Stripe3DS2 (23.22.1):
    - StripeCore (= 23.22.1)
  - StripePaymentSheet (23.22.1):
    - StripeApplePay (= 23.22.1)
    - StripeCore (= 23.22.1)
    - StripePayments (= 23.22.1)
    - StripePaymentsUI (= 23.22.1)
  - StripePaymentsUI (23.22.1):
    - StripeCore (= 23.22.1)
    - StripePayments (= 23.22.1)
    - StripeUICore (= 23.22.1)
  - StripeUICore (23.22.1):
    - StripeCore (= 23.22.1)
  - TOCropViewController (2.6.1)
  - Try (2.1.1)
  - url_launcher_ios (0.0.1):
    - Flutter
  - Valet (4.2.0)
  - webcrypto (0.1.1):
    - Flutter
  - webview_flutter_wkwebview (0.0.1):
    - Flutter

DEPENDENCIES:
  - app_review_plus (from `.symlinks/plugins/app_review_plus/ios`)
  - app_settings (from `.symlinks/plugins/app_settings/ios`)
  - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
  - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
  - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
  - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
  - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`)
  - firebase_dynamic_links (from `.symlinks/plugins/firebase_dynamic_links/ios`)
  - firebase_in_app_messaging (from `.symlinks/plugins/firebase_in_app_messaging/ios`)
  - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
  - firebase_performance (from `.symlinks/plugins/firebase_performance/ios`)
  - firebase_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`)
  - firebase_storage (from `.symlinks/plugins/firebase_storage/ios`)
  - fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`)
  - Flutter (from `Flutter`)
  - flutter_compass (from `.symlinks/plugins/flutter_compass/ios`)
  - flutter_facebook_auth (from `.symlinks/plugins/flutter_facebook_auth/ios`)
  - flutter_google_places_sdk_ios (from `.symlinks/plugins/flutter_google_places_sdk_ios/ios`)
  - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
  - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
  - gallery_saver_updated (from `.symlinks/plugins/gallery_saver_updated/ios`)
  - google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
  - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
  - image_cropper (from `.symlinks/plugins/image_cropper/ios`)
  - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
  - in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
  - integration_test (from `.symlinks/plugins/integration_test/ios`)
  - location (from `.symlinks/plugins/location/ios`)
  - map_launcher (from `.symlinks/plugins/map_launcher/ios`)
  - open_filex (from `.symlinks/plugins/open_filex/ios`)
  - open_mail_app (from `.symlinks/plugins/open_mail_app/ios`)
  - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
  - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
  - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
  - pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`)
  - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
  - share_plus (from `.symlinks/plugins/share_plus/ios`)
  - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
  - speech_to_text (from `.symlinks/plugins/speech_to_text/ios`)
  - sqflite (from `.symlinks/plugins/sqflite/darwin`)
  - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
  - store_redirect (from `.symlinks/plugins/store_redirect/ios`)
  - stripe_ios (from `.symlinks/plugins/stripe_ios/ios`)
  - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
  - Valet (~> 4.2.0)
  - webcrypto (from `.symlinks/plugins/webcrypto/ios`)
  - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)

SPEC REPOS:
  trunk:
    - AppAuth
    - FBAEMKit
    - FBSDKCoreKit
    - FBSDKCoreKit_Basics
    - FBSDKLoginKit
    - Firebase
    - FirebaseABTesting
    - FirebaseAnalytics
    - FirebaseAppCheckInterop
    - FirebaseAuth
    - FirebaseAuthInterop
    - FirebaseCore
    - FirebaseCoreExtension
    - FirebaseCoreInternal
    - FirebaseCrashlytics
    - FirebaseDynamicLinks
    - FirebaseInAppMessaging
    - FirebaseInstallations
    - FirebaseMessaging
    - FirebasePerformance
    - FirebaseRemoteConfig
    - FirebaseSessions
    - FirebaseSharedSwift
    - FirebaseStorage
    - GoogleAppMeasurement
    - GoogleDataTransport
    - GoogleMaps
    - GooglePlaces
    - GoogleSignIn
    - GoogleUtilities
    - GTMAppAuth
    - GTMSessionFetcher
    - nanopb
    - PromisesObjC
    - PromisesSwift
    - ReachabilitySwift
    - RecaptchaInterop
    - Sentry
    - SentryPrivate
    - sqlite3
    - Stripe
    - StripeApplePay
    - StripeCore
    - StripeFinancialConnections
    - StripePayments
    - StripePaymentSheet
    - StripePaymentsUI
    - StripeUICore
    - TOCropViewController
    - Try
    - Valet

EXTERNAL SOURCES:
  app_review_plus:
    :path: ".symlinks/plugins/app_review_plus/ios"
  app_settings:
    :path: ".symlinks/plugins/app_settings/ios"
  connectivity_plus:
    :path: ".symlinks/plugins/connectivity_plus/ios"
  firebase_analytics:
    :path: ".symlinks/plugins/firebase_analytics/ios"
  firebase_auth:
    :path: ".symlinks/plugins/firebase_auth/ios"
  firebase_core:
    :path: ".symlinks/plugins/firebase_core/ios"
  firebase_crashlytics:
    :path: ".symlinks/plugins/firebase_crashlytics/ios"
  firebase_dynamic_links:
    :path: ".symlinks/plugins/firebase_dynamic_links/ios"
  firebase_in_app_messaging:
    :path: ".symlinks/plugins/firebase_in_app_messaging/ios"
  firebase_messaging:
    :path: ".symlinks/plugins/firebase_messaging/ios"
  firebase_performance:
    :path: ".symlinks/plugins/firebase_performance/ios"
  firebase_remote_config:
    :path: ".symlinks/plugins/firebase_remote_config/ios"
  firebase_storage:
    :path: ".symlinks/plugins/firebase_storage/ios"
  fk_user_agent:
    :path: ".symlinks/plugins/fk_user_agent/ios"
  Flutter:
    :path: Flutter
  flutter_compass:
    :path: ".symlinks/plugins/flutter_compass/ios"
  flutter_facebook_auth:
    :path: ".symlinks/plugins/flutter_facebook_auth/ios"
  flutter_google_places_sdk_ios:
    :path: ".symlinks/plugins/flutter_google_places_sdk_ios/ios"
  flutter_native_splash:
    :path: ".symlinks/plugins/flutter_native_splash/ios"
  flutter_secure_storage:
    :path: ".symlinks/plugins/flutter_secure_storage/ios"
  gallery_saver_updated:
    :path: ".symlinks/plugins/gallery_saver_updated/ios"
  google_maps_flutter_ios:
    :path: ".symlinks/plugins/google_maps_flutter_ios/ios"
  google_sign_in_ios:
    :path: ".symlinks/plugins/google_sign_in_ios/darwin"
  image_cropper:
    :path: ".symlinks/plugins/image_cropper/ios"
  image_picker_ios:
    :path: ".symlinks/plugins/image_picker_ios/ios"
  in_app_purchase_storekit:
    :path: ".symlinks/plugins/in_app_purchase_storekit/darwin"
  integration_test:
    :path: ".symlinks/plugins/integration_test/ios"
  location:
    :path: ".symlinks/plugins/location/ios"
  map_launcher:
    :path: ".symlinks/plugins/map_launcher/ios"
  open_filex:
    :path: ".symlinks/plugins/open_filex/ios"
  open_mail_app:
    :path: ".symlinks/plugins/open_mail_app/ios"
  package_info_plus:
    :path: ".symlinks/plugins/package_info_plus/ios"
  path_provider_foundation:
    :path: ".symlinks/plugins/path_provider_foundation/darwin"
  permission_handler_apple:
    :path: ".symlinks/plugins/permission_handler_apple/ios"
  pointer_interceptor_ios:
    :path: ".symlinks/plugins/pointer_interceptor_ios/ios"
  sentry_flutter:
    :path: ".symlinks/plugins/sentry_flutter/ios"
  share_plus:
    :path: ".symlinks/plugins/share_plus/ios"
  shared_preferences_foundation:
    :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
  speech_to_text:
    :path: ".symlinks/plugins/speech_to_text/ios"
  sqflite:
    :path: ".symlinks/plugins/sqflite/darwin"
  sqlite3_flutter_libs:
    :path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
  store_redirect:
    :path: ".symlinks/plugins/store_redirect/ios"
  stripe_ios:
    :path: ".symlinks/plugins/stripe_ios/ios"
  url_launcher_ios:
    :path: ".symlinks/plugins/url_launcher_ios/ios"
  webcrypto:
    :path: ".symlinks/plugins/webcrypto/ios"
  webview_flutter_wkwebview:
    :path: ".symlinks/plugins/webview_flutter_wkwebview/ios"

SPEC CHECKSUMS:
  app_review_plus: d1a456dd762c94d75ff5f7e90b828dc2598d78e6
  app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc
  AppAuth: a13994980c1ec792f7e2e665acd4d4aa6be43240
  connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
  FBAEMKit: 31a20c2d8744d8c57d3a5b7ae4e27b4fdd819193
  FBSDKCoreKit: dac911b656816f8d0b06e5fa4bac60e89505bb3b
  FBSDKCoreKit_Basics: 92b7b7458d57091370b0b6cc197578874c3b4b16
  FBSDKLoginKit: 5d5271ebfd1e39c6b071de8db5c4bd6255be3561
  Firebase: 797fd7297b7e1be954432743a0b3f90038e45a71
  firebase_analytics: b9ce200bfc2c54629076bb22d6a510f31c296ab8
  firebase_auth: 4cf9d126dc9629a77dbcbd23723e903d8277ff5a
  firebase_core: 100945864b4aedce3cfef0c62ab864858bf013cf
  firebase_crashlytics: 2b9ca6246501a03427eb43280be7615027e32142
  firebase_dynamic_links: 6149c6fc3790997eb8a392074e5ee4974840942b
  firebase_in_app_messaging: 0fc18e7e9d19b793a1cf48714cdb5bcafacedabc
  firebase_messaging: e65050bf9b187511d80ea3a4de7cf5573d2c7543
  firebase_performance: e08a33d300315eb2031d48c42611514c902d33c9
  firebase_remote_config: 5ebb1bf2503404f6b24e64f117dc6c22c0498d4c
  firebase_storage: 7add9d0db23f17b7fd798416e6bdb34bbe17658e
  FirebaseABTesting: aec61ed9a34d85a95e2013a3fdf051426a2419df
  FirebaseAnalytics: 8d0ff929c63b7f72260f332b86ccf569776b75d3
  FirebaseAppCheckInterop: a1955ce8c30f38f87e7d091630e871e91154d65d
  FirebaseAuth: bbe4c68f958504ba9e54aee181adbdf5b664fbc6
  FirebaseAuthInterop: a458e398bb1e9b71b9b42d46e54acc666b021d0f
  FirebaseCore: 0326ec9b05fbed8f8716cddbf0e36894a13837f7
  FirebaseCoreExtension: cb88851781a24e031d1b58e0bd01eb1f46b044b5
  FirebaseCoreInternal: 6a292e6f0bece1243a737e81556e56e5e19282e3
  FirebaseCrashlytics: e568d68ce89117c80cddb04073ab9018725fbb8c
  FirebaseDynamicLinks: 25ed0e87b0afb4769cc0ec8e942a532219abac28
  FirebaseInAppMessaging: bff8ac490bba54c298b48847e14bd56313d2da1b
  FirebaseInstallations: 42d6ead4605d6eafb3b6683674e80e18eb6f2c35
  FirebaseMessaging: 9f71037fd9db3376a4caa54e5a3949d1027b4b6e
  FirebasePerformance: 095debad1fc8d7d73148a835fcaec9e528946166
  FirebaseRemoteConfig: e1b992a94d3674dddbcaf5d0d31a0312156ceb1c
  FirebaseSessions: f06853e30f99fe42aa511014d7ee6c8c319f08a3
  FirebaseSharedSwift: c92645b392db3c41a83a0aa967de16f8bad25568
  FirebaseStorage: bc7bddc743548a89cfb896843a77cf4bdde2c231
  fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
  Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
  flutter_compass: cbbd285cea1584c7ac9c4e0c3e1f17cbea55e855
  flutter_facebook_auth: 66188df7905bfcaf3d6d2bd6527302c56448f04d
  flutter_google_places_sdk_ios: 8d3d6b935ddd9988780fcc605acd2500fd0ecdcd
  flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
  flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
  gallery_saver_updated: 4670d020916ed50f0e284ad77fbcbe5d6d85edc9
  google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99
  google_sign_in_ios: 989eea5abe94af62050782714daf920be883d4a2
  GoogleAppMeasurement: ccefe3eac9b0aa27f96066809fb1a7fe4b462626
  GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
  GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d
  GooglePlaces: 187946335ec3dc624de71c0a9ddcc712f19b0ee1
  GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db
  GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152
  GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de
  GTMSessionFetcher: 0e876eea9782ec6462e91ab872711c357322c94f
  image_cropper: a3291c624a953049bc6a02e1f8c8ceb162a24b25
  image_picker_ios: b545a5f16c0fa88e3ecbbce3ed4de45567a8ec18
  in_app_purchase_storekit: 0e4b3c2e43ba1e1281f4f46dd71b0593ce529892
  integration_test: 13825b8a9334a850581300559b8839134b124670
  location: d5cf8598915965547c3f36761ae9cc4f4e87d22e
  map_launcher: e325db1261d029ff33e08e03baccffe09593ffea
  nanopb: 438bc412db1928dac798aa6fd75726007be04262
  open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
  open_mail_app: 794172f6a22cd16319d3ddaf45e945b2f74952b0
  package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
  path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
  permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
  pointer_interceptor_ios: 9280618c0b2eeb80081a343924aa8ad756c21375
  PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
  PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
  ReachabilitySwift: 5ae15e16814b5f9ef568963fb2c87aeb49158c66
  RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21
  Sentry: ebc12276bd17613a114ab359074096b6b3725203
  sentry_flutter: dff1df05dc39c83d04f9330b36360fc374574c5e
  SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe
  share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
  shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
  speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe
  sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
  sqlite3: 73b7fc691fdc43277614250e04d183740cb15078
  sqlite3_flutter_libs: af0e8fe9bce48abddd1ffdbbf839db0302d72d80
  store_redirect: 2977747cf81689a39bd62c248c2deacb7a0d131e
  Stripe: b65e9f748f8f51b51e015b0d72f5474dc0708788
  stripe_ios: 433385aa051f8965915d495744946ee5a5d657db
  StripeApplePay: 4a2fef6cd4e1e9b2c0849919fc7b3a9c5c3684b1
  StripeCore: e1f6cd91d1487c0f6b5db81b42aec860420f75c9
  StripeFinancialConnections: d223a44613e6982cedd552c5950edc9b4901c90a
  StripePayments: 76144e9e6b5fee859954238a175f859043562659
  StripePaymentSheet: a25d920bb3bb5e2580696476482dc7df9cb5e4e2
  StripePaymentsUI: 66088abec88754bbdd522ef227dfdbb2265a653e
  StripeUICore: b193c7d35e9cd1b04bc9ed4a6fb8c548fcee83fa
  TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
  Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96
  url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586
  Valet: 371e7c0b0387f0659bb23ddd255c4718ca1f0ef9
  webcrypto: 58dac29c85327d3d72a47d19d44128f10905f58e
  webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36

PODFILE CHECKSUM: 12a8c721b5bba05fe6972e0da56e5e060c830385

COCOAPODS: 1.15.2

AndroidManifest.xml

No response

MainActivity.java

No response

MainActivity.kt

No response

index.html

No response

Info.plist (macOS)

No response

darwinmorocho-deuna commented 3 weeks ago

@nroman446 could you try using flutter_facebook_auth:6.1.1 ? Version 6.2.0 use the facebook SDK 17.0.0 so I need to be sure if the problem is due to this upgrade

pamafe1976 commented 3 weeks ago

@nroman446 could you try using flutter_facebook_auth:6.1.1 ? Version 6.2.0 use the facebook SDK 17.0.0 so I need to be sure if the problem is due to this upgrade

I have the same error.
I confirm that it also happens with 6.1.1 At least in my case, it only happens on IOS. Android works fine, I tested API 31 and 34. Maybe unrelated, but in IOS facebook login screen it also shows the warning:

"If you are not using limited login you will need to handle all graph..." with link to this blog

[(https://developers.facebook.com/blog/post/2024/03/28/changes-made-to-fb-login-sdk/)]

Regards

nroman446 commented 3 weeks ago

@nroman446 could you try using flutter_facebook_auth:6.1.1 ? Version 6.2.0 use the facebook SDK 17.0.0 so I need to be sure if the problem is due to this upgrade

6.1.1 is working as expected. Facebook backdoored the sunsetting of classic login so I suspect that's leading to the issue.

edit: 6.1.1 works with classic login, it does NOT work for limited login

pamafe1976 commented 3 weeks ago

In my case it fails with this same error both in versions 6.1.1 and 6.2.0 Maybe Im doing something wrong because its the first time I use this package,

      final LoginResult loginResult = await FacebookAuth.instance.login();
      if (loginResult.accessToken?.token != null) {
        final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken!.token);
        await FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);

The loginResult returns success and an AccessToken, but the FirebaseAuth.instance.signInWithCredential returns:

firebase_auth/invalid-credential] {"code":190,"message":"Malformed access token"}

This happens only in IOS. Android works fine

bdezso commented 3 weeks ago

Same error here!

shamjam commented 2 weeks ago

@pamafe1976 @bdezso Did you try changing it to 6.1.1 on both pubspec.yaml and Podfile.lock?

pamafe1976 commented 2 weeks ago

@shamjam you're right that after downgrading in pubspec.yaml to 6.1.1, the podfile.lock was still in 6.2.0 I had to do a flutter clean, and after that it went to 6.0.4 on podfile.lock and now it works fine.

I don't know why it goes to 6.0.4 instead of 6.1.1. If I try to force it to 6.1.1, I get an error when running pod install

bdezso commented 2 weeks ago

@pamafe1976 , try rm Podfile.lock in ios directory

bdezso commented 2 weeks ago

@shamjam Thanks for the tip. It's working now. I had to update the .lock file too.

nroman446 commented 1 week ago

I believe I have figured out the issue. FacebookAuth at line 90 only provides the providerid and accesstoken. oauth for limited login requires the raw nonce

kamyweb commented 1 week ago

the same is report here https://github.com/darwin-morocho/flutter-facebook-auth/issues/396 Please provide us the AuthenticationToken to check it and retrive data that are stored inside that jwt token

RaghvindYadav commented 6 days ago

In my case it fails with this same error both in versions 6.1.1 and 6.2.0 Maybe Im doing something wrong because its the first time I use this package,

      final LoginResult loginResult = await FacebookAuth.instance.login();
      if (loginResult.accessToken?.token != null) {
        final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken!.token);
        await FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);

The loginResult returns success and an AccessToken, but the FirebaseAuth.instance.signInWithCredential returns:

firebase_auth/invalid-credential] {"code":190,"message":"Malformed access token"}

This happens only in IOS. Android works fine

Is your problem solved? I am getting same problem for iOS version 17.0 and above

darwin-morocho commented 6 days ago

I believe I have figured out the issue. FacebookAuth at line 90 only provides the providerid and accesstoken. oauth for limited login requires the raw nonce

Please add more context and how the issue could be fixed.

RaghvindYadav commented 6 days ago

I believe I have figured out the issue. FacebookAuth at line 90 only provides the providerid and accesstoken. oauth for limited login requires the raw nonce

Please add more context and how the issue could be fixed.

https://firebase.google.com/docs/auth/ios/facebook-login I hope this will use full.

darwin-morocho commented 6 days ago

I believe I have figured out the issue. FacebookAuth at line 90 only provides the providerid and accesstoken. oauth for limited login requires the raw nonce

Please add more context and how the issue could be fixed.

https://firebase.google.com/docs/auth/ios/facebook-login I hope this will use full.

I will check it and try to deploy a pre-release version

darwin-morocho commented 6 days ago

I have deployed a pre-release version of the limited login on iOS. flutter_facebook_auth: ^7.0.0-dev.3

Please check the BREAKING CHANGES https://pub.dev/packages/flutter_facebook_auth/versions/7.0.0-dev.3/changelog#700-dev3

RaghvindYadav commented 6 days ago

@darwin-morocho Still getting the same error. When I tried to send credential to Firebase. FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);

flutter: Facebook Auth : AuthCredential(providerId: facebook.com, signInMethod: facebook.com, token: null, accessToken: o7p2zV6p7UUjBVP61BMm9fUrjyYXXt0AHOZ0asPgaPz4mmxfmebNvJaC69bgFTgZZxSAGFH4l925sMt5ta71k0jeX6Xalw1gXC7KnaBO1N0tj4hzGtMZRK3fmX29tZbTKbEXrsldUXYycgKUtL8SQ69ZY6LZwoK2QCGUNDlsel3ubdiEYoxY8GeqPEobzI10ssItKu5pxIPihf7pMcRdCPiUUTQwOekPB1gqj9sRNl1uhW6onH5nHywIMDgH1OB) flutter: Firebase Auth error: [firebase_auth/invalid-credential] {"code":190,"message":"Invalid OAuth access token - Cannot parse access token"}

darwin-morocho commented 6 days ago

@darwin-morocho Still getting the same error. When I tried to send credential to Firebase. FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);

flutter: Facebook Auth : AuthCredential(providerId: facebook.com, signInMethod: facebook.com, token: null, accessToken: o7p2zV6p7UUjBVP61BMm9fUrjyYXXt0AHOZ0asPgaPz4mmxfmebNvJaC69bgFTgZZxSAGFH4l925sMt5ta71k0jeX6Xalw1gXC7KnaBO1N0tj4hzGtMZRK3fmX29tZbTKbEXrsldUXYycgKUtL8SQ69ZY6LZwoK2QCGUNDlsel3ubdiEYoxY8GeqPEobzI10ssItKu5pxIPihf7pMcRdCPiUUTQwOekPB1gqj9sRNl1uhW6onH5nHywIMDgH1OB) flutter: Firebase Auth error: [firebase_auth/invalid-credential] {"code":190,"message":"Invalid OAuth access token - Cannot parse access token"}

@kamyweb following this documentation you need to pass a nonce similar to the next swift code

// Initialize a Firebase credential.
let idTokenString = AuthenticationToken.current?.tokenString
let nonce = currentNonce
let credential = OAuthProvider.credential(withProviderID: "facebook.com",
                                          idToken: idTokenString!,
                                          rawNonce: nonce)

Thus plugin now has the LimitedLogin class that allow you get the generated nonce of your access token

RaghvindYadav commented 6 days ago

String randomNonceString({int length = 32}) { assert(length > 0); List randomBytes = List.filled(length, 0); final Random random = Random.secure(); for (int i = 0; i < length; i++) { randomBytes[i] = random.nextInt(256); }

String charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';

String nonce = String.fromCharCodes(randomBytes.map((byte) {
  // Pick a random character from the set, wrapping around if needed.
  return charset.codeUnitAt(byte % charset.length);
}));

return nonce;

}

final nonce = sha256.convert(utf8.encode(randomNonceString())).toString();

I am passing nonce too, now facing different error. flutter: Firebase Auth error: [firebase_auth/invalid-credential] {"code":190,"message":"Bad signature"}

perthcpe23 commented 6 days ago

For limited login, aren't we supposed to pass SHA256 of raw nonce to Facebook? I noticed this in your changes.

guard let configuration = LoginConfiguration(
    permissions: permissions,
    tracking: isLimitedLogin ? .limited : tracking,
    nonce: UUID().uuidString
)

UUID().uuidString supposed to be SHA256 of raw nonce which should be passed from the lib users (not randomly generated by lib itself) because then the lib users will need to provide that exact raw nonce to Firebase in order to get Firebase credential

// Initialize a Firebase credential.
let idTokenString = AuthenticationToken.current?.tokenString
let nonce = currentNonce
let credential = OAuthProvider.credential(withProviderID: "facebook.com",
                                          idToken: idTokenString!,
                                          rawNonce: nonce)

If incorrect raw nonce is passed to Firebase, we get this flutter: [firebase_auth/missing-or-invalid-nonce] The nonce in ID Token "..." does not match the SHA256 hash of the raw nonce "..." in the request.

Ref: https://firebase.google.com/docs/auth/ios/facebook-login#implement_facebook_limited_login

You will send the SHA-256 hash of the nonce with your sign-in request, which Facebook will pass unchanged in the response. Firebase validates the response by hashing the original nonce and comparing it to the value passed by Facebook.

darwin-morocho commented 6 days ago

@nroman446 @RaghvindYadav you can use the next code

final result = await FacebookAuth.instance.login();
if (result.status == LoginStatus.success){
    final accessToken = result.accessToken;
    final nonce = accessToken is LimitedToken ? accessToken.nonce : null;
}
perthcpe23 commented 6 days ago

For classic token, I got this: type 'Null' is not a subtype of type 'int' at new ClassicToken.fromJson (package:flutter_facebook_auth_platform_interface/src/access_token.dart:109:13)

darwin-morocho commented 6 days ago

For classic token, I got this: type 'Null' is not a subtype of type 'int' at new ClassicToken.fromJson (package:flutter_facebook_auth_platform_interface/src/access_token.dart:109:13)

Try with flutter_facebook_auth: 7.0.0-dev.4

nroman446 commented 5 days ago

I get a similar issue: type 'LimitedToken' is not a subtype of type 'String' in type cast

darwin-morocho commented 5 days ago

I get a similar issue: type 'LimitedToken' is not a subtype of type 'String' in type cast

Please check https://github.com/darwin-morocho/flutter-facebook-auth/blob/7.0.0/facebook_auth_platform_interface/lib/src/access_token.dart

LimitedToken is a class

RaghvindYadav commented 5 days ago

@darwin-morocho Limited Login still not works. flutter: AuthCredential(providerId: facebook.com, signInMethod: facebook.com, token: null, accessToken: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImVjMTFkNTAzNDFjMDhlODI4OTk2NTBlNmFmY2M2NjY4ZjJhMGE0MjAifQ.eyJpc3MiOiJodHRwczpcL1wvd3d3LmZhY2Vib29rLmNvbSIsImF1ZCI6IjE1NTUyNTg3NTg2NTUzMzIiLCJzdWIiOiIxMjIxMzkwNjc4ODYxNzU1OTkiLCJpYXQiOjE3MTQ0NDg1NDgsImV4cCI6MTcxNDQ1MjE0OCwianRpIjoiUjQ3Ri40NDRmNTRlYTU0YWQxMWFkMmEzMTdjOGRkMTU4ZDVhMGEyOTcyODA5ZmI3ZDk2ZTI4NGQ5YTBiOGJmMGZhYjNhIiwibm9uY2UiOiI2MEQwM0UxQS0wRUYxLTQwRjctQTZFMi04NUE4NDNCNjExOTAiLCJlbWFpbCI6ImphaGFudmlcdTAwNDBiYXJhZ2F1bi5jb20iLCJnaXZlbl9uYW1lIjoiSmFoYW52aSIsImZhbWlseV9uYW1lIjoiVnlhcyIsIm5hbWUiOiJKYWhhbnZpIFZ5YXMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL3Njb250ZW50LmZkZWw4LTIuZm5hLmZiY2RuLm5ldFwvdlwvdDEuMzA0OTctMVwvODQ2MjgyNzNfMTc2MTU5ODMwMjc3ODU2Xzk3MjY5MzM2MzkyMjgyOTMxMl9uLmpwZz9zdHA9YzI5LjAuMTAwLjEwMGFfY3AwX2RzdC1qcGdfZTE1X3AxMDB4MTAwX3E2NSZfbmNfY2F0PTEmY2NiPTEtNyZfbmNfc2lkPTVmMjA0OCZlZmc9ZXlKcElqb2lkQ0o5Jl9uY19vaGM9Sk52aGFTaTIwRnNBYjRWQWVkRSZfbmNfb2M9QW<…> flutter: Firebase Auth error: [firebase_auth/invalid-credential] {"code":190,"message":"Bad signature"}

If I am using LoginTracking.enabled then it also through error but different flutter: Firebase Auth failed: type 'Null' is not a subtype of type 'int', However this package works if I allowed to ATT permission. Login get succeed. Now the problem is for Limited login.

perthcpe23 commented 5 days ago

For classic token, I got this: type 'Null' is not a subtype of type 'int' at new ClassicToken.fromJson (package:flutter_facebook_auth_platform_interface/src/access_token.dart:109:13)

Try with flutter_facebook_auth: 7.0.0-dev.4

Yes, that was from flutter_facebook_auth: 7.0.0-dev.4

darwin-morocho commented 5 days ago

For classic token, I got this: type 'Null' is not a subtype of type 'int' at new ClassicToken.fromJson (package:flutter_facebook_auth_platform_interface/src/access_token.dart:109:13)

Try with flutter_facebook_auth: 7.0.0-dev.4

Yes, that was from flutter_facebook_auth: 7.0.0-dev.4

Try with flutter_facebook_auth: 7.0.0-dev.5

RaghvindYadav commented 5 days ago

@darwin-morocho still limited login not works, getting the below response. flutter: AuthCredential(providerId: facebook.com, signInMethod: oauth, token: null, accessToken: null) flutter: Firebase Auth error: [firebase_auth/invalid-credential] The audience in ID Token [-----] does not match the expected audience ++++.

Now non limited login also get failed. flutter: AuthCredential(providerId: facebook.com, signInMethod: facebook.com, token: null, accessToken: EAAWGfZBXX7WQBO4s7lT6tPPj3XTza52ZAAWiaV0cnqZAO41K5KB7EQtWRaIlqTlfvsJFDlOmLU1Gp3O8GTVSzCRPVEPGnm1KPt8Xh7OrE11UnZAKZBJG4ZBTMhGM9JO2W6cA45Bk7FYBP4he5XOygZCwS3bxN7SvrGPdovyOa732lH4cbZCPwJYUGa0QuydxODhcbT4kMLKvBRcjD62W1VFZBHpaykSaUlmVP3I7qyPPyDfXGeFYph14y5RcskgTuUbCHaQZDZD) flutter: Firebase Auth error: [firebase_auth/invalid-credential] {"error":{"message":"(#100) The App_id in the input_token did not match the Viewing App","type":"OAuthException","code":100,"fbtrace_id":"A4kfyvC_XSWJtqbexuhZB9a"}}

darwinmorocho-deuna commented 5 days ago

he App_id in the input_token did not match the Viewing App

I am not sure that the error is due to this plugin please check your configuration into the facebook and firebase console

RaghvindYadav commented 5 days ago

@darwin-morocho this flutter_facebook_auth: ^6.2.0 works fine when I added ATT prompt when user allow to track app, but login failed user revoke the tracking request.

In android and web everything works good.

darwinmorocho-deuna commented 5 days ago

@darwin-morocho this flutter_facebook_auth: ^6.2.0 works fine when I added ATT prompt when user allow to track app, but login failed user revoke the tracking request.

In android and web everything works good.

I will try to reproduce the issue creating a firebase project and adding it to this repo.

jonahtwalker commented 4 days ago

For limited login, aren't we supposed to pass SHA256 of raw nonce to Facebook? I noticed this in your changes.

guard let configuration = LoginConfiguration(
    permissions: permissions,
    tracking: isLimitedLogin ? .limited : tracking,
    nonce: UUID().uuidString
)

UUID().uuidString supposed to be SHA256 of raw nonce which should be passed from the lib users (not randomly generated by lib itself) because then the lib users will need to provide that exact raw nonce to Firebase in order to get Firebase credential

// Initialize a Firebase credential.
let idTokenString = AuthenticationToken.current?.tokenString
let nonce = currentNonce
let credential = OAuthProvider.credential(withProviderID: "facebook.com",
                                          idToken: idTokenString!,
                                          rawNonce: nonce)

If incorrect raw nonce is passed to Firebase, we get this flutter: [firebase_auth/missing-or-invalid-nonce] The nonce in ID Token "..." does not match the SHA256 hash of the raw nonce "..." in the request.

Ref: https://firebase.google.com/docs/auth/ios/facebook-login#implement_facebook_limited_login

You will send the SHA-256 hash of the nonce with your sign-in request, which Facebook will pass unchanged in the response. Firebase validates the response by hashing the original nonce and comparing it to the value passed by Facebook.

This looks to be the remaining blocker for our implementation, where Limited Logins are responding with: Firebase Auth error: [firebase_auth/missing-or-invalid-nonce] The nonce in ID Token "<generated via login method>" does not match the SHA256 hash of the raw nonce "<from accessToken.nonce>" in the request.

    ...
    late LoginResult loginResult;
    late OAuthCredential facebookAuthCredential;
    final trackingPermission = await Permission.appTrackingTransparency.status;
    try {
      String tokenString = '';
      String? nonce;
      if (trackingPermission == PermissionStatus.granted) {
        loginResult = await FacebookAuth.instance.login(
          permissions: ['public_profile', 'email'],
          loginTracking: LoginTracking.enabled,
        );
      } else {
        loginResult = await FacebookAuth.instance.login(permissions: ['public_profile', 'email']);
      }

      if (loginResult.status == LoginStatus.success) {
        final AccessToken? accessToken = loginResult.accessToken;
        tokenString = accessToken!.tokenString;
        if (accessToken is LimitedToken) {
          nonce = accessToken.nonce;
          facebookAuthCredential = OAuthCredential(
            providerId: 'facebook.com',
            signInMethod: 'oauth',
            idToken: tokenString,
            rawNonce: nonce,
          );
        } else {
          facebookAuthCredential = FacebookAuthProvider.credential(tokenString);
        }
      }
    } catch (e) {
    ...
darwin-morocho commented 4 days ago

I will add an option to pass a custom nonce and release it tomorrow