Skip to content

Commit 4e7f800

Browse files
authored
fix(app_check): Deprecate androidProvider and appleProvider parameters in activate method (#17742)
* fix(app_check): Deprecate androidProvider and appleProvider parameters in activate method * fix(app_check): Update parameters to be nullable and improve provider string conversion logic * fix(app_check): Update provider parameters to use default values and improve legacy provider handling * test(app_check): Add unit tests for provider string conversion logic * fix(app_check): Simplify activation method by removing debug token parameters for Android and iOS providers * fix(app_check): Update provider parameters to use new provider classes for Android and iOS
1 parent 007b2b3 commit 4e7f800

File tree

6 files changed

+150
-24
lines changed

6 files changed

+150
-24
lines changed

packages/firebase_app_check/firebase_app_check/example/lib/main.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@ Future<void> main() async {
2323
await FirebaseAppCheck.instance
2424
// Your personal reCaptcha public key goes here:
2525
.activate(
26-
androidProvider: AndroidProvider.debug,
27-
appleProvider: AppleProvider.debug,
2826
providerWeb: ReCaptchaV3Provider(kWebRecaptchaSiteKey),
29-
providerAndroid: const AndroidDebugProvider(debugToken: 'androidDebug'),
30-
providerApple: const AppleDebugProvider(debugToken: 'appleDebug'),
27+
providerAndroid: const AndroidDebugProvider(),
28+
providerApple: const AppleDebugProvider(),
3129
);
3230

3331
runApp(MyApp());

packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,15 @@ class FirebaseAppCheck extends FirebasePluginPlatform {
7676
)
7777
WebProvider? webProvider,
7878
WebProvider? providerWeb,
79+
@Deprecated(
80+
'Use providerAndroid instead. '
81+
'This parameter will be removed in a future major release.',
82+
)
7983
AndroidProvider androidProvider = AndroidProvider.playIntegrity,
84+
@Deprecated(
85+
'Use providerApple instead. '
86+
'This parameter will be removed in a future major release.',
87+
)
8088
AppleProvider appleProvider = AppleProvider.deviceCheck,
8189
AndroidAppCheckProvider providerAndroid =
8290
const AndroidPlayIntegrityProvider(),

packages/firebase_app_check/firebase_app_check_platform_interface/lib/src/method_channel/utils/provider_to_string.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,27 @@ String getAndroidProviderString({
1212
AndroidProvider? legacyProvider,
1313
AndroidAppCheckProvider? newProvider,
1414
}) {
15-
// Prefer new provider over legacy provider
16-
if (newProvider != null) {
17-
return newProvider.type;
15+
if (newProvider != null && legacyProvider != null) {
16+
if (legacyProvider != AndroidProvider.playIntegrity) {
17+
// Legacy provider is explicitly set to something other than default
18+
return getLegacyAndroidProviderString(legacyProvider);
19+
}
1820
}
19-
20-
return getLegacyAndroidProviderString(legacyProvider);
21+
return newProvider?.type ?? 'playIntegrity';
2122
}
2223

2324
/// Converts [AppleAppCheckProvider] to [String] with backwards compatibility
2425
String getAppleProviderString({
2526
AppleProvider? legacyProvider,
2627
AppleAppCheckProvider? newProvider,
2728
}) {
28-
// Prefer new provider over legacy provider
29-
if (newProvider != null) {
30-
return newProvider.type;
29+
if (newProvider != null && legacyProvider != null) {
30+
if (legacyProvider != AppleProvider.deviceCheck) {
31+
// Legacy provider is explicitly set to something other than default
32+
return getLegacyAppleProviderString(legacyProvider);
33+
}
3134
}
32-
33-
return getLegacyAppleProviderString(legacyProvider);
35+
return newProvider?.type ?? 'deviceCheck';
3436
}
3537

3638
/// Converts [AndroidProvider] enum to [String]
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Copyright 2021 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:firebase_app_check_platform_interface/src/android_provider.dart';
6+
import 'package:firebase_app_check_platform_interface/src/android_providers.dart';
7+
import 'package:firebase_app_check_platform_interface/src/apple_provider.dart';
8+
import 'package:firebase_app_check_platform_interface/src/apple_providers.dart';
9+
import 'package:firebase_app_check_platform_interface/src/method_channel/utils/provider_to_string.dart';
10+
import 'package:flutter_test/flutter_test.dart';
11+
12+
void main() {
13+
group('getAndroidProviderString', () {
14+
test(
15+
'returns new provider type when both providers are provided and legacy is default',
16+
() {
17+
final result = getAndroidProviderString(
18+
legacyProvider: AndroidProvider.playIntegrity,
19+
newProvider: const AndroidPlayIntegrityProvider(),
20+
);
21+
expect(result, 'playIntegrity');
22+
});
23+
24+
test(
25+
'returns legacy provider when explicitly set to debug and new provider is default',
26+
() {
27+
final result = getAndroidProviderString(
28+
legacyProvider: AndroidProvider.debug,
29+
newProvider: const AndroidPlayIntegrityProvider(),
30+
);
31+
expect(result, 'debug');
32+
});
33+
34+
test(
35+
'returns new provider type when only new provider is provided and legacy is default',
36+
() {
37+
final result = getAndroidProviderString(
38+
legacyProvider: AndroidProvider.playIntegrity,
39+
newProvider: const AndroidDebugProvider(),
40+
);
41+
expect(result, 'debug');
42+
});
43+
44+
test('returns default when neither provider is provided', () {
45+
final result = getAndroidProviderString();
46+
expect(result, 'playIntegrity');
47+
});
48+
});
49+
50+
group('getAppleProviderString', () {
51+
test('returns default provider when both providers are default', () {
52+
final result = getAppleProviderString(
53+
legacyProvider: AppleProvider.deviceCheck,
54+
newProvider: const AppleDeviceCheckProvider(),
55+
);
56+
expect(result, 'deviceCheck');
57+
});
58+
59+
test(
60+
'returns legacy provider when explicitly set to debug and new provider is default',
61+
() {
62+
final result = getAppleProviderString(
63+
legacyProvider: AppleProvider.debug,
64+
newProvider: const AppleDeviceCheckProvider(),
65+
);
66+
expect(result, 'debug');
67+
});
68+
69+
test(
70+
'returns legacy provider when explicitly set to appAttest and new provider is default',
71+
() {
72+
final result = getAppleProviderString(
73+
legacyProvider: AppleProvider.appAttest,
74+
newProvider: const AppleDeviceCheckProvider(),
75+
);
76+
expect(result, 'appAttest');
77+
});
78+
79+
test(
80+
'returns legacy provider when explicitly set to appAttestWithDeviceCheckFallback and new provider is default',
81+
() {
82+
final result = getAppleProviderString(
83+
legacyProvider: AppleProvider.appAttestWithDeviceCheckFallback,
84+
newProvider: const AppleDeviceCheckProvider(),
85+
);
86+
expect(result, 'appAttestWithDeviceCheckFallback');
87+
});
88+
89+
test(
90+
'returns new provider type when new provider is provided and legacy is default',
91+
() {
92+
final result = getAppleProviderString(
93+
legacyProvider: AppleProvider.deviceCheck,
94+
newProvider: const AppleDebugProvider(),
95+
);
96+
expect(result, 'debug');
97+
});
98+
99+
test(
100+
'returns legacy provider when new provider is provided and legacy is default',
101+
() {
102+
final result = getAppleProviderString(
103+
legacyProvider: AppleProvider.deviceCheck,
104+
newProvider: const AppleAppAttestProvider(),
105+
);
106+
expect(result, 'appAttest');
107+
});
108+
109+
test('returns default when neither provider is provided', () {
110+
final result = getAppleProviderString();
111+
expect(result, 'deviceCheck');
112+
});
113+
114+
test(
115+
'returns new provider when explicitly set to appAttestWithDeviceCheckFallback',
116+
() {
117+
final result = getAppleProviderString(
118+
legacyProvider: AppleProvider.deviceCheck,
119+
newProvider: const AppleAppAttestWithDeviceCheckFallbackProvider(),
120+
);
121+
expect(result, 'appAttestWithDeviceCheckFallback');
122+
});
123+
});
124+
}

packages/firebase_data_connect/firebase_data_connect/example/lib/main.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ void main() async {
4141
// 1. Debug provider
4242
// 2. Safety Net provider
4343
// 3. Play Integrity provider
44-
androidProvider: AndroidProvider.debug,
44+
providerAndroid: const AndroidDebugProvider(),
4545
// Default provider for iOS/macOS is the Device Check provider. You can use the "AppleProvider" enum to choose
4646
// your preferred provider. Choose from:
4747
// 1. Debug provider
4848
// 2. Device Check provider
4949
// 3. App Attest provider
5050
// 4. App Attest provider with fallback to Device Check provider (App Attest provider is only available on iOS 14.0+, macOS 14.0+)
51-
appleProvider: AppleProvider.appAttest,
51+
providerApple: const AppleAppAttestProvider(),
5252
);
5353
}
5454
if (configureEmulator) {

tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,7 @@ void main() {
8383
() async {
8484
await expectLater(
8585
FirebaseAppCheck.instance.activate(
86-
androidProvider: AndroidProvider.debug,
87-
providerAndroid: const AndroidDebugProvider(
88-
debugToken: 'debug_token',
89-
),
86+
providerAndroid: const AndroidDebugProvider(),
9087
),
9188
completes,
9289
);
@@ -99,10 +96,7 @@ void main() {
9996
() async {
10097
await expectLater(
10198
FirebaseAppCheck.instance.activate(
102-
appleProvider: AppleProvider.debug,
103-
providerApple: const AppleDebugProvider(
104-
debugToken: 'debug_token',
105-
),
99+
providerApple: const AppleDebugProvider(),
106100
),
107101
completes,
108102
);

0 commit comments

Comments
 (0)