Java Google Drive Android API OAuth身份验证问题-onActivityResult返回“;0“;

Java Google Drive Android API OAuth身份验证问题-onActivityResult返回“;0“;,java,android,authentication,oauth-2.0,google-drive-android-api,Java,Android,Authentication,Oauth 2.0,Google Drive Android Api,我只是想验证Android驱动器API 我从Android Studio生成了签名的APK。帐户获得身份验证,Google Drive API身份验证与生成的APK完美配合 现在,当我上传这个相同的APK到游戏控制台的内部测试时。然后身份验证失败 __下面是我是如何做到这一切的__ 1) 在Android清单中添加了以下内容 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 3) 我生成了调试密钥S

我只是想验证Android驱动器API

我从Android Studio生成了签名的APK。帐户获得身份验证,Google Drive API身份验证与生成的APK完美配合

现在,当我上传这个相同的APK到游戏控制台的内部测试时。然后身份验证失败

__下面是我是如何做到这一切的__

1) 在Android清单中添加了以下内容

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
3) 我生成了调试密钥SHA1,并向API控制台注册了凭据,然后测试了应用程序它在这里工作。(onActivityResult返回结果\u OK)

4) 现在,我生成了生产密钥SHA1,并向API控制台注册了凭据,从Android Studio生成了最终签名的APK,并在我的物理设备上进行了测试它仍在工作。(onActivityResult返回结果\u OK)

5) 现在我在Play Console中发布了这个最终的生产APK到内部测试

6) 现在,当我下载此应用程序并运行此身份验证时它失败,现在不工作。(onActivityResult返回“0”

是否有我遗漏的内容。

有一种方法可以使用谷歌驱动API

在Android上授权请求不同于其他授权 由于与Google Play services的集成而产生的工作流

与其他工作流不同,Android上的授权使用
SHA1
指纹和软件包名称,以识别您的应用程序,而不是
客户端ID
客户端机密

您必须按照正确的授权流程在游戏控制台中测试APK


以下是一个指南。

我在问题中所述的所有步骤都是正确的。我错过了一件事,那就是我正在使用“谷歌游戏应用程序签名”

使用“Google Play应用程序签名”时,我们需要在API控制台中使用应用程序签名证书的SHA-1内部凭据来创建凭据-OAuth客户端ID

现在,从哪里获得此SHA-1的应用程序签名证书

  • 在Play Console中选择一个应用程序
  • 转到发布管理
  • 选择应用程序签名
  • 现在从“应用程序签名证书”部分复制SHA-1证书指纹
  • 使用复制的SHA-1指纹在Google API控制台(Google云平台)内创建新凭据

  • 就这样。现在,当您运行应用程序并进行API调用时,它将工作

    请查看我更新的问题,并提供我是否遗漏了任何东西您使用的android版本?28作为目标编译版本并使用androidX支持库版本我真的没有得到它,为什么投反对票。差不多一个星期后,我终于找到了与我的问题相关的问题。因此,将解决方案作为答案发布。这样,任何有同样问题的人都不会把头撞到墙上。如果答案不正确或者我需要改进,请告诉我。在应用程序签名中,我发现sha1与我的本地密钥库sha1相同。
    public abstract class AuthActivityStackOverflow extends BaseActivity {
    
        protected static final int GOOGLE_SIGN_IN_REQUEST_CODE = 1;
    
        public void signIn() {
            startActivityForResult( getGoogleSignInClient().getSignInIntent(), GOOGLE_SIGN_IN_REQUEST_CODE);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == GOOGLE_SIGN_IN_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    onSignInSuccess(GoogleSignIn.getLastSignedInAccount(this), requestCode);
                    showMessage("Account Linked Successfully");
                } else { onSignInFailed(); }
            }
        }
    
        protected GoogleSignInClient getGoogleSignInClient(){
            GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestScopes(Drive.SCOPE_APPFOLDER)
                    .requestEmail()
                    .build();
            return GoogleSignIn.getClient(this, signInOptions);
        }
    }