我一直在寻找Google文档和示例代码以及Stack Overflow来寻求解决方案,尽管我看到许多人遇到相同的症状,但我没有发现任何对我的情况有帮助的东西
基本上,我正在尝试为Google Drive REST API做一个身份验证工作流,虽然我到达了Google帐户选择页面,但当它返回到我的通话活动时,我总是会看到RESULT_CANCELED的结果(即0)而不是RESULT_OK(即-1),无论选择了哪个帐户。
我已检查以确保在Google开发人员控制台上正确设置了凭据-并且它们之前已通过现已失效的CloudRail库进行身份验证。 (据我所知,现在通过Google登录,您不提供任何客户端ID,等等:当与您的软件包名称匹配时,这些操作都将在Google端处理。)
这是我要求身份验证的电话
GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(DriveScopes.DRIVE))
.build();
mSignInClient = GoogleSignIn.getClient(activity, signInOptions);
这是活动的onActivityResult()
:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
switch (requestCode) {
case REQUEST_GOOGLE_SIGN_IN:
if (resultCode == Activity.RESULT_OK && resultData != null) {
/*** NEVER GET HERE ***/
handleSignInResult(this, resultData);
}
else {
/*** ALWAYS GET HERE ***/
Log.e(TAG, String.format("Unable to complete Google sign-in (resultCode: %d)", resultCode));
}
}
break;
}
super.onActivityResult(requestCode, resultCode, resultData);
}
我以为这是我做某件事显然是愚蠢和错误的情况-希望只是输入问题可以帮助我弄清楚它是什么,但这还没有发生。
答案 0 :(得分:1)
正如我所料,我做错了相对简单的事情。因此,对于遇到相同问题并在寻找解决方案时跨过我的身体的任何人,这就是我发现的东西:
虽然我 did 正确设置了Google开发者控制台中的凭据,并按照文档的指示从mykeystore.keystore中生成了我的软件包名称和SHA1,但我错过的是Android Studio 默认情况下不使用mykeystore.keystore对调试版本进行签名。相反,它使用自己提供的debug.keystore。
因此,要做的是使用Android Studio的debug.keystore(而非您自己的)中的包名称和SHA1创建新的OAuth客户端ID。 (您可以在系统上查找debug.keystore,或运行Gradle“ signingReport”任务并从那里获取它。)
希望能帮助某人。
答案 1 :(得分:0)
首先最有可能是因为您从Google Drive API控制台添加了credential.json。 我建议您在Firebase控制台中创建一个项目,并添加其google.json以验证身份验证。
,在onActivityResult中,您可以使用以下代码检查错误代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (callbackManager != null) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
handleSignInResult(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
System.out.println("errorCode = " + e.getStatusCode());// Print this error code on your console
}
}
}
如果错误代码为12500,则您的密钥验证问题,因此您需要创建一个firebase项目并添加计算机SHA1代码,然后在应用程序根文件夹中使用其google.json文件。