Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Google Sign-In Unity for Ritty

Ritty-maintained package based on Thaina/google-signin-unity's newmigration branch.

Install a released version by tag so Unity resolves an immutable package version:

{
"dependencies": {
"com.google.signin": "https://github.com/SamMeows/google-signin-unity-Ritty.git#v0.9.2"
}
}

Ritty-specific changes in 0.9.2:

  • Resolve GoogleSignIn iOS through CocoaPods only. This keeps its transitive GoogleUtilities and PromisesObjC dependencies unified with Firebase pods and avoids duplicate linker symbols caused by mixing CocoaPods and SPM.

Ritty-specific changes in 0.9.1:

  • Use Credential Manager 1.6.0 and Google ID 1.2.0.
  • Complete ID-token-only Android sign-in without an unnecessary AuthorizationClient request.
  • Preserve AuthorizationClient for auth-code and additional-scope requests.
  • Report Credential Manager user cancellation as CANCELED.
  • Use getUniqueId() and getEmail() from the current Google ID API.
  • Prefer RittyOAuth-ClientID.plist when multiple matching iOS plist files exist.
  • Do not register a project-wide scripted importer for every .plist asset.
  • Marshal iOS strings using their UTF-8 byte length.

The downloaded RittyOAuth-ClientID.plist can remain unchanged. Set WebClientId in GoogleSignInConfiguration; the iOS bridge applies it as the server client ID at runtime.

Upstream migration notes

https://developer.android.com/identity/sign-in/legacy-gsi-migrationhttps://developers.google.com/identity/sign-in/ios/quick-migration-guide

Thank for ios fix which was cherrypicked from this fork : https://github.com/pillsgood/google-signin-unity which came from @DulgiKim googlesamples#205 (comment)

Android was migrated to use CredentialManager and AuthorizationClient since GoogleSignInAccount was deprecated

However, GoogleIdTokenCredential actually not provide numeric unique ID anymore and set email as userId instead, so I have to extract jwt sub value from idToken (which seem like the same id as userId from GoogleSignIn of other platform)

Also, this new system seem like it did not support email hint. And now require WebClientId in addition to Android Client ID. Which need to provided at configuration initialization

GoogleSignIn.Configuration=newGoogleSignInConfiguration(){RequestEmail=true,RequestProfile=true,RequestIdToken=true,RequestAuthCode=true,// must be web client ID, not android client IDWebClientId="XXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
#if UNITY_EDITOR||UNITY_STANDALONEClientSecret="XXXXXX-xxxXXXxxxXXXxxx-xxxxXXXXX"// optional for windows/macos and test in editor
#endif
};

Tested in unity 2021.3.21 and unity 6000.0.5

Add UPM dependency with branch tag https://github.com/Thaina/google-signin-unity.git#newmigration

{
"dependencies": {
"com.google.external-dependency-manager": "https://github.com/googlesamples/unity-jar-resolver.git?path=upm",
"com.google.signin": "https://github.com/Thaina/google-signin-unity.git#newmigration",
...
}
}

Also, New version of iOS recommend that we should set GIDClientID and GIDServerClientID into Info.plist

So I have add an editor tool PListProcessor that look for plist files in the project, extract CLIENT_ID and WEB_CLIENT_ID property of the plist which contain the BUNDLE_ID with the same name as bundle identifier of the project

The plist file in the project should be downloaded from Google Cloud Console credential page

Select iOS credential and download at ⬇ button

<!-- This plist was the default format downloaded from your google cloud console -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CLIENT_ID</key> <string>{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.{YourCloudProjectID}-yyyyyYYYYyyyyYYYYYYYYYYYYYYyyyyyy</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.{YourCompany}.{YourProductName}</string>
<!-- Optional, These 2 lines below should be added manually if you need ServerAuthCode -->
<key>WEB_CLIENT_ID</key>
<string>{YourCloudProjectID}-zzzZZZZZZZZZZZZZZzzzzzzzzzzZZZzzz.apps.googleusercontent.com</string>
</dict>
</plist>

Document below is original README, some information might be outdated

Google Sign-In Unity Plugin

Copyright (c) 2017 Google Inc. All rights reserved.

Overview

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. This plugin exposes the Google Sign-In API within Unity. This is specifically intended to be used by Unity projects that require OAuth ID tokens or server auth codes.

It is cross-platform, supporting both Android and iOS.

See Google Sign-In for Android for more information.

Configuring the application on the API Console

To authenticate you need to create credentials on the API console for your application. The steps to do this are available on Google Sign-In for Android or as part of Firebase configuration. In order to access ID tokens or server auth codes, you also need to configure a web client ID.

How to build the sample

Get a Google Sign-In configuration file

This file contains the client-side information needed to use Google Sign-in. The details on how to do this are documented on the Developer website.

Once you have the configuration file, open it in a text editor. In the middle of the file you should see the oauth_client section:

 "oauth_client": [
{
"client_id": "411000067631-hmh4e210xxxxxxxxxx373t3icpju8ooi.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "411000067631-udra361txxxxxxxxxx561o9u9hc0java.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.your.package.name.",
"certificate_hash": "7ada045cccccccccc677a38c91474628d6c55d03"
}
}
]

There are 3 values you need for configuring your Unity project:

  1. The Web client ID. This is needed for generating a server auth code for your backend server, or for generating an ID token. This is the client_id value for the oauth client with client_type == 3.
  2. The package_name. The client entry with client_type == 1 is the Android client. The package_name must be entered in the Unity player settings.
  3. The keystore used to sign your application. This is configured in the publishing settings of the Android Player properties in the Unity editor. This must be the same keystore used to generate the SHA1 fingerprint when creating the application on the console. NOTE: The configutation file does not reference the keystore, you need to keep track of this yourself.

Create a new project and import the plugin

Create a new Unity project and import the GoogleSignIn-1.0.0.unitypackage (or the latest version). This contains native code, C# Unity code needed to call the Google Sign-In API for both Android and iOS.

Import the sample scene

Import the GoogleSignIn-sample.unitypackage which contains the sample scene and scripts. This package is not needed if you are integrating Google Sign-in into your own application.

Configure the web client id

  1. Open the sample scene in Assets/SignInSample/MainScene.
  2. Select the Canvas object in the hierarchy and enter the web client id in the SignInSampleScript component.

Building for Android

  1. Under Build Settings, select Android as the target platform.
  2. Set the package name in the player settings to the package_name you found in the configuration file.
  3. Select the keystore file, the key alias, and passwords.
  4. Resolve the Google Play Services SDK dependencies by selecting from the menu: Assets/Play Services Resolver/Android Resolver/Resolve. This will add the required .aar files to your project in Assets/Plugins/Android.

Building for iOS

For iOS, follow the instructions for creating a GoogleService-Info.plist file on https://developers.google.com/identity/sign-in/ios/start-integrating.

In Unity, after switching to the iOS player, make sure to run the Play Services Resolver. This will add the required frameworks and libraries to the XCode project via CocoPods.

After generating the XCode project from Unity, download the GoogleService-Info.plist file from the Google Developers website and add it to your XCode project.

Using the Games Profile to sign in on Android

To use the Play Games Services Gamer profile when signing in, you need to edit the dependencies in Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.

Uncomment the play-services-games dependency and re-run the resolution.

Using this plugin with Firebase Auth

Follow the instructions to use Firebase Auth with Credentials on the Firebase developer website.

Make sure to copy the google-services.json and/or GoogleService-Info.plist to your Unity project.

Then to use Google SignIn with Firebase Auth, you need to request an ID token when authenticating. The steps are:

  1. Configure Google SignIn to request an id token and set the web client id as described above.
  2. Call SignIn() (or SignInSilently()).
  3. When handling the response, use the ID token to create a Firebase Credential.
  4. Call Firebase Auth method SignInWithCredential().
 GoogleSignIn.Configuration = new GoogleSignInConfiguration {
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser> ();
signIn.ContinueWith (task => {
if (task.IsCanceled) {
signInCompleted.SetCanceled ();
} else if (task.IsFaulted) {
signInCompleted.SetException (task.Exception);
} else {
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential (((Task<GoogleSignInUser>)task).Result.IdToken, null);
auth.SignInWithCredentialAsync (credential).ContinueWith (authTask => {
if (authTask.IsCanceled) {
signInCompleted.SetCanceled();
} else if (authTask.IsFaulted) {
signInCompleted.SetException(authTask.Exception);
} else {
signInCompleted.SetResult(((Task<FirebaseUser>)authTask).Result);
}
});
}
});

Building the Plugin

To build the plugin run ./gradlew -PlintAbortOnError build_all. This builds the support aar library with lint warnings as errors and packages the plugin into a .unitypackage file. It also packages the sample scene and script in a separate package.

There's also a shortcut for linux/mac: ./build_all.

Questions? Problems?

Post questions to this Github project.

About

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. / Tweaked for Ritty service.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages