KT_*_*KT_ 4 android google-authentication google-drive-api
我一直在搜索 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);
Run Code Online (Sandbox Code Playgroud)
这是活动的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);
}
Run Code Online (Sandbox Code Playgroud)
我假设这是一个我做了一些明显愚蠢和错误的事情 - 并且希望仅仅输入问题就可以帮助我弄清楚它是什么,但这还没有发生。
正如我所料,我做错了一些相对简单的事情。因此,对于任何遇到相同问题并在寻找解决方案时越过我的身体的人,这是我发现的:
虽然我确实在 Google 开发人员控制台中正确设置了凭据,并按照文档的指示从 mykeystore.keystore 生成了我的包名称和 SHA1,但我错过的是 Android Studio没有使用 mykeystore 对调试版本进行签名。默认情况下的密钥库。相反,它使用自己提供的 debug.keystore。
因此,要做的是使用您的包名称和来自 Android Studio 的 debug.keystore 而不是自己的 SHA1 创建一个新的 OAuth 客户端 ID。(您可以在系统上查找 debug.keystore,或运行 Gradle“signingReport”任务并从那里获取它。)
希望能帮助某人。
小智 1
首先,很可能这一切都会发生,因为您从 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果错误代码是 12500,那么您的密钥验证有问题,因此您需要创建一个 firebase 项目并添加您的计算机 SHA1 代码,然后在应用程序根文件夹中使用其 google.json 文件。
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |