darwin-morocho / flutter-facebook-auth

A flutter plugin to add login with facebook in your flutter app
197 stars 141 forks source link

Facebook Limited Login does not work on iOS #431

Closed noforeignland closed 2 weeks ago

noforeignland commented 2 weeks ago

What version are you using?

7.1.1

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

MacOS 14.2.1

What platforms are you seeing the problem on?

iOS

pubspec.yaml

name: ...
description: ...

# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# 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: 1.2.0+129

environment:
  # Min Dart SDK (bundled with Flutter)
  sdk: ^3.5.3

# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`. Alternatively,
# dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies:
  flutter:
    sdk: flutter

  mapbox_maps_flutter: ^2.2.1
  get: ^4.6.6
  shared_preferences: ^2.0.13
  easy_debounce: ^2.0.3
  # Network
  http: ^1.1.0
  dio: ^5.4.0
  http_parser: ^4.0.2 # required by dio
  # Fonts
  font_awesome_flutter: ^10.4.0
  google_fonts: ^6.2.1
  # UI
  badges: ^3.1.2
  sliding_up_panel: ^2.0.0+1
  flutter_staggered_grid_view: ^0.7.0
  flutter_html: ^3.0.0-alpha.6
  flutter_speed_dial: ^6.0.0
  flutter_typeahead: ^5.2.0
  grouped_list: ^5.1.1
  loading_indicator: ^3.0.3 # bouncing balls used to indicate other user is typing in chat pages
  scrollable_positioned_list: ^0.3.5
  flutter_rating_bar: ^4.0.1
  photo_view: ^0.15.0
  tutorial_coach_mark: ^1.2.4
  flutter_slidable: ^3.0.1 # slide to reveal list item commands
  # HTML editing
  flutter_quill: ^10.1.9
  html: ^0.15.2
  # Firebase
  firebase_core: ^3.3.0
  firebase_messaging: ^15.0.4
  firebase_database: ^11.0.4
  firebase_analytics: ^11.2.1
  firebase_crashlytics: ^4.1.2
  firebase_auth: ^5.1.4
  # Auth
  google_sign_in: ^6.2.1
  flutter_facebook_auth: ^7.1.1
  # Database
  hive: ^2.2.1
  hive_flutter: ^1.1.0
  # Push notifications
  flutter_local_notifications: ^17.2.1+2
  flutter_app_badger: ^1.5.0
  # GPS Location
  location: ^6.0.2
  filesize: ^2.0.1 # File sizes for saved boat tracks
  url_launcher: ^6.1.2
  image_picker: ^1.0.4
  email_validator: ^2.0.1
  flutter_keyboard_visibility:
  connectivity_plus: ^6.0.5
  youtube_player_flutter: ^9.0.4
  package_info_plus: ^8.0.2 # get details of nfl app build number
  cached_network_image: ^3.4.1
  flutter_cache_manager: ^3.4.1 # used to force cache clear when debugging only
  haversine_distance: ^1.2.1
  uuid: ^4.5.0
  path_provider: ^2.0.11 # need this to find the application documents directory (to save boat tracks)
  device_info_plus: ^10.1.2
  logger: ^2.4.0
  move_to_background: ^1.0.2 # send NFL to background when back button pressed
  app_links: ^6.3.2 # Deep linking support
  webview_flutter: ^4.4.3 # browser view used to show the NFL Magazine

dev_dependencies:
  flutter_test:
    sdk: flutter

  # The "flutter_lints" package below contains a set of recommended lints to
  # encourage good coding practices. The lint set provided by the package is
  # activated in the `analysis_options.yaml` file located at the root of your
  # package. See that file for information about deactivating specific lint
  # rules and activating additional ones.
  flutter_lints: ^4.0.0

# 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 packages.
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

Describe the Bug

NOTE: this is not related to the new requirement in iOS to create a nonce value when signing in. I've created this as a separate issue from #428 as there appears to be some conflation of the two problems there and the responses offered focus on the nonce generation only.

The problem is preventing users from signing in to our app using Facebook.

When signing in from an iOS device, a warning is shown on the Facebook Limited Login page (see below).

As a developer it is possible to ignore this message and still sign in; however, end users (non-developer accounts) cannot sign in at all.

fblimited

Expected Behavior

Both developers and regular users should be able to sign in.

To Reproduce

I checked and double checked the documented setup steps and always see this error. I am not able to test this on other projects.

Relevant log output

None.

flutter doctor -v

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.24.3, on macOS 14.2.1 23C71 darwin-arm64, locale en-GB)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.2)
[✓] IntelliJ IDEA Ultimate Edition (version 2024.1.1)
[✓] VS Code (version 1.94.1)
[✓] Connected device (4 available)
[✓] Network resources

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>BGTaskSchedulerPermittedIdentifiers</key>
    <array>
        <string>com.transistorsoft.fetch</string>
    </array>
    <key>CADisableMinimumFrameDurationOnPhone</key>
    <true/>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleDisplayName</key>
    <string>appname</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>com.domain</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.2.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fbXXXXXXXX</string>
                <string>com.googleusercontent.apps.XXXXXXXX</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>129</string>
    <key>FacebookAppID</key>
    <string>387067408339189</string>
    <key>FacebookClientToken</key>
    <string>XXXXXXXX</string>
    <key>FacebookDisplayName</key>
    <string>domain.com</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>https</string>
        <string>http</string>
        <string>tel</string>
        <string>fbapi</string>
        <string>fb-messenger-share-api</string>
    </array>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSCameraUsageDescription</key>
    <string>To take photos of your boat or places you&apos;re visiting.</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Your location is required for boat tracking and locating places and services near you.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Your location is required for boat tracking and locating places and services near you.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Your location is required for boat tracking and locating places and services near you.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>To share your photos</string>
    <key>UIApplicationSupportsIndirectInputEvents</key>
    <true/>
    <key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
        <string>location</string>
        <string>processing</string>
        <string>remote-notification</string>
    </array>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIRequiresFullScreen</key>
    <true/>
    <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/>
    <key>io.flutter.embedded_views_preview</key>
    <string>yes</string>
    <key>FlutterDeepLinkingEnabled</key>
    <false/>
</dict>
</plist>

Podfile (iOS)

# Uncomment this line to define a global platform for your project
platform :ios, '13.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  target 'RunnerTests' do
    inherit! :search_paths
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end

AndroidManifest.xml

No response

MainActivity.java

No response

MainActivity.kt

No response

index.html

No response

Info.plist (macOS)

No response

darwinmorocho-deuna commented 2 weeks ago

@noforeignland the issue must be opened here due to is not a bug of this plugin.