我'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 回答
不是我期待的解决方案,但这里是:
事实证明,Android Studio没有使用位于
~/.android/debug.keystore
的调试密钥签署我的应用程序,但使用了不同的密钥 .在不知道它是哪个键的情况下,我能够使用this SO question中描述的方法找出它的SHA-1 .
这是因为您没有使用适当的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可以自动检测这些内容 . 该应用程序已启动 .
根据this项目的参考,只需删除以下行,然后
onResume()
不会再次调用试试这个:
这是正确的,完全如上所述 . 在验证GoogleDrive API时,此API会从应用程序请求SHA1,当我们在模拟器上以测试模式安装应用程序时,身份验证不起作用,因为SHA1与密钥库的SHA1不对应 . 要解决这个问题,我们必须以这种方式配置我们的GRADLE .
当您发布应用程序时,请删除此部分代码