diff --git a/packages/google_sign_in/google_sign_in_android/AUTHORS b/packages/google_sign_in/google_sign_in_android/AUTHORS
index 493a0b4..35d24a5 100644
--- a/packages/google_sign_in/google_sign_in_android/AUTHORS
+++ b/packages/google_sign_in/google_sign_in_android/AUTHORS
@@ -64,3 +64,4 @@
 Anton Borries <mail@antonborri.es>
 Alex Li <google@alexv525.com>
 Rahul Raj <64.rahulraj@gmail.com>
+Twin Sun, LLC <google-contrib@twinsunsolutions.com>
diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
index 9852a1f..5125b22 100644
--- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.1.0
+
+* Adds override for `GoogleSignIn.initWithParams` to handle new `forceCodeForRefreshToken` parameter.
+
 ## 6.0.1
 
 * Updates gradle version to 7.2.1 on Android.
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
index 2164023..e84d196 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
@@ -140,8 +140,15 @@
         String hostedDomain = call.argument("hostedDomain");
         String clientId = call.argument("clientId");
         String serverClientId = call.argument("serverClientId");
+        boolean forceCodeForRefreshToken = call.argument("forceCodeForRefreshToken");
         delegate.init(
-            result, signInOption, requestedScopes, hostedDomain, clientId, serverClientId);
+            result,
+            signInOption,
+            requestedScopes,
+            hostedDomain,
+            clientId,
+            serverClientId,
+            forceCodeForRefreshToken);
         break;
 
       case METHOD_SIGN_IN_SILENTLY:
@@ -198,7 +205,8 @@
         List<String> requestedScopes,
         String hostedDomain,
         String clientId,
-        String serverClientId);
+        String serverClientId,
+        boolean forceCodeForRefreshToken);
 
     /**
      * Returns the account information for the user who is signed in to this app. If no user is
@@ -326,7 +334,8 @@
         List<String> requestedScopes,
         String hostedDomain,
         String clientId,
-        String serverClientId) {
+        String serverClientId,
+        boolean forceCodeForRefreshToken) {
       try {
         GoogleSignInOptions.Builder optionsBuilder;
 
@@ -374,7 +383,7 @@
         }
         if (!Strings.isNullOrEmpty(serverClientId)) {
           optionsBuilder.requestIdToken(serverClientId);
-          optionsBuilder.requestServerAuthCode(serverClientId);
+          optionsBuilder.requestServerAuthCode(serverClientId, forceCodeForRefreshToken);
         }
         for (String scope : requestedScopes) {
           optionsBuilder.requestScopes(new Scope(scope));
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java b/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
index 11f8cda..9692417 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
@@ -239,6 +239,48 @@
     initAndAssertServerClientId(methodCall, serverClientId);
   }
 
+  @Test
+  public void init_PassesForceCodeForRefreshTokenFalseWithServerClientIdParameter() {
+    MethodCall methodCall = buildInitMethodCall("fakeClientId", "fakeServerClientId", false);
+
+    initAndAssertForceCodeForRefreshToken(methodCall, false);
+  }
+
+  @Test
+  public void init_PassesForceCodeForRefreshTokenTrueWithServerClientIdParameter() {
+    MethodCall methodCall = buildInitMethodCall("fakeClientId", "fakeServerClientId", true);
+
+    initAndAssertForceCodeForRefreshToken(methodCall, true);
+  }
+
+  @Test
+  public void init_PassesForceCodeForRefreshTokenFalseWithServerClientIdFromResources() {
+    final String packageName = "fakePackageName";
+    final String serverClientId = "fakeServerClientId";
+    final int resourceId = 1;
+    MethodCall methodCall = buildInitMethodCall(null, null, false);
+    when(mockContext.getPackageName()).thenReturn(packageName);
+    when(mockResources.getIdentifier("default_web_client_id", "string", packageName))
+        .thenReturn(resourceId);
+    when(mockContext.getString(resourceId)).thenReturn(serverClientId);
+
+    initAndAssertForceCodeForRefreshToken(methodCall, false);
+  }
+
+  @Test
+  public void init_PassesForceCodeForRefreshTokenTrueWithServerClientIdFromResources() {
+    final String packageName = "fakePackageName";
+    final String serverClientId = "fakeServerClientId";
+    final int resourceId = 1;
+    MethodCall methodCall = buildInitMethodCall(null, null, true);
+    when(mockContext.getPackageName()).thenReturn(packageName);
+    when(mockResources.getIdentifier("default_web_client_id", "string", packageName))
+        .thenReturn(resourceId);
+    when(mockContext.getString(resourceId)).thenReturn(serverClientId);
+
+    initAndAssertForceCodeForRefreshToken(methodCall, true);
+  }
+
   public void initAndAssertServerClientId(MethodCall methodCall, String serverClientId) {
     ArgumentCaptor<GoogleSignInOptions> optionsCaptor =
         ArgumentCaptor.forClass(GoogleSignInOptions.class);
@@ -249,13 +291,39 @@
     Assert.assertEquals(serverClientId, optionsCaptor.getValue().getServerClientId());
   }
 
+  public void initAndAssertForceCodeForRefreshToken(
+      MethodCall methodCall, boolean forceCodeForRefreshToken) {
+    ArgumentCaptor<GoogleSignInOptions> optionsCaptor =
+        ArgumentCaptor.forClass(GoogleSignInOptions.class);
+    when(mockGoogleSignIn.getClient(any(Context.class), optionsCaptor.capture()))
+        .thenReturn(mockClient);
+    plugin.onMethodCall(methodCall, result);
+    verify(result).success(null);
+    Assert.assertEquals(
+        forceCodeForRefreshToken, optionsCaptor.getValue().isForceCodeForRefreshToken());
+  }
+
   private static MethodCall buildInitMethodCall(String clientId, String serverClientId) {
     return buildInitMethodCall(
-        "SignInOption.standard", Collections.<String>emptyList(), clientId, serverClientId);
+        "SignInOption.standard", Collections.<String>emptyList(), clientId, serverClientId, false);
   }
 
   private static MethodCall buildInitMethodCall(
-      String signInOption, List<String> scopes, String clientId, String serverClientId) {
+      String clientId, String serverClientId, boolean forceCodeForRefreshToken) {
+    return buildInitMethodCall(
+        "SignInOption.standard",
+        Collections.<String>emptyList(),
+        clientId,
+        serverClientId,
+        forceCodeForRefreshToken);
+  }
+
+  private static MethodCall buildInitMethodCall(
+      String signInOption,
+      List<String> scopes,
+      String clientId,
+      String serverClientId,
+      boolean forceCodeForRefreshToken) {
     HashMap<String, Object> arguments = new HashMap<>();
     arguments.put("signInOption", signInOption);
     arguments.put("scopes", scopes);
@@ -265,6 +333,7 @@
     if (serverClientId != null) {
       arguments.put("serverClientId", serverClientId);
     }
+    arguments.put("forceCodeForRefreshToken", forceCodeForRefreshToken);
     return new MethodCall("init", arguments);
   }
 }
diff --git a/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart b/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
index d96328d..731da39 100644
--- a/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
+++ b/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
@@ -30,11 +30,22 @@
     String? hostedDomain,
     String? clientId,
   }) {
+    return initWithParams(SignInInitParameters(
+      signInOption: signInOption,
+      scopes: scopes,
+      hostedDomain: hostedDomain,
+      clientId: clientId,
+    ));
+  }
+
+  @override
+  Future<void> initWithParams(SignInInitParameters params) {
     return channel.invokeMethod<void>('init', <String, dynamic>{
-      'signInOption': signInOption.toString(),
-      'scopes': scopes,
-      'hostedDomain': hostedDomain,
-      'clientId': clientId,
+      'signInOption': params.signInOption.toString(),
+      'scopes': params.scopes,
+      'hostedDomain': params.hostedDomain,
+      'clientId': params.clientId,
+      'forceCodeForRefreshToken': params.forceCodeForRefreshToken,
     });
   }
 
diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
index 0a863dc..de5e3f0 100644
--- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the google_sign_in plugin.
 repository: https://github.com/flutter/plugins/tree/main/packages/google_sign_in/google_sign_in_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
-version: 6.0.1
+version: 6.1.0
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart b/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
index 7d39ae5..948ced3 100644
--- a/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
+++ b/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
@@ -111,6 +111,21 @@
         'scopes': <String>['two', 'scopes'],
         'signInOption': 'SignInOption.games',
         'clientId': 'fakeClientId',
+        'forceCodeForRefreshToken': false,
+      }),
+      () {
+        googleSignIn.initWithParams(const SignInInitParameters(
+            hostedDomain: 'example.com',
+            scopes: <String>['two', 'scopes'],
+            signInOption: SignInOption.games,
+            clientId: 'fakeClientId',
+            forceCodeForRefreshToken: true));
+      }: isMethodCall('init', arguments: <String, dynamic>{
+        'hostedDomain': 'example.com',
+        'scopes': <String>['two', 'scopes'],
+        'signInOption': 'SignInOption.games',
+        'clientId': 'fakeClientId',
+        'forceCodeForRefreshToken': true,
       }),
       () {
         googleSignIn.getTokens(
diff --git a/packages/google_sign_in/google_sign_in_ios/AUTHORS b/packages/google_sign_in/google_sign_in_ios/AUTHORS
index 493a0b4..35d24a5 100644
--- a/packages/google_sign_in/google_sign_in_ios/AUTHORS
+++ b/packages/google_sign_in/google_sign_in_ios/AUTHORS
@@ -64,3 +64,4 @@
 Anton Borries <mail@antonborri.es>
 Alex Li <google@alexv525.com>
 Rahul Raj <64.rahulraj@gmail.com>
+Twin Sun, LLC <google-contrib@twinsunsolutions.com>
diff --git a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md
index 5ed38de..2b62f8a 100644
--- a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 5.5.0
+
+* Adds override for `GoogleSignInPlatform.initWithParams`.
+
 ## 5.4.0
 
 * Adds support for `serverClientId` configuration option.
diff --git a/packages/google_sign_in/google_sign_in_ios/lib/google_sign_in_ios.dart b/packages/google_sign_in/google_sign_in_ios/lib/google_sign_in_ios.dart
index ce88656..07407ea 100644
--- a/packages/google_sign_in/google_sign_in_ios/lib/google_sign_in_ios.dart
+++ b/packages/google_sign_in/google_sign_in_ios/lib/google_sign_in_ios.dart
@@ -30,15 +30,25 @@
     String? hostedDomain,
     String? clientId,
   }) {
-    if (signInOption == SignInOption.games) {
+    return initWithParams(SignInInitParameters(
+      signInOption: signInOption,
+      scopes: scopes,
+      hostedDomain: hostedDomain,
+      clientId: clientId,
+    ));
+  }
+
+  @override
+  Future<void> initWithParams(SignInInitParameters params) {
+    if (params.signInOption == SignInOption.games) {
       throw PlatformException(
           code: 'unsupported-options',
           message: 'Games sign in is not supported on iOS');
     }
     return channel.invokeMethod<void>('init', <String, dynamic>{
-      'scopes': scopes,
-      'hostedDomain': hostedDomain,
-      'clientId': clientId,
+      'scopes': params.scopes,
+      'hostedDomain': params.hostedDomain,
+      'clientId': params.clientId,
     });
   }
 
diff --git a/packages/google_sign_in/google_sign_in_ios/pubspec.yaml b/packages/google_sign_in/google_sign_in_ios/pubspec.yaml
index 65c8928..760e333 100644
--- a/packages/google_sign_in/google_sign_in_ios/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in_ios/pubspec.yaml
@@ -2,7 +2,7 @@
 description: iOS implementation of the google_sign_in plugin.
 repository: https://github.com/flutter/plugins/tree/main/packages/google_sign_in/google_sign_in_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
-version: 5.4.0
+version: 5.5.0
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/google_sign_in/google_sign_in_ios/test/google_sign_in_ios_test.dart b/packages/google_sign_in/google_sign_in_ios/test/google_sign_in_ios_test.dart
index 92637e9..ace6509 100644
--- a/packages/google_sign_in/google_sign_in_ios/test/google_sign_in_ios_test.dart
+++ b/packages/google_sign_in/google_sign_in_ios/test/google_sign_in_ios_test.dart
@@ -126,6 +126,16 @@
         'clientId': 'fakeClientId',
       }),
       () {
+        googleSignIn.initWithParams(const SignInInitParameters(
+            hostedDomain: 'example.com',
+            scopes: <String>['two', 'scopes'],
+            clientId: 'fakeClientId'));
+      }: isMethodCall('init', arguments: <String, dynamic>{
+        'hostedDomain': 'example.com',
+        'scopes': <String>['two', 'scopes'],
+        'clientId': 'fakeClientId',
+      }),
+      () {
         googleSignIn.getTokens(
             email: 'example@example.com', shouldRecoverAuth: false);
       }: isMethodCall('getTokens', arguments: <String, dynamic>{
