[google_sign_in] Adds support to send `clientId` as a parameter (#3640)
diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md
index 57d1c9b..429b07b 100644
--- a/packages/google_sign_in/google_sign_in/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 5.0.1
+
+* Update platforms `init` function to prioritize `clientId` property when available;
+* Updates `google_sign_in_platform_interface` version.
+
## 5.0.0
* Migrate to null safety.
diff --git a/packages/google_sign_in/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java b/packages/google_sign_in/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
index f6673e5..eb3a3d0 100755
--- a/packages/google_sign_in/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
+++ b/packages/google_sign_in/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
@@ -136,7 +136,8 @@
String signInOption = call.argument("signInOption");
List<String> requestedScopes = call.argument("scopes");
String hostedDomain = call.argument("hostedDomain");
- delegate.init(result, signInOption, requestedScopes, hostedDomain);
+ String clientId = call.argument("clientId");
+ delegate.init(result, signInOption, requestedScopes, hostedDomain, clientId);
break;
case METHOD_SIGN_IN_SILENTLY:
@@ -188,7 +189,11 @@
public interface IDelegate {
/** Initializes this delegate so that it is ready to perform other operations. */
public void init(
- Result result, String signInOption, List<String> requestedScopes, String hostedDomain);
+ Result result,
+ String signInOption,
+ List<String> requestedScopes,
+ String hostedDomain,
+ String clientId);
/**
* Returns the account information for the user who is signed in to this app. If no user is
@@ -309,7 +314,11 @@
*/
@Override
public void init(
- Result result, String signInOption, List<String> requestedScopes, String hostedDomain) {
+ Result result,
+ String signInOption,
+ List<String> requestedScopes,
+ String hostedDomain,
+ String clientId) {
try {
GoogleSignInOptions.Builder optionsBuilder;
@@ -334,7 +343,10 @@
context
.getResources()
.getIdentifier("default_web_client_id", "string", context.getPackageName());
- if (clientIdIdentifier != 0) {
+ if (!Strings.isNullOrEmpty(clientId)) {
+ optionsBuilder.requestIdToken(clientId);
+ optionsBuilder.requestServerAuthCode(clientId);
+ } else if (clientIdIdentifier != 0) {
optionsBuilder.requestIdToken(context.getString(clientIdIdentifier));
optionsBuilder.requestServerAuthCode(context.getString(clientIdIdentifier));
}
diff --git a/packages/google_sign_in/google_sign_in/example/lib/main.dart b/packages/google_sign_in/google_sign_in/example/lib/main.dart
index e003225..c870632 100755
--- a/packages/google_sign_in/google_sign_in/example/lib/main.dart
+++ b/packages/google_sign_in/google_sign_in/example/lib/main.dart
@@ -12,6 +12,8 @@
import 'package:google_sign_in/google_sign_in.dart';
GoogleSignIn _googleSignIn = GoogleSignIn(
+ // Optional clientId
+ // clientId: '479882132969-9i9aqik3jfjd7qhci1nqf0bm2g71rm1u.apps.googleusercontent.com',
scopes: <String>[
'email',
'https://www.googleapis.com/auth/contacts.readonly',
diff --git a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m
index 660a322..fdc6e31 100644
--- a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m
+++ b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m
@@ -77,7 +77,15 @@
ofType:@"plist"];
if (path) {
NSMutableDictionary *plist = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
- [GIDSignIn sharedInstance].clientID = plist[kClientIdKey];
+ BOOL hasDynamicClientId =
+ [[call.arguments valueForKey:@"clientId"] isKindOfClass:[NSString class]];
+
+ if (hasDynamicClientId) {
+ [GIDSignIn sharedInstance].clientID = [call.arguments valueForKey:@"clientId"];
+ } else {
+ [GIDSignIn sharedInstance].clientID = plist[kClientIdKey];
+ }
+
[GIDSignIn sharedInstance].serverClientID = plist[kServerClientIdKey];
[GIDSignIn sharedInstance].scopes = call.arguments[@"scopes"];
[GIDSignIn sharedInstance].hostedDomain = call.arguments[@"hostedDomain"];
diff --git a/packages/google_sign_in/google_sign_in/pubspec.yaml b/packages/google_sign_in/google_sign_in/pubspec.yaml
index 06fa12c..23f2588 100644
--- a/packages/google_sign_in/google_sign_in/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in/pubspec.yaml
@@ -2,7 +2,7 @@
description: Flutter plugin for Google Sign-In, a secure authentication system
for signing in with a Google account on Android and iOS.
homepage: https://github.com/flutter/plugins/tree/master/packages/google_sign_in/google_sign_in
-version: 5.0.0
+version: 5.0.1
flutter:
plugin:
@@ -16,7 +16,7 @@
default_package: google_sign_in_web
dependencies:
- google_sign_in_platform_interface: ^2.0.0
+ google_sign_in_platform_interface: ^2.0.1
google_sign_in_web: ^0.10.0
flutter:
sdk: flutter
diff --git a/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart b/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart
index 79fa74a..4eb45a5 100755
--- a/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart
+++ b/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart
@@ -82,6 +82,25 @@
);
});
+ test('signIn prioritize clientId parameter when available', () async {
+ final fakeClientId = 'fakeClientId';
+ googleSignIn = GoogleSignIn(clientId: fakeClientId);
+ await googleSignIn.signIn();
+ expect(googleSignIn.currentUser, isNotNull);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('init', arguments: <String, dynamic>{
+ 'signInOption': 'SignInOption.standard',
+ 'scopes': <String>[],
+ 'hostedDomain': null,
+ 'clientId': fakeClientId,
+ }),
+ isMethodCall('signIn', arguments: null),
+ ],
+ );
+ });
+
test('signOut', () async {
await googleSignIn.signOut();
expect(googleSignIn.currentUser, isNull);