我一直在搜索 Google 文档和示例代码以及 Stack Overflow 以寻找解决方案,虽然我看到很多人遇到相同的症状,但我没有找到任何对我的具体情况有帮助的东西.
基本上我正在尝试为 Google Drive REST API 执行身份验证工作流,当我到达 Google 帐户选择页面时,当它返回我的调用 Activity 时,我总是看到 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);
这是 Activity 的 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);
}
我假设这是我做了一些明显愚蠢和错误的事情的案例——我希望只是输入问题就能帮助我弄清楚它是什么,但这还没有发生。
最佳答案
如我所料,我做错的事情相对简单。因此,对于遇到同样问题并在寻找解决方案时跨过我 body 的任何人,以下是我的发现:
虽然我确实在 Google 开发者控制台中正确设置了凭据,并按照文档的指示从 mykeystore.keystore 生成了我的包名称和 SHA1,但我错过的是 Android Studio 默认情况下不使用 mykeystore.keystore 签署调试版本。相反,它使用自己提供的 debug.keystore。
因此要做的事情是使用您的包名称和 Android Studio 的 debug.keystore 中的 SHA1 而不是自己的创建一个新的 OAuth 客户端 ID。 (您可以在您的系统上搜索 debug.keystore,或者运行 Gradle“signingReport”任务并从那里获取它。)
希望对某人有所帮助。
关于Android:Google Drive onActivityResult() 获取结果代码 0 (RESULT_CANCELED),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350913/