googlesamples / google-signin-unity

Google Sign-In API plugin for Unity game engine. Works with Android and iOS.
Other
424 stars 231 forks source link

Recent migration attempt #256

Open Thaina opened 5 months ago

Thaina commented 5 months ago

Since there is deprecation and migration recommendation from signin system

: copied from readme >

https://developer.android.com/identity/sign-in/legacy-gsi-migration https://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

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)

Tested in unity 2021.3.21 and unity 6000.0.4

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",
}
google-cla[bot] commented 5 months ago

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Thaina commented 5 months ago

@calumma-robert Do you interest in signing google CLA agreement?

calumma-robert commented 5 months ago

@Thaina done!

Thaina commented 5 months ago

Thank you very much

nixonjoshua98 commented 4 months ago
GoogleSignIn.Configuration ??= new GoogleSignInConfiguration()
{
    WebClientId = Env.GoogleWebClientId,
    RequestIdToken = true,
    UseGameSignIn = false,
    RequestEmail = true,
    HidePopups = true
};

var user = await DefaultInstance.SignInSilentlyAsync();

1) Dismissing the popup may sometimes prompt the following image

2) The prompt is always shown, there is no 'silently' sign in. I cant see how to fix this

Thaina commented 4 months ago

@nixonjoshua98 I have push the new fix to allow auto signin for device with multiple account. But I just have found some detailed concern about this case

https://developer.android.com/identity/sign-in/credential-manager-siwg#enable-sign-in https://stackoverflow.com/a/78269657/1260333

As there is mention about criteria to auto signin. Even we have auto signin for the device with multiple account, if there is also more than one account had ever signin to your app, the account selector will still be launched anyway in the same manner you have experienced

The stackoverflow answer above have mention that you might need to revoke access to the app from the account too, and have only one account connect to the app

I have just create google issue for request a feature to specified email hint (as the new identity signin system was not contain API to set a hint anymore). Would you pleased to upvote this issue too?

https://issuetracker.google.com/issues/352864317

nixonjoshua98 commented 4 months ago

Much love, I've upvoted it. Thanks for the quick responses

nivedhKA commented 3 months ago

Is there any update on 'silently' sign in ? @Thaina @nixonjoshua98

nixonjoshua98 commented 3 months ago

I went with the approach of storing an encrypted token after signing in, which stores your login preference. Let's me skip the Google login popup, and I just send that token to my backend.

Thaina commented 3 months ago

Is there any update on 'silently' sign in ? @Thaina @nixonjoshua98

It should be silent if you have only one account signing in into your app in your device, isn't it?

nivedhKA commented 3 months ago

Yes, it's working and doesn't open dialog ui of account selecting but still encounter the following error in the logs during a slientlysignin :

NoCredentialException: During begin sign-in, failure response from one tap: 16: User disabled the feature

Upon researching this error, I discovered that it occurs when the Google account's sign-in prompt is disabled. Specifically, if a user has only one account signed in and has disabled the one-tap sign-in feature in their Google account settings, this error is generated. When I enabled the one-tap sign-in for the affected Google account, the error disappeared. However, the account selection dialog appears again.

Steps to Reproduce

  1. Ensure only one Google account is signed into the device.
  2. Disable the one-tap sign-in feature for this Google account in its settings.
  3. Attempt to sign in silently using the app.
  4. Observe the NoCredentialException error in the logs.
  5. Enable the one-tap sign-in feature for the Google account.

rEhN8flk

  1. Attempt to sign in silently again and notice that the account selection dialog appears once more.
Thaina commented 3 months ago

Based on your step, isn't those expected behaviour? Or are there other behaviour we should have?

nixonjoshua98 commented 3 months ago

@nivedhKA Where is that setting, i can't seem to find it? I have this exception for a couple of users as well.

nivedhKA commented 3 months ago

@nivedhKA Where is that setting, i can't seem to find it? I have this exception for a couple of users as well.

In Android Device -> Open Settings -> Find Google Account -> Select Google Account And Select -> Open Manage Account And Search Sign In prompts.

Thaina commented 3 months ago

@nivedhKA I think I just understand your issue

I think what you trying to do, which is disabling signinprompt, are not given what you expected

What I think it would is revoking the signin of the app from all of your accounts except one, which is difference thing from just disabling signin prompt

I am not testing it yet but maybe this might work

image