Skip to content

iOS Phone Auth fails with ERROR_RECAPTCHA_SDK_NOT_LINKED after toggling reCAPTCHA Enterprise #15345

@irangareddy

Description

@irangareddy

Description

This issue has occurred recently, and no prior bug reports or context are available. Please review it promptly and suggest any necessary changes.

On iOS, Phone Authentication with Firebase fails after accidentally enabling and then disabling reCAPTCHA Enterprise in the Firebase Console.

The error indicates that the reCAPTCHA SDK is not linked, even though Enterprise was disabled and no explicit integration was added.

Client

  • Platform: iOS (SwiftUI app)
  • firebase-ios-sdk: 12.2.0
  • Xcode: Version 26.0 (17A321)
  • Device: iPhone 17 Pro (iOS 26)

Notes


Request:
Please clarify whether this is a Firebase Console bug (Enterprise toggle not fully reverting) or whether firebase_auth iOS.

Reproducing the issue

Steps to Reproduce

  1. Enable Phone Authentication with FirebaseAuth.instance.verifyPhoneNumber() (or SwiftUI equivalent).
    /// Send phone verification code using Firebase Phone Auth
    @MainActor public func sendPhoneVerification(phoneNumber: String) async throws -> String {
            return try await withCheckedThrowingContinuation { continuation in
              PhoneAuthProvider.provider()
                .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
                  if let error = error {
                    continuation.resume(throwing: error)
                    return
                  }
                  continuation.resume(returning: verificationID!)
                }
            }
          }
  1. In Firebase Console → Authentication → Settings → reCAPTCHA, click Manage reCAPTCHA (this auto-enables Enterprise).
  2. Disable reCAPTCHA Enterprise from Google Cloud.
  3. Run the app on iOS and attempt phone verification.

Expected Behavior

Phone authentication should work without requiring explicit recaptcha-enterprise-mobile-sdk integration if Enterprise is disabled.

https://github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk

Actual Behavior

Phone authentication fails with the following errors:

❌ Phone authentication failed
Error: The reCAPTCHA SDK is not linked to your app.
NSError domain: FIRAuthErrorDomain
NSError code: 17208
NSError userInfo: {
  FIRAuthErrorUserInfoNameKey = ERROR_RECAPTCHA_SDK_NOT_LINKED,
  NSLocalizedDescription = The reCAPTCHA SDK is not linked to your app. 
  See https://cloud.google.com/recaptcha-enterprise/docs/instrument-ios-apps
}
🔥 Unknown auth error code: FirebaseAuth.AuthErrorCode(rawValue: 17208)

Phone verification error: Error Domain=FIRAuthErrorDomain Code=17208 "The reCAPTCHA SDK is not linked to your app. See https://cloud.google.com/recaptcha-enterprise/docs/instrument-ios-apps" UserInfo={FIRAuthErrorUserInfoNameKey=ERROR_RECAPTCHA_SDK_NOT_LINKED, NSLocalizedDescription=The reCAPTCHA SDK is not linked to your app. See https://cloud.google.com/recaptcha-enterprise/docs/instrument-ios-apps}
- "the recaptcha sdk is not linked to your app. see https://cloud.google.com/recaptcha-enterprise/docs/instrument-ios-apps"

Firebase SDK Version

12.2.0

Xcode Version

Version 26.0 (17A321)

Installation Method

Swift Package Manager

Firebase Product(s)

Authentication

Targeted Platforms

iOS

Relevant Log Output

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

Expand Package.resolved snippet
{
  "originHash" : "2e66394a25275d42b62167b94675c50c6e72205573af40d32e89ea121b4ff65a",
  "pins" : [
    {
      "identity" : "abseil-cpp-binary",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/abseil-cpp-binary.git",
      "state" : {
        "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5",
        "version" : "1.2024072200.0"
      }
    },
    {
      "identity" : "apollo-ios",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apollographql/apollo-ios",
      "state" : {
        "revision" : "ca441856851e9ab7765387341dba76c0384f5991",
        "version" : "2.0.0-alpha-1"
      }
    },
    {
      "identity" : "app-check",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/app-check.git",
      "state" : {
        "revision" : "61b85103a1aeed8218f17c794687781505fbbef5",
        "version" : "11.2.0"
      }
    },
    {
      "identity" : "appauth-ios",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/openid/AppAuth-iOS.git",
      "state" : {
        "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e",
        "version" : "2.0.0"
      }
    },
    {
      "identity" : "approuter",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/Dimillian/AppRouter",
      "state" : {
        "revision" : "72f63f4312a231ab2706234b9e99c4b71651f38c",
        "version" : "1.0.2"
      }
    },
    {
      "identity" : "firebase-ios-sdk",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/firebase/firebase-ios-sdk.git",
      "state" : {
        "revision" : "e2a3c3fbcaa1df3fd549b5b3f1175bc8a11912fd",
        "version" : "12.2.0"
      }
    },
    {
      "identity" : "google-ads-on-device-conversion-ios-sdk",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/googleads/google-ads-on-device-conversion-ios-sdk",
      "state" : {
        "revision" : "a2d0f1f1666de591eb1a811f40b1706f5c63a2ed",
        "version" : "2.3.0"
      }
    },
    {
      "identity" : "googleappmeasurement",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleAppMeasurement.git",
      "state" : {
        "revision" : "1c7edd5cc6e4ad22d2b81166bb9b208b9e63058a",
        "version" : "12.2.0"
      }
    },
    {
      "identity" : "googledatatransport",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleDataTransport.git",
      "state" : {
        "revision" : "617af071af9aa1d6a091d59a202910ac482128f9",
        "version" : "10.1.0"
      }
    },
    {
      "identity" : "googlesignin-ios",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleSignIn-iOS.git",
      "state" : {
        "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043",
        "version" : "9.0.0"
      }
    },
    {
      "identity" : "googleutilities",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleUtilities.git",
      "state" : {
        "revision" : "60da361632d0de02786f709bdc0c4df340f7613e",
        "version" : "8.1.0"
      }
    },
    {
      "identity" : "grpc-binary",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/grpc-binary.git",
      "state" : {
        "revision" : "cc0001a0cf963aa40501d9c2b181e7fc9fd8ec71",
        "version" : "1.69.0"
      }
    },
    {
      "identity" : "gtm-session-fetcher",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/gtm-session-fetcher.git",
      "state" : {
        "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b",
        "version" : "3.5.0"
      }
    },
    {
      "identity" : "gtmappauth",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GTMAppAuth.git",
      "state" : {
        "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16",
        "version" : "5.0.0"
      }
    },
    {
      "identity" : "interop-ios-for-google-sdks",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/interop-ios-for-google-sdks.git",
      "state" : {
        "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe",
        "version" : "101.0.0"
      }
    },
    {
      "identity" : "leveldb",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/firebase/leveldb.git",
      "state" : {
        "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1",
        "version" : "1.22.5"
      }
    },
    {
      "identity" : "mixpanel-swift",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/mixpanel/mixpanel-swift",
      "state" : {
        "revision" : "c550cbef7654e59d06bf9c224ea25f681dea8975",
        "version" : "4.4.0"
      }
    },
    {
      "identity" : "nanopb",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/firebase/nanopb.git",
      "state" : {
        "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1",
        "version" : "2.30910.0"
      }
    },
    {
      "identity" : "phonenumberkit",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/marmelroy/PhoneNumberKit.git",
      "state" : {
        "revision" : "8cba2258060e356d5fc4836d4ff8549faa2409dd",
        "version" : "4.1.4"
      }
    },
    {
      "identity" : "promises",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/promises.git",
      "state" : {
        "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac",
        "version" : "2.4.0"
      }
    },
    {
      "identity" : "stripe-ios-spm",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/stripe/stripe-ios-spm.git",
      "state" : {
        "revision" : "a5cea99a9b4feac4348d48a120970a32d5054cf1",
        "version" : "24.23.1"
      }
    },
    {
      "identity" : "swift-atomics",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apple/swift-atomics",
      "state" : {
        "revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7",
        "version" : "1.3.0"
      }
    },
    {
      "identity" : "swift-protobuf",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apple/swift-protobuf.git",
      "state" : {
        "revision" : "102a647b573f60f73afdce5613a51d71349fe507",
        "version" : "1.30.0"
      }
    }
  ],
  "version" : 3
}

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet
Replace this line with the contents of your Podfile.lock!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions