From d45c748f18292e738808e68393c1720e5db39e7c Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Tue, 26 May 2026 12:38:18 -0400 Subject: [PATCH 1/3] Add support for reCAPTCHA site key Updated GoogleServicesTask to extract the recaptcha_enterprise_site_key from the google-services.json file and include it in the generated `resources.xml` file. --- .../gms/googleservices/GoogleServicesTask.kt | 15 ++++++++++++--- .../values/values.xml | 1 + .../values/values.xml | 1 + .../values/values.xml | 1 + .../values/values.xml | 1 + .../testData/project1/app/google-services.json | 3 ++- 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt b/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt index 82dc26cc..e53081e1 100644 --- a/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt +++ b/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt @@ -65,8 +65,8 @@ abstract class GoogleServicesTask : DefaultTask() { if (jsonFiles.isEmpty()) { val message = """ - File $JSON_FILE_NAME is missing. - The Google Services Plugin cannot function without it. + File $JSON_FILE_NAME is missing. + The Google Services Plugin cannot function without it. Searched locations: ${ googleServicesJsonFiles.get().joinToString { it.absolutePath } } @@ -109,6 +109,7 @@ abstract class GoogleServicesTask : DefaultTask() { handleGoogleApiKey(resValues) handleGoogleAppId(resValues) handleWebClientId(resValues) + handleSiteKey(resValues) } ?: throw GradleException( "No matching client found for package name '${applicationId.get()}' in ${quickstartFile.path}") @@ -208,7 +209,7 @@ abstract class GoogleServicesTask : DefaultTask() { """ - + """ .trimIndent()) for ((name, value) in values) { @@ -259,6 +260,14 @@ abstract class GoogleServicesTask : DefaultTask() { } } + fun FirebaseClientData.handleSiteKey(resValues: MutableMap) { + if (!this.has("recaptcha_enterprise_site_key")) { + return + } + val siteKey = this.getAsJsonPrimitive("recaptcha_enterprise_site_key") + resValues["recaptcha_enterprise_site_key"] = siteKey.asString + } + /** * Handle a client object for analytics (@xml/global_tracker) * diff --git a/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml index 750588dc..1eb48577 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml @@ -7,4 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml index 750588dc..1eb48577 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml @@ -7,4 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml index 750588dc..1eb48577 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml @@ -7,4 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml index 750588dc..1eb48577 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml @@ -7,4 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1/app/google-services.json b/google-services-plugin/src/test/testData/project1/app/google-services.json index c7d5f20e..81423ca2 100644 --- a/google-services-plugin/src/test/testData/project1/app/google-services.json +++ b/google-services-plugin/src/test/testData/project1/app/google-services.json @@ -956,7 +956,8 @@ "test_banner_ad_unit_id": "ca-app-pub-3940256099942544/6300978111", "test_interstitial_ad_unit_id": "ca-app-pub-3940256099942544/1033173712" } - } + }, + "recaptcha_enterprise_site_key": "6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00" } ], "client_info": [], From 2022e07ffc8755d8d5b0801b1ba61245fb1024c5 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Wed, 27 May 2026 11:34:28 -0400 Subject: [PATCH 2/3] Simplify handleSiteKey logic Refactored handleSiteKey to use safe call chaining, removing the explicit check for the recaptcha_enterprise_site_key field. --- .../google/gms/googleservices/GoogleServicesTask.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt b/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt index e53081e1..6691ff8f 100644 --- a/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt +++ b/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt @@ -260,13 +260,11 @@ abstract class GoogleServicesTask : DefaultTask() { } } - fun FirebaseClientData.handleSiteKey(resValues: MutableMap) { - if (!this.has("recaptcha_enterprise_site_key")) { - return + fun FirebaseClientData.handleSiteKey(resValues: MutableMap) { + this.getAsJsonPrimitive("recaptcha_enterprise_site_key")?.let { + resValues["recaptcha_enterprise_site_key"] = it.asString + } } - val siteKey = this.getAsJsonPrimitive("recaptcha_enterprise_site_key") - resValues["recaptcha_enterprise_site_key"] = siteKey.asString - } /** * Handle a client object for analytics (@xml/global_tracker) From 37aaec92e5806ba71337e6da18b7efc8f5696807 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Wed, 27 May 2026 11:41:48 -0400 Subject: [PATCH 3/3] Rename recaptcha_enterprise_site_key to recaptcha_site_key Updated the plugin to look for the recaptcha_site_key field in the google-services.json file instead of recaptcha_enterprise_site_key. This change is reflected in both the processing task and the associated test data. --- .../com/google/gms/googleservices/GoogleServicesTask.kt | 4 ++-- .../processFreeOneDebugGoogleServices/values/values.xml | 2 +- .../processFreeTwoDebugGoogleServices/values/values.xml | 2 +- .../processPaidOneDebugGoogleServices/values/values.xml | 2 +- .../processPaidTwoDebugGoogleServices/values/values.xml | 2 +- .../src/test/testData/project1/app/google-services.json | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt b/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt index 6691ff8f..606f7898 100644 --- a/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt +++ b/google-services-plugin/src/main/kotlin/com/google/gms/googleservices/GoogleServicesTask.kt @@ -261,8 +261,8 @@ abstract class GoogleServicesTask : DefaultTask() { } fun FirebaseClientData.handleSiteKey(resValues: MutableMap) { - this.getAsJsonPrimitive("recaptcha_enterprise_site_key")?.let { - resValues["recaptcha_enterprise_site_key"] = it.asString + this.getAsJsonPrimitive("recaptcha_site_key")?.let { + resValues["recaptcha_site_key"] = it.asString } } diff --git a/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml index 1eb48577..b5dae02d 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processFreeOneDebugGoogleServices/values/values.xml @@ -7,5 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 - 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml index 1eb48577..b5dae02d 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processFreeTwoDebugGoogleServices/values/values.xml @@ -7,5 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 - 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml index 1eb48577..b5dae02d 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processPaidOneDebugGoogleServices/values/values.xml @@ -7,5 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 - 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml b/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml index 1eb48577..b5dae02d 100644 --- a/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml +++ b/google-services-plugin/src/test/testData/project1-expected/processPaidTwoDebugGoogleServices/values/values.xml @@ -7,5 +7,5 @@ 1:123456789000:android:f1bf012572b04063 AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo mockproject-1234 - 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 + 6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00 diff --git a/google-services-plugin/src/test/testData/project1/app/google-services.json b/google-services-plugin/src/test/testData/project1/app/google-services.json index 81423ca2..9bf24cb9 100644 --- a/google-services-plugin/src/test/testData/project1/app/google-services.json +++ b/google-services-plugin/src/test/testData/project1/app/google-services.json @@ -957,9 +957,9 @@ "test_interstitial_ad_unit_id": "ca-app-pub-3940256099942544/1033173712" } }, - "recaptcha_enterprise_site_key": "6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00" + "recaptcha_site_key": "6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00" } ], "client_info": [], "ARTIFACT_VERSION": "1" -} \ No newline at end of file +}