Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Game Center login throws invalid signature after app transfer #14019

Open
orkun1675 opened this issue Nov 3, 2024 · 6 comments
Open

Game Center login throws invalid signature after app transfer #14019

orkun1675 opened this issue Nov 3, 2024 · 6 comments

Comments

@orkun1675
Copy link

orkun1675 commented Nov 3, 2024

Description

Users who already had accounts before an iOS App Transfer are unable to login after the app transfer using GameCenterAuthProvider.

Login attempts throw [firebase_auth/invalid-credential] Invalid signature.

Reproducing the issue

  1. Create Firebase iOS app.
  2. Enable and setup Game Center auth.
  3. Login using Game Center for account A.
  4. Transfer app to another developer; this means the Apple Team ID changes.
  5. Update the Team ID in Firebase Console Settings:
firebase console 6. Re-download `GoogleService-Info.plist` 6. Attempt to login with account B. 7. Observe that login fails with `[firebase_auth/invalid-credential] Invalid signature.`

Firebase SDK Version

11.2.0

Xcode Version

16.1

Installation Method

CocoaPods

Firebase Product(s)

Authentication

Targeted Platforms

iOS

Relevant Log Output

No response

If using Swift Package Manager, the project's Package.resolved

Expand Package.resolved snippet
Replace this line with the contents of your Package.resolved.

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet
PODS:
  - alarm (0.0.1):
    - Flutter
  - app_badge_plus (1.1.6):
    - Flutter
  - audio_session (0.0.1):
    - Flutter
  - battery_plus (1.0.0):
    - Flutter
  - cloud_firestore (5.4.4):
    - Firebase/Firestore (= 11.2.0)
    - firebase_core
    - Flutter
  - connectivity_plus (0.0.1):
    - Flutter
    - FlutterMacOS
  - device_info_plus (0.0.1):
    - Flutter
  - FBAEMKit (17.1.0):
    - FBSDKCoreKit_Basics (= 17.1.0)
  - FBSDKCoreKit (17.1.0):
    - FBAEMKit (= 17.1.0)
    - FBSDKCoreKit_Basics (= 17.1.0)
  - FBSDKCoreKit_Basics (17.1.0)
  - FBSDKLoginKit (17.1.0):
    - FBSDKCoreKit (= 17.1.0)
  - Firebase/Analytics (11.2.0):
    - Firebase/Core
  - Firebase/Auth (11.2.0):
    - Firebase/CoreOnly
    - FirebaseAuth (~> 11.2.0)
  - Firebase/Core (11.2.0):
    - Firebase/CoreOnly
    - FirebaseAnalytics (~> 11.2.0)
  - Firebase/CoreOnly (11.2.0):
    - FirebaseCore (= 11.2.0)
  - Firebase/Crashlytics (11.2.0):
    - Firebase/CoreOnly
    - FirebaseCrashlytics (~> 11.2.0)
  - Firebase/Firestore (11.2.0):
    - Firebase/CoreOnly
    - FirebaseFirestore (~> 11.2.0)
  - Firebase/Installations (11.2.0):
    - Firebase/CoreOnly
    - FirebaseInstallations (~> 11.2.0)
  - Firebase/RemoteConfig (11.2.0):
    - Firebase/CoreOnly
    - FirebaseRemoteConfig (~> 11.2.0)
  - firebase_analytics (11.3.3):
    - Firebase/Analytics (= 11.2.0)
    - firebase_core
    - Flutter
  - firebase_app_installations (0.3.1-4):
    - Firebase/Installations (= 11.2.0)
    - firebase_core
    - Flutter
  - firebase_auth (5.3.1):
    - Firebase/Auth (= 11.2.0)
    - firebase_core
    - Flutter
  - firebase_core (3.6.0):
    - Firebase/CoreOnly (= 11.2.0)
    - Flutter
  - firebase_crashlytics (4.1.3):
    - Firebase/Crashlytics (= 11.2.0)
    - firebase_core
    - Flutter
  - firebase_remote_config (5.1.3):
    - Firebase/RemoteConfig (= 11.2.0)
    - firebase_core
    - Flutter
  - FirebaseABTesting (11.4.0):
    - FirebaseCore (~> 11.0)
  - FirebaseAnalytics (11.2.0):
    - FirebaseAnalytics/AdIdSupport (= 11.2.0)
    - FirebaseCore (~> 11.0)
    - FirebaseInstallations (~> 11.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
    - GoogleUtilities/MethodSwizzler (~> 8.0)
    - GoogleUtilities/Network (~> 8.0)
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
    - nanopb (~> 3.30910.0)
  - FirebaseAnalytics/AdIdSupport (11.2.0):
    - FirebaseCore (~> 11.0)
    - FirebaseInstallations (~> 11.0)
    - GoogleAppMeasurement (= 11.2.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
    - GoogleUtilities/MethodSwizzler (~> 8.0)
    - GoogleUtilities/Network (~> 8.0)
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
    - nanopb (~> 3.30910.0)
  - FirebaseAppCheckInterop (11.4.0)
  - FirebaseAuth (11.2.0):
    - FirebaseAppCheckInterop (~> 11.0)
    - FirebaseAuthInterop (~> 11.0)
    - FirebaseCore (~> 11.0)
    - FirebaseCoreExtension (~> 11.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
    - GoogleUtilities/Environment (~> 8.0)
    - GTMSessionFetcher/Core (~> 3.4)
    - RecaptchaInterop (~> 100.0)
  - FirebaseAuthInterop (11.4.0)
  - FirebaseCore (11.2.0):
    - FirebaseCoreInternal (~> 11.0)
    - GoogleUtilities/Environment (~> 8.0)
    - GoogleUtilities/Logger (~> 8.0)
  - FirebaseCoreExtension (11.2.0):
    - FirebaseCore (~> 11.0)
  - FirebaseCoreInternal (11.4.2):
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
  - FirebaseCrashlytics (11.2.0):
    - FirebaseCore (~> 11.0)
    - FirebaseInstallations (~> 11.0)
    - FirebaseRemoteConfigInterop (~> 11.0)
    - FirebaseSessions (~> 11.0)
    - GoogleDataTransport (~> 10.0)
    - GoogleUtilities/Environment (~> 8.0)
    - nanopb (~> 3.30910.0)
    - PromisesObjC (~> 2.4)
  - FirebaseFirestore (11.2.0):
    - FirebaseFirestoreBinary (= 11.2.0)
  - FirebaseFirestoreAbseilBinary (1.2024011602.0)
  - FirebaseFirestoreBinary (11.2.0):
    - FirebaseCore (= 11.2.0)
    - FirebaseCoreExtension (= 11.2.0)
    - FirebaseFirestoreInternalBinary (= 11.2.0)
    - FirebaseSharedSwift (= 11.2.0)
  - FirebaseFirestoreGRPCBoringSSLBinary (1.65.1)
  - FirebaseFirestoreGRPCCoreBinary (1.65.1):
    - FirebaseFirestoreAbseilBinary (= 1.2024011602.0)
    - FirebaseFirestoreGRPCBoringSSLBinary (= 1.65.1)
  - FirebaseFirestoreGRPCCPPBinary (1.65.1):
    - FirebaseFirestoreAbseilBinary (= 1.2024011602.0)
    - FirebaseFirestoreGRPCCoreBinary (= 1.65.1)
  - FirebaseFirestoreInternalBinary (11.2.0):
    - FirebaseCore (= 11.2.0)
    - FirebaseFirestoreAbseilBinary (= 1.2024011602.0)
    - FirebaseFirestoreGRPCCPPBinary (= 1.65.1)
    - leveldb-library (~> 1.22)
    - nanopb (~> 3.30910.0)
  - FirebaseInstallations (11.2.0):
    - FirebaseCore (~> 11.0)
    - GoogleUtilities/Environment (~> 8.0)
    - GoogleUtilities/UserDefaults (~> 8.0)
    - PromisesObjC (~> 2.4)
  - FirebaseRemoteConfig (11.2.0):
    - FirebaseABTesting (~> 11.0)
    - FirebaseCore (~> 11.0)
    - FirebaseInstallations (~> 11.0)
    - FirebaseRemoteConfigInterop (~> 11.0)
    - FirebaseSharedSwift (~> 11.0)
    - GoogleUtilities/Environment (~> 8.0)
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
  - FirebaseRemoteConfigInterop (11.4.0)
  - FirebaseSessions (11.3.0):
    - FirebaseCore (~> 11.0)
    - FirebaseCoreExtension (~> 11.0)
    - FirebaseInstallations (~> 11.0)
    - GoogleDataTransport (~> 10.0)
    - GoogleUtilities/Environment (~> 8.0)
    - GoogleUtilities/UserDefaults (~> 8.0)
    - nanopb (~> 3.30910.0)
    - PromisesSwift (~> 2.1)
  - FirebaseSharedSwift (11.2.0)
  - Flutter (1.0.0)
  - flutter_archive (0.0.1):
    - Flutter
    - ZIPFoundation (= 0.9.19)
  - flutter_facebook_auth (7.1.1):
    - FBSDKLoginKit (~> 17.1.0)
    - Flutter
  - flutter_fgbg (0.0.1):
    - Flutter
  - flutter_keyboard_visibility (0.0.1):
    - Flutter
  - flutter_local_notifications (0.0.1):
    - Flutter
  - flutter_native_splash (0.0.1):
    - Flutter
  - flutter_secure_storage (6.0.0):
    - Flutter
  - flutter_timezone (0.0.1):
    - Flutter
  - geocoding_ios (1.0.5):
    - Flutter
  - geolocator_apple (1.2.0):
    - Flutter
  - Google-Maps-iOS-Utils (5.0.0):
    - GoogleMaps (~> 8.0)
  - Google-Mobile-Ads-SDK (11.10.0):
    - GoogleUserMessagingPlatform (>= 1.1)
  - google_maps_flutter_ios (0.0.1):
    - Flutter
    - Google-Maps-iOS-Utils (< 7.0, >= 5.0)
    - GoogleMaps (< 10.0, >= 8.4)
  - google_mobile_ads (5.2.0):
    - Flutter
    - Google-Mobile-Ads-SDK (~> 11.10.0)
    - webview_flutter_wkwebview
  - GoogleAppMeasurement (11.2.0):
    - GoogleAppMeasurement/AdIdSupport (= 11.2.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
    - GoogleUtilities/MethodSwizzler (~> 8.0)
    - GoogleUtilities/Network (~> 8.0)
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
    - nanopb (~> 3.30910.0)
  - GoogleAppMeasurement/AdIdSupport (11.2.0):
    - GoogleAppMeasurement/WithoutAdIdSupport (= 11.2.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
    - GoogleUtilities/MethodSwizzler (~> 8.0)
    - GoogleUtilities/Network (~> 8.0)
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
    - nanopb (~> 3.30910.0)
  - GoogleAppMeasurement/WithoutAdIdSupport (11.2.0):
    - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
    - GoogleUtilities/MethodSwizzler (~> 8.0)
    - GoogleUtilities/Network (~> 8.0)
    - "GoogleUtilities/NSData+zlib (~> 8.0)"
    - nanopb (~> 3.30910.0)
  - GoogleDataTransport (10.1.0):
    - nanopb (~> 3.30910.0)
    - PromisesObjC (~> 2.4)
  - GoogleMaps (8.4.0):
    - GoogleMaps/Maps (= 8.4.0)
  - GoogleMaps/Base (8.4.0)
  - GoogleMaps/Maps (8.4.0):
    - GoogleMaps/Base
  - GoogleUserMessagingPlatform (2.7.0)
  - GoogleUtilities/AppDelegateSwizzler (8.0.2):
    - GoogleUtilities/Environment
    - GoogleUtilities/Logger
    - GoogleUtilities/Network
    - GoogleUtilities/Privacy
  - GoogleUtilities/Environment (8.0.2):
    - GoogleUtilities/Privacy
  - GoogleUtilities/Logger (8.0.2):
    - GoogleUtilities/Environment
    - GoogleUtilities/Privacy
  - GoogleUtilities/MethodSwizzler (8.0.2):
    - GoogleUtilities/Logger
    - GoogleUtilities/Privacy
  - GoogleUtilities/Network (8.0.2):
    - GoogleUtilities/Logger
    - "GoogleUtilities/NSData+zlib"
    - GoogleUtilities/Privacy
    - GoogleUtilities/Reachability
  - "GoogleUtilities/NSData+zlib (8.0.2)":
    - GoogleUtilities/Privacy
  - GoogleUtilities/Privacy (8.0.2)
  - GoogleUtilities/Reachability (8.0.2):
    - GoogleUtilities/Logger
    - GoogleUtilities/Privacy
  - GoogleUtilities/UserDefaults (8.0.2):
    - GoogleUtilities/Logger
    - GoogleUtilities/Privacy
  - GTMSessionFetcher/Core (3.5.0)
  - in_app_review (0.2.0):
    - Flutter
  - just_audio (0.0.1):
    - Flutter
  - leveldb-library (1.22.6)
  - Mute (0.6.1)
  - nanopb (3.30910.0):
    - nanopb/decode (= 3.30910.0)
    - nanopb/encode (= 3.30910.0)
  - nanopb/decode (3.30910.0)
  - nanopb/encode (3.30910.0)
  - native_geofence (1.0.0):
    - Flutter
  - package_info_plus (0.4.5):
    - Flutter
  - path_provider_foundation (0.0.1):
    - Flutter
    - FlutterMacOS
  - permission_handler_apple (9.3.0):
    - Flutter
  - PromisesObjC (2.4.0)
  - PromisesSwift (2.4.0):
    - PromisesObjC (= 2.4.0)
  - real_volume (0.0.1):
    - Flutter
    - Mute (~> 0.6.0)
  - RecaptchaInterop (100.0.0)
  - shared_preferences_foundation (0.0.1):
    - Flutter
    - FlutterMacOS
  - url_launcher_ios (0.0.1):
    - Flutter
  - webview_flutter_wkwebview (0.0.1):
    - Flutter
    - FlutterMacOS
  - ZIPFoundation (0.9.19)

DEPENDENCIES:
  - alarm (from `.symlinks/plugins/alarm/ios`)
  - app_badge_plus (from `.symlinks/plugins/app_badge_plus/ios`)
  - audio_session (from `.symlinks/plugins/audio_session/ios`)
  - battery_plus (from `.symlinks/plugins/battery_plus/ios`)
  - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`)
  - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
  - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
  - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
  - firebase_app_installations (from `.symlinks/plugins/firebase_app_installations/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_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`)
  - FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `11.2.0`)
  - Flutter (from `Flutter`)
  - flutter_archive (from `.symlinks/plugins/flutter_archive/ios`)
  - flutter_facebook_auth (from `.symlinks/plugins/flutter_facebook_auth/ios`)
  - flutter_fgbg (from `.symlinks/plugins/flutter_fgbg/ios`)
  - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
  - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
  - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
  - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
  - flutter_timezone (from `.symlinks/plugins/flutter_timezone/ios`)
  - geocoding_ios (from `.symlinks/plugins/geocoding_ios/ios`)
  - geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`)
  - google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
  - google_mobile_ads (from `.symlinks/plugins/google_mobile_ads/ios`)
  - in_app_review (from `.symlinks/plugins/in_app_review/ios`)
  - just_audio (from `.symlinks/plugins/just_audio/ios`)
  - native_geofence (from `.symlinks/plugins/native_geofence/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`)
  - real_volume (from `.symlinks/plugins/real_volume/ios`)
  - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
  - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
  - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/darwin`)

SPEC REPOS:
  trunk:
    - FBAEMKit
    - FBSDKCoreKit
    - FBSDKCoreKit_Basics
    - FBSDKLoginKit
    - Firebase
    - FirebaseABTesting
    - FirebaseAnalytics
    - FirebaseAppCheckInterop
    - FirebaseAuth
    - FirebaseAuthInterop
    - FirebaseCore
    - FirebaseCoreExtension
    - FirebaseCoreInternal
    - FirebaseCrashlytics
    - FirebaseFirestoreAbseilBinary
    - FirebaseFirestoreBinary
    - FirebaseFirestoreGRPCBoringSSLBinary
    - FirebaseFirestoreGRPCCoreBinary
    - FirebaseFirestoreGRPCCPPBinary
    - FirebaseFirestoreInternalBinary
    - FirebaseInstallations
    - FirebaseRemoteConfig
    - FirebaseRemoteConfigInterop
    - FirebaseSessions
    - FirebaseSharedSwift
    - Google-Maps-iOS-Utils
    - Google-Mobile-Ads-SDK
    - GoogleAppMeasurement
    - GoogleDataTransport
    - GoogleMaps
    - GoogleUserMessagingPlatform
    - GoogleUtilities
    - GTMSessionFetcher
    - leveldb-library
    - Mute
    - nanopb
    - PromisesObjC
    - PromisesSwift
    - RecaptchaInterop
    - ZIPFoundation

EXTERNAL SOURCES:
  alarm:
    :path: ".symlinks/plugins/alarm/ios"
  app_badge_plus:
    :path: ".symlinks/plugins/app_badge_plus/ios"
  audio_session:
    :path: ".symlinks/plugins/audio_session/ios"
  battery_plus:
    :path: ".symlinks/plugins/battery_plus/ios"
  cloud_firestore:
    :path: ".symlinks/plugins/cloud_firestore/ios"
  connectivity_plus:
    :path: ".symlinks/plugins/connectivity_plus/darwin"
  device_info_plus:
    :path: ".symlinks/plugins/device_info_plus/ios"
  firebase_analytics:
    :path: ".symlinks/plugins/firebase_analytics/ios"
  firebase_app_installations:
    :path: ".symlinks/plugins/firebase_app_installations/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_remote_config:
    :path: ".symlinks/plugins/firebase_remote_config/ios"
  FirebaseFirestore:
    :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
    :tag: 11.2.0
  Flutter:
    :path: Flutter
  flutter_archive:
    :path: ".symlinks/plugins/flutter_archive/ios"
  flutter_facebook_auth:
    :path: ".symlinks/plugins/flutter_facebook_auth/ios"
  flutter_fgbg:
    :path: ".symlinks/plugins/flutter_fgbg/ios"
  flutter_keyboard_visibility:
    :path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
  flutter_local_notifications:
    :path: ".symlinks/plugins/flutter_local_notifications/ios"
  flutter_native_splash:
    :path: ".symlinks/plugins/flutter_native_splash/ios"
  flutter_secure_storage:
    :path: ".symlinks/plugins/flutter_secure_storage/ios"
  flutter_timezone:
    :path: ".symlinks/plugins/flutter_timezone/ios"
  geocoding_ios:
    :path: ".symlinks/plugins/geocoding_ios/ios"
  geolocator_apple:
    :path: ".symlinks/plugins/geolocator_apple/ios"
  google_maps_flutter_ios:
    :path: ".symlinks/plugins/google_maps_flutter_ios/ios"
  google_mobile_ads:
    :path: ".symlinks/plugins/google_mobile_ads/ios"
  in_app_review:
    :path: ".symlinks/plugins/in_app_review/ios"
  just_audio:
    :path: ".symlinks/plugins/just_audio/ios"
  native_geofence:
    :path: ".symlinks/plugins/native_geofence/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"
  real_volume:
    :path: ".symlinks/plugins/real_volume/ios"
  shared_preferences_foundation:
    :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
  url_launcher_ios:
    :path: ".symlinks/plugins/url_launcher_ios/ios"
  webview_flutter_wkwebview:
    :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"

CHECKOUT OPTIONS:
  FirebaseFirestore:
    :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
    :tag: 11.2.0

SPEC CHECKSUMS:
  alarm: 6c1f6a9688f94cd6bf8f104c67cc26e78c9d8d13
  app_badge_plus: 060babf17a97011f0093739f0aa8bc65b2479233
  audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
  battery_plus: 34f72fa2afeeea83bbae306c72a25828d3ec727a
  cloud_firestore: 5cb927f1a8c9d748d6fdbf16c6b267956cb82c53
  connectivity_plus: 4c41c08fc6d7c91f63bc7aec70ffe3730b04f563
  device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
  FBAEMKit: cb719c53575a3be86ea873279f30d6a2c4e15881
  FBSDKCoreKit: ecdb980a24633ccb012700299ceb16d0235e14d2
  FBSDKCoreKit_Basics: 045101c4a9ef10c845347424d73a29aae02c3e43
  FBSDKLoginKit: 69eb59b2f839aba635616df6e422acd0ca88030a
  Firebase: 98e6bf5278170668a7983e12971a66b2cd57fc8c
  firebase_analytics: fbc57838bdb94eef1e0ff504f127d974ff2981ad
  firebase_app_installations: 8e7456acbf53961bca56744283c3b93174eff89a
  firebase_auth: 0c77e299a8f2d1c74d1b1f6b78b3d4d802c19f47
  firebase_core: 2bedc3136ec7c7b8561c6123ed0239387b53f2af
  firebase_crashlytics: 37d104d457b51760b48504a93a12b3bf70995d77
  firebase_remote_config: d522653d828836503715498f1662901a6efcd809
  FirebaseABTesting: aef1719704fade00b200827e7973f352efc4caee
  FirebaseAnalytics: c36efd5710c60c17558650fa58c2066eca7e9265
  FirebaseAppCheckInterop: 1b9643ae2f1ee214488caa2f8e32b7bc2f0f3735
  FirebaseAuth: 2a198b8cdbbbd457f08d74df7040feb0a0e7777a
  FirebaseAuthInterop: 9ac948965ac13ec9d8a080f39490ddb2bda30520
  FirebaseCore: a282032ae9295c795714ded2ec9c522fc237f8da
  FirebaseCoreExtension: cda74ddfb001224bd8fd1d6e74698b4ed07803de
  FirebaseCoreInternal: 35731192cab10797b88411be84940d2beb33a238
  FirebaseCrashlytics: cfc69af5b53565dc6a5e563788809b5778ac4eac
  FirebaseFirestore: bce39d24776dad48f7fad4ac42a9e805971a71b2
  FirebaseFirestoreAbseilBinary: fa2ebd2ed02cadef5382e4f7c93f1b265c812c85
  FirebaseFirestoreBinary: 819db6b2586c6f974c7a1f9d8c870609edbf6e5a
  FirebaseFirestoreGRPCBoringSSLBinary: d86ebbe2adc8d15d7ebf305fff7d6358385327f8
  FirebaseFirestoreGRPCCoreBinary: 472bd808e1886a5efb2fd03dd09b98d34641a335
  FirebaseFirestoreGRPCCPPBinary: db76d83d2b7517623f8426ed7f7a17bad2478084
  FirebaseFirestoreInternalBinary: 4cf8180574159f20a2861a6e5c7e86745e4626d8
  FirebaseInstallations: 771177d89d6c451dc6e50085ec82e2fc77ed0a4a
  FirebaseRemoteConfig: fca0b2d017fc1de52b28a4e5bcf2007c1a840457
  FirebaseRemoteConfigInterop: e76f46ffa4d6a65e273d4dfebb6a79e588cec136
  FirebaseSessions: 655ff17f3cc1a635cbdc2d69b953878001f9e25b
  FirebaseSharedSwift: 7a0d78d155ede78407f0fdc89fbc914014c7c540
  Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
  flutter_archive: cb3e0219e555897ba4b36f166baa1eca394890b9
  flutter_facebook_auth: 48be46091bd1a5cc5a66055f1228a9d99a28bfaa
  flutter_fgbg: 31c0d1140a131daea2d342121808f6aa0dcd879d
  flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
  flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
  flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778
  flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
  flutter_timezone: ffb07bdad3c6276af8dada0f11978d8a1f8a20bb
  geocoding_ios: d7460f56e80e118d57678efe5c2cdc888739ff18
  geolocator_apple: 6cbaf322953988e009e5ecb481f07efece75c450
  Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321
  Google-Mobile-Ads-SDK: 13e6e98edfd78ad8d8a791edb927658cc260a56f
  google_maps_flutter_ios: e31555a04d1986ab130f2b9f24b6cdc861acc6d3
  google_mobile_ads: 2a538d8e42b1813809782792e48f8cf4374c2180
  GoogleAppMeasurement: 76d4f8b36b03bd8381fa9a7fe2cc7f99c0a2e93a
  GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
  GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d
  GoogleUserMessagingPlatform: a8b56893477f67212fbc8411c139e61d463349f5
  GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
  GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
  in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d
  just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
  leveldb-library: cc8b8f8e013647a295ad3f8cd2ddf49a6f19be19
  Mute: 20135a96076f140cc82bfc8b810e2d6150d8ec7e
  nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
  native_geofence: 79dbe31eef8e1b6fd798c035b239a355027f20ae
  package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
  path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
  permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
  PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
  PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
  real_volume: 6d09deeabb06963275fa8df0fb1616a5886363d6
  RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21
  shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
  url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
  webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4
  ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c

PODFILE CHECKSUM: 6602d1e103407baab075dd11fd048279fcb75593

COCOAPODS: 1.16.2
@google-oss-bot
Copy link

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

@rizafran
Copy link
Contributor

rizafran commented Nov 4, 2024

Thanks for reaching out, @orkun1675. The error you encountered looks related to config issue. Make sure that the bundle ID you provided in iTunes Connect matches the bundle ID in your Firebase project. You may also double check your Game Center implementation setup (see our docs for more info).

@orkun1675
Copy link
Author

orkun1675 commented Nov 5, 2024

Thanks for your reply @rizafran

Game Center auth requests were working without issue (for the past 1+ years) before the first build we uploaded after the app transfer. Furthermore, our Testflight testers who uninstall the new build and install the old build (that was built using the old Team ID) are able to login again. So I don't think it's a configuration issue.


I've tried uploading a build that utilizes iOS Keychain Access Groups. I.e. setting:

FirebaseAuth.instance.setSettings(userAccessGroup: '<NEW_TEAM_ID>.com.chunkytofustudios.SharedKeychain');

This hasn't worked.


Are there any tricks I can use to better debug this? For example, is it possible to set -FIRDebugEnabled in Testflight builds?

Currently the printed error message ([firebase_auth/invalid-credential] Invalid signature.) comes from the following try/catch block (throws FirebaseAuthException):

try {
  await firebaseCallWithRetry(
      FirebaseService.auth, _auth.signInWithGamesServices);
  _log.info('Sucessfully signed into Firebase using Games Services.');
  return true;
} on FirebaseAuthGamesServicesException catch (e) {
  _log.warning('Failed login due to Games Services error.', e);
} on FirebaseAuthException catch (e) {
  _log.warning(
      'Failed login due to Firebase Auth error. '
      'plugin=${e.plugin} code=${e.code} msg=${e.message} '
      'stack=${e.stackTrace} email=${e.email} cred=${e.credential} '
      'phone=${e.phoneNumber} tenantId=${e.tenantId} ',
      e);
} catch (e) {
  _log.warning('Failed login due to unknown error.', e);
}
return false;

@ncooke3
Copy link
Member

ncooke3 commented Nov 6, 2024

Hi @orkun1675, thanks for the repro instructions. Are you able to repro with those instructions? I was wondering if dropping a breakpoint in there could allow for better inspecting the underlying error?

Firebase 11.3+ address some issues in the earlier 11.x versions that involved using Auth.auth(). shareAuthStateAcrossDevices = true. It doesn't sound like it's being used here, but it could very well be related if the iCloud sharing bool is enabled.

@orkun1675
Copy link
Author

orkun1675 commented Nov 7, 2024

Thank you @ncooke3 for looking into this! Please see my questions below.


I'm unfortunately am no longer able to reproduce this on my physical iPhone. Downloading old build from App Store and installing the new version via XCode or Testflight does not re-trigger the issue.

One hunch we had by looking at logs was the possiblity of iOS version having an impact on the bug reoccurence. However, since iOS emulators cannot access the App Store and physical iPhones cannot downgrade iOS version it is not possible to test this on iOS 17 right now.

Furthermore, since we use Flutter we need to wait for firebase_auth to bump internal dependency to 11.3+ before we can test with it.

I'm going to add more logging to our Testflight builds and ask our beta testers who are still encountering this issue to re-test. I'll report back in a few days.


In the meantime, I wanted to double check something with the GameCenter cred signature validation:

if #available(iOS 13.5, macOS 10.15.5, macCatalyst 13.5, tvOS 13.4.8, *) {
localPlayer.fetchItems { publicKeyURL, signature, salt, timestamp, error in
if let error = error {
completion(nil, error)
} else {
let credential = GameCenterAuthCredential(withPlayerID: "",
teamPlayerID: localPlayer.teamPlayerID,
gamePlayerID: localPlayer.gamePlayerID,
publicKeyURL: publicKeyURL,
signature: signature,
salt: salt,
timestamp: timestamp,
displayName: localPlayer.displayName)
completion(credential, nil)
}
}

This block of code obtains both the teamPlayerID and gamePlayerID from the GKLocalPlayer.

Note that (1) the teamPlayerID changes after app transfer (source):

If you transfer your game to another developer, the teamPlayerID property isn’t the same for the new developer. For more information, see Overview of app transfer.

However, (2) gamePlayerID remains the same (source):

If you transfer your game to another developer, the gamePlayerID property is the same for the new developer. For more information, see Overview of app transfer.

Also note that (3) teamPlayerID is needed for signature validation (source):

Concatenate the following information into a data buffer in this order: the teamPlayerID (or gamePlayerID for Apple Arcade) property in UTF-8 format, the bundle ID in UTF-8 format, the timestamp parameter in big-endian UInt64 format, and the salt parameter. Use the public key to verify the signature of the concatenated data buffer using the RSASSA-PKCS1-v1_5 algorithm.

Questions

  1. Does Firebase Auth use the gamePlayerID to uniquely identify users? Or does it use teamPlayerID?
  2. Since the teamPlayerID is used during signature validation, is it possible that a stale ID is used after an app transfer? For instance, does Apple cache the GKLocalPlayer object and thus report a stale teamPlayerID right after app transfer? Or does Firebase backend cache/store the teamPlayerID?

@orkun1675
Copy link
Author

firebase_auth has upgraded firebase-ios-sdk version to 11.4. However, the issue still persists.

@ncooke3 could you PTAL at this as it's blocking us from releasing updates (including critical privacy fixes) to our app? Maybe the questions I've written above are relevant?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants