Android:Google Drive onActivityResult()获得resultCode 0(RESULT_CANCELED)

时间:2019-05-28 22:37:03

标签: android google-drive-api google-authentication

我一直在寻找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);
}

我以为这是我做某件事显然是愚蠢和错误的情况-希望只是输入问题可以帮助我弄清楚它是什么,但这还没有发生。

2 个答案:

答案 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文件。