首页 文章

Google Drive API Android:坚持登录

提问于
浏览
0

我'm trying to implement the Drive API for Android to back-up a file to the AppFolder. I' m使用Using the Google APIS Client Library for Java to integrate with Drive on Android上的教程并使用了Quickstart中的一些代码片段 .

  • 使用驱动器API调用打开活动时(如this Activity from the Quickstart中, .connect() 调用不成功,错误代码为 SIGN_IN_REQUIRED ,这对我来说似乎合情合理 .

  • 然后我继续登录我的Google帐户 . 登录看起来很成功 .

  • 活动恢复 . 与快速入门中的链接活动文件一样, onResume 方法再次调用 .connect() .

  • .connect() 调用失败并显示相同的错误代码( SIGN_IN_REQUIRED )并重复该过程 .

在Google Developer Console的API Manager中,我为此应用创建了一个项目 . 在该项目中,我为应用程序创建了一个“OAuth 2.0客户端ID”,其中包含调试包名称和用于调试密钥的SHA-1 . 在快速入门的清单中,我没有看到任何地方使用的所述凭证的客户端ID .

这是一个已知问题还是我在某处犯了错误?

编辑:

我从头开始构建原始的Quickstart,但错误仍然存在 . 因此,它可能是API控制台的问题,而不是客户端问题 .

  • 我为应用创建了一个项目 .

  • 我启用了Drive API和Google API .

  • 我创建了一个"API Key"凭证,其中包含我的应用程序的包名称和我的调试签名密钥的SHA-1 .

4 回答

  • 0

    不是我期待的解决方案,但这里是:

    事实证明,Android Studio没有使用位于 ~/.android/debug.keystore 的调试密钥签署我的应用程序,但使用了不同的密钥 .

    在不知道它是哪个键的情况下,我能够使用this SO question中描述的方法找出它的SHA-1 .

  • 0

    这是因为您没有使用适当的SHA1密钥或包名生成适当的apk,需要在Google API控制台中注册 . 来自[Google android-quickstart]的代码是100%正确的 . onResume方法再次调用.connect()是由于您的SHA1密钥或包名称与API控制台不匹配 .

    要解决此问题:(1)您应首先为您的应用生成Sha1 ..如果您使用的是Android Studio并开发应用,请按照this获取应用的默认sha1 . [记住不要使用实时sha1键,否则你将无法登录!]
    (2)按照this使用默认sha1创建OAuth客户端ID . (3)再次运行[Google android-quickstart] .

    *注意:您不必将任何API客户端ID复制到您的清单或活动中,因为您应该在API控制台中成功注册具有指定包名称和Sha1 Key的应用程序,以便Google可以自动检测这些内容 . 该应用程序已启动 .

  • 0

    根据this项目的参考,只需删除以下行,然后 onResume() 不会再次调用

    试试这个:

    @Override
    protected void onPause() {
        if (mGoogleApiClient != null) {
            mGoogleApiClient.disconnect();
        }
        super.onPause();
    }
    
  • 0

    这是正确的,完全如上所述 . 在验证GoogleDrive API时,此API会从应用程序请求SHA1,当我们在模拟器上以测试模式安装应用程序时,身份验证不起作用,因为SHA1与密钥库的SHA1不对应 . 要解决这个问题,我们必须以这种方式配置我们的GRADLE .

    signingConfigs{
        key{
            keyAlias 'your key alias'
            keyPassword 'your keypassword'
            storeFile file('keystore path')
            storePassword 'your storepassword'
        }
    }
    buildTypes {
        debug{
            signingConfig signingConfigs.key
        }
    }
    
    
     buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            debuggable false
            useProguard true
        }
        debug {
            shrinkResources true
            minifyEnabled true
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            useProguard true
        }
    }
    

    当您发布应用程序时,请删除此部分代码

    signingConfigs{
        key{
            keyAlias 'your key alias'
            keyPassword 'your keypassword'
            storeFile file('keystore path')
            storePassword 'your storepassword'
        }
    }
    buildTypes {
        debug{
            signingConfig signingConfigs.key
        }
    }
    

相关问题