From b57d1d33ed2c301b2c194daa273f5c068e700a79 Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Wed, 24 Sep 2025 15:25:15 +0000 Subject: [PATCH 1/6] fix(app_check): Deprecate androidProvider and appleProvider parameters in activate method --- .../firebase_app_check/lib/src/firebase_app_check.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart index 1ca3b228d4c8..d605174a3366 100644 --- a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart +++ b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart @@ -76,7 +76,15 @@ class FirebaseAppCheck extends FirebasePluginPlatform { ) WebProvider? webProvider, WebProvider? providerWeb, + @Deprecated( + 'Use providerAndroid instead. ' + 'This parameter will be removed in a future major release.', + ) AndroidProvider androidProvider = AndroidProvider.playIntegrity, + @Deprecated( + 'Use providerApple instead. ' + 'This parameter will be removed in a future major release.', + ) AppleProvider appleProvider = AppleProvider.deviceCheck, AndroidAppCheckProvider providerAndroid = const AndroidPlayIntegrityProvider(), From bb680c3ba17903e899d247afaf4c4b6c9c6f9e64 Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Wed, 24 Sep 2025 16:26:56 +0000 Subject: [PATCH 2/6] fix(app_check): Update parameters to be nullable and improve provider string conversion logic --- .../lib/src/firebase_app_check.dart | 4 ++-- .../method_channel/utils/provider_to_string.dart | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart index d605174a3366..e5b0365831db 100644 --- a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart +++ b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart @@ -80,12 +80,12 @@ class FirebaseAppCheck extends FirebasePluginPlatform { 'Use providerAndroid instead. ' 'This parameter will be removed in a future major release.', ) - AndroidProvider androidProvider = AndroidProvider.playIntegrity, + AndroidProvider? androidProvider, @Deprecated( 'Use providerApple instead. ' 'This parameter will be removed in a future major release.', ) - AppleProvider appleProvider = AppleProvider.deviceCheck, + AppleProvider? appleProvider, AndroidAppCheckProvider providerAndroid = const AndroidPlayIntegrityProvider(), AppleAppCheckProvider providerApple = const AppleDeviceCheckProvider(), diff --git a/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart b/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart index 5b309a34abb8..6e54bf628b13 100644 --- a/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart +++ b/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart @@ -12,12 +12,11 @@ String getAndroidProviderString({ AndroidProvider? legacyProvider, AndroidAppCheckProvider? newProvider, }) { - // Prefer new provider over legacy provider - if (newProvider != null) { - return newProvider.type; + if (legacyProvider != null) { + return getLegacyAndroidProviderString(legacyProvider); } - return getLegacyAndroidProviderString(legacyProvider); + return newProvider?.type ?? 'playIntegrity'; } /// Converts [AppleAppCheckProvider] to [String] with backwards compatibility @@ -25,12 +24,11 @@ String getAppleProviderString({ AppleProvider? legacyProvider, AppleAppCheckProvider? newProvider, }) { - // Prefer new provider over legacy provider - if (newProvider != null) { - return newProvider.type; + if (legacyProvider != null) { + return getLegacyAppleProviderString(legacyProvider); } - return getLegacyAppleProviderString(legacyProvider); + return newProvider?.type ?? 'deviceCheck'; } /// Converts [AndroidProvider] enum to [String] From 3d4eea650ab9366e77d493d1966e548825a6ee65 Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Thu, 25 Sep 2025 09:36:16 +0000 Subject: [PATCH 3/6] fix(app_check): Update provider parameters to use default values and improve legacy provider handling --- .../firebase_app_check/example/lib/main.dart | 6 ++---- .../lib/src/firebase_app_check.dart | 4 ++-- .../method_channel/utils/provider_to_string.dart | 16 ++++++++++------ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check/example/lib/main.dart b/packages/firebase_app_check/firebase_app_check/example/lib/main.dart index a1646dbbd965..1fbb5c9b7745 100644 --- a/packages/firebase_app_check/firebase_app_check/example/lib/main.dart +++ b/packages/firebase_app_check/firebase_app_check/example/lib/main.dart @@ -23,11 +23,9 @@ Future main() async { await FirebaseAppCheck.instance // Your personal reCaptcha public key goes here: .activate( - androidProvider: AndroidProvider.debug, - appleProvider: AppleProvider.debug, providerWeb: ReCaptchaV3Provider(kWebRecaptchaSiteKey), - providerAndroid: const AndroidDebugProvider(debugToken: 'androidDebug'), - providerApple: const AppleDebugProvider(debugToken: 'appleDebug'), + providerAndroid: const AndroidDebugProvider(), + providerApple: const AppleDebugProvider(), ); runApp(MyApp()); diff --git a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart index e5b0365831db..d605174a3366 100644 --- a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart +++ b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart @@ -80,12 +80,12 @@ class FirebaseAppCheck extends FirebasePluginPlatform { 'Use providerAndroid instead. ' 'This parameter will be removed in a future major release.', ) - AndroidProvider? androidProvider, + AndroidProvider androidProvider = AndroidProvider.playIntegrity, @Deprecated( 'Use providerApple instead. ' 'This parameter will be removed in a future major release.', ) - AppleProvider? appleProvider, + AppleProvider appleProvider = AppleProvider.deviceCheck, AndroidAppCheckProvider providerAndroid = const AndroidPlayIntegrityProvider(), AppleAppCheckProvider providerApple = const AppleDeviceCheckProvider(), diff --git a/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart b/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart index 6e54bf628b13..c6137af33fc2 100644 --- a/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart +++ b/packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart @@ -12,10 +12,12 @@ String getAndroidProviderString({ AndroidProvider? legacyProvider, AndroidAppCheckProvider? newProvider, }) { - if (legacyProvider != null) { - return getLegacyAndroidProviderString(legacyProvider); + if (newProvider != null && legacyProvider != null) { + if (legacyProvider != AndroidProvider.playIntegrity) { + // Legacy provider is explicitly set to something other than default + return getLegacyAndroidProviderString(legacyProvider); + } } - return newProvider?.type ?? 'playIntegrity'; } @@ -24,10 +26,12 @@ String getAppleProviderString({ AppleProvider? legacyProvider, AppleAppCheckProvider? newProvider, }) { - if (legacyProvider != null) { - return getLegacyAppleProviderString(legacyProvider); + if (newProvider != null && legacyProvider != null) { + if (legacyProvider != AppleProvider.deviceCheck) { + // Legacy provider is explicitly set to something other than default + return getLegacyAppleProviderString(legacyProvider); + } } - return newProvider?.type ?? 'deviceCheck'; } From 3cf3635fa756455ba84442858f20a8810e171e70 Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Thu, 25 Sep 2025 12:14:57 +0000 Subject: [PATCH 4/6] test(app_check): Add unit tests for provider string conversion logic --- .../utils/provider_to_string_test.dart | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 packages/firebase_app_check/firebase_app_check_platform_interface/test/method_channel_tests/utils/provider_to_string_test.dart diff --git a/packages/firebase_app_check/firebase_app_check_platform_interface/test/method_channel_tests/utils/provider_to_string_test.dart b/packages/firebase_app_check/firebase_app_check_platform_interface/test/method_channel_tests/utils/provider_to_string_test.dart new file mode 100644 index 000000000000..63f7eded20cd --- /dev/null +++ b/packages/firebase_app_check/firebase_app_check_platform_interface/test/method_channel_tests/utils/provider_to_string_test.dart @@ -0,0 +1,124 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_app_check_platform_interface/src/android_provider.dart'; +import 'package:firebase_app_check_platform_interface/src/android_providers.dart'; +import 'package:firebase_app_check_platform_interface/src/apple_provider.dart'; +import 'package:firebase_app_check_platform_interface/src/apple_providers.dart'; +import 'package:firebase_app_check_platform_interface/src/method_channel/utils/provider_to_string.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('getAndroidProviderString', () { + test( + 'returns new provider type when both providers are provided and legacy is default', + () { + final result = getAndroidProviderString( + legacyProvider: AndroidProvider.playIntegrity, + newProvider: const AndroidPlayIntegrityProvider(), + ); + expect(result, 'playIntegrity'); + }); + + test( + 'returns legacy provider when explicitly set to debug and new provider is default', + () { + final result = getAndroidProviderString( + legacyProvider: AndroidProvider.debug, + newProvider: const AndroidPlayIntegrityProvider(), + ); + expect(result, 'debug'); + }); + + test( + 'returns new provider type when only new provider is provided and legacy is default', + () { + final result = getAndroidProviderString( + legacyProvider: AndroidProvider.playIntegrity, + newProvider: const AndroidDebugProvider(), + ); + expect(result, 'debug'); + }); + + test('returns default when neither provider is provided', () { + final result = getAndroidProviderString(); + expect(result, 'playIntegrity'); + }); + }); + + group('getAppleProviderString', () { + test('returns default provider when both providers are default', () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.deviceCheck, + newProvider: const AppleDeviceCheckProvider(), + ); + expect(result, 'deviceCheck'); + }); + + test( + 'returns legacy provider when explicitly set to debug and new provider is default', + () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.debug, + newProvider: const AppleDeviceCheckProvider(), + ); + expect(result, 'debug'); + }); + + test( + 'returns legacy provider when explicitly set to appAttest and new provider is default', + () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.appAttest, + newProvider: const AppleDeviceCheckProvider(), + ); + expect(result, 'appAttest'); + }); + + test( + 'returns legacy provider when explicitly set to appAttestWithDeviceCheckFallback and new provider is default', + () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.appAttestWithDeviceCheckFallback, + newProvider: const AppleDeviceCheckProvider(), + ); + expect(result, 'appAttestWithDeviceCheckFallback'); + }); + + test( + 'returns new provider type when new provider is provided and legacy is default', + () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.deviceCheck, + newProvider: const AppleDebugProvider(), + ); + expect(result, 'debug'); + }); + + test( + 'returns legacy provider when new provider is provided and legacy is default', + () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.deviceCheck, + newProvider: const AppleAppAttestProvider(), + ); + expect(result, 'appAttest'); + }); + + test('returns default when neither provider is provided', () { + final result = getAppleProviderString(); + expect(result, 'deviceCheck'); + }); + + test( + 'returns new provider when explicitly set to appAttestWithDeviceCheckFallback', + () { + final result = getAppleProviderString( + legacyProvider: AppleProvider.deviceCheck, + newProvider: const AppleAppAttestWithDeviceCheckFallbackProvider(), + ); + expect(result, 'appAttestWithDeviceCheckFallback'); + }); + }); +} From 882aaccffca4535d28feb043a38c5db72d1c7c15 Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Thu, 25 Sep 2025 12:26:27 +0000 Subject: [PATCH 5/6] fix(app_check): Simplify activation method by removing debug token parameters for Android and iOS providers --- .../firebase_app_check_e2e_test.dart | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart b/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart index 7a0883d1dcb9..61950b98d28a 100644 --- a/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart +++ b/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart @@ -83,10 +83,7 @@ void main() { () async { await expectLater( FirebaseAppCheck.instance.activate( - androidProvider: AndroidProvider.debug, - providerAndroid: const AndroidDebugProvider( - debugToken: 'debug_token', - ), + providerAndroid: const AndroidDebugProvider(), ), completes, ); @@ -99,10 +96,7 @@ void main() { () async { await expectLater( FirebaseAppCheck.instance.activate( - appleProvider: AppleProvider.debug, - providerApple: const AppleDebugProvider( - debugToken: 'debug_token', - ), + providerApple: const AppleDebugProvider(), ), completes, ); From 63f1a3c311b87600481db6d66c09bf6d0bef128c Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Thu, 25 Sep 2025 12:53:28 +0000 Subject: [PATCH 6/6] fix(app_check): Update provider parameters to use new provider classes for Android and iOS --- .../firebase_data_connect/example/lib/main.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firebase_data_connect/firebase_data_connect/example/lib/main.dart b/packages/firebase_data_connect/firebase_data_connect/example/lib/main.dart index fa6d111f31c4..da63eec3afbd 100644 --- a/packages/firebase_data_connect/firebase_data_connect/example/lib/main.dart +++ b/packages/firebase_data_connect/firebase_data_connect/example/lib/main.dart @@ -41,14 +41,14 @@ void main() async { // 1. Debug provider // 2. Safety Net provider // 3. Play Integrity provider - androidProvider: AndroidProvider.debug, + providerAndroid: const AndroidDebugProvider(), // Default provider for iOS/macOS is the Device Check provider. You can use the "AppleProvider" enum to choose // your preferred provider. Choose from: // 1. Debug provider // 2. Device Check provider // 3. App Attest provider // 4. App Attest provider with fallback to Device Check provider (App Attest provider is only available on iOS 14.0+, macOS 14.0+) - appleProvider: AppleProvider.appAttest, + providerApple: const AppleAppAttestProvider(), ); } if (configureEmulator) {