Android Google Auth 登录获取 Id 令牌 handleSignInResult:false
Posted
技术标签:
【中文标题】Android Google Auth 登录获取 Id 令牌 handleSignInResult:false【英文标题】:Android Google Auth Sign In get Id token handleSignInResult:false 【发布时间】:2016-03-19 18:10:27 【问题描述】:我正在像这样设置 GoogleSignInOptions 和 Google Api Client
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_ID))
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(Plus.API)
.build();
我的谷歌网络应用程序客户端 ID 如下:
1020847812450-xxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
但总是在 onActivityResult
if (requestCode == RC_SIGN_IN)
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
返回错误
我在哪里做错了:S
onStart 部分
mGoogleApiClient.connect();
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
if (opr.isDone())
// If the user's cached credentials are valid, the OptionalPendingResult will be "done"
// and the GoogleSignInResult will be available instantly.
Log.d(TAG, "Got cached sign-in");
// GoogleSignInResult result = opr.get();
// handleSignInResult(result);
else
// If the user has not previously signed in on this device or the sign-in has expired,
// this asynchronous branch will attempt to sign in the user silently. Cross-device
// single sign-on will occur in this branch.
opr.setResultCallback(new ResultCallback<GoogleSignInResult>()
@Override
public void onResult(GoogleSignInResult googleSignInResult)
handleSignInResult(googleSignInResult);
);
onStop 部分
protected void onStop()
super.onStop();
if (mGoogleApiClient.isConnected())
mGoogleApiClient.disconnect();
onHandleSignInResult
private void handleSignInResult(GoogleSignInResult result)
Log.e(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess())
// Signed in successfully, show authenticated UI.
final GoogleSignInAccount acct = result.getSignInAccount();
Log.e(TAG, acct.getDisplayName());
【问题讨论】:
【参考方案1】:我也面临同样的问题。首先删除当前的 OAuth 客户端 ID,然后再创建一个 OAuth 客户端 ID。它对我有用。
【讨论】:
【参考方案2】:您是否收到错误 12501?我也遇到了这个问题,因为我使用的是 SDK 附带的debug.keystore
(由于某种我不知道的原因,它不起作用)。我自己创建了一个新的,从中获取 SHA-1 哈希,输入 Google API 控制台,然后它就可以工作了。
请务必设置signing configs for both debug and release builds with the new keystore。
【讨论】:
【参考方案3】:按照所有步骤进行!..
发布 APK 和调试 APK 具有不同的 SHA1 和不同的 Google 服务 API 密钥。两者都必须在 Firebase 控制台 -> 项目设置中添加。然后从此处下载 google-services.json,将其添加到项目并使用“构建签名的 APK”选项使用发布密钥库重新编译。应该可以的
还要仔细阅读……
https://developer.android.com/studio/publish/app-signing
【讨论】:
【参考方案4】:我相信您需要根据文档example 致电client.connect();
:
GoogleApiClient client = new GoogleApiClient.Builder(this)
.addApi(Plus.API)
.addScope(Plus.SCOPE_PLUS_LOGIN)
.setAccountName("users.account.name@gmail.com")
.build();
client.connect();
或者您的问题中缺少它并且您在代码中的其他地方调用connect
som?
【讨论】:
您能否发布其余代码,尤其是调用和响应?以上是关于Android Google Auth 登录获取 Id 令牌 handleSignInResult:false的主要内容,如果未能解决你的问题,请参考以下文章
在独立的 Android 应用程序上使用 expo-auth-session 进行 Google 登录,浏览器关闭但没有任何反应
在 Android 的 Auth0 Lock 中获取 403 不允许的用户代理
Apple使用FireBase Auth登录android有问题