首页 > 解决方案 > Google Drive 访问/授权仅适用于直接/调试构建

问题描述

我一直在尝试诊断 OAuth 2.0、客户端 ID 和 Google API 访问(特别是 Google Drive)的授权问题。

普遍的问题是,只有在我的设备上直接通过 USB 构建和运行时才会起作用。我不会详细介绍实际代码——因为我已经在其他地方做过了——所以我可以专注于当前的事情,这将(希望)向比我更聪明的人指出问题所在。

  1. 最初,在我的设备上开发时,我遇到了根本无法获得 Google Drive 授权的问题。然后我发现这是因为 Android Studio 使用自己的 debug.keystore 对调试 APK 进行了签名,所以我去了 Google APIs 凭据仪表板并为我的应用程序包和调试密钥库创建了额外的 OAuth2 凭据(即,除了现有的那些用于应用程序包和我的发布密钥库的)。似乎工作得很好。

  2. 除了部署到 Google Play 的发布包不起作用。即使用户从 Google 的授权流程中选择了他们的帐户,他们也未能获得授权。

  3. 我的下一个想法(最终,经过几个月的尝试)是我为同一个应用程序包设置的两组凭据——一组使用 Android Studio 调试密钥库,另一组使用我的发布密钥库——发生冲突。所以我想出了如何强制 Android Studio 使用我的发布密钥库对部署到我的设备的调试版本进行签名,并摆脱了 Google API 仪表板上的调试密钥库凭据。一切似乎都奏效了。以为这已经解决了问题。

  4. 然后,在昨晚的某个时候,在将我希望的固定捆绑包上传到 Google Play 之后,我自己的设备应用程序从我直接部署的调试版本更新到了 Google Play 版本(因为 versionCodes 是相同的?和 Google播放版本获得首选?)并且......现在它不起作用。我在 logcat 中得到了一个混淆的 W.System.err 消息流,因为它显然是一个 Google Play APK。

  5. 当我通过 USB 再次直接从 Android Studio 部署到我的设备时,覆盖了 Google Play APK、相同的 versionCode、没有触及其他内容等,它可以正常工作——至少在 Google Play 再次覆盖它之前是这样。

(编辑:已确认...我可以在 Google Play 应用程序中手动点击更新,它会用昨天上传的 Google Play 版本覆盖我刚刚部署的通过 USB 和刚刚工作的调试 APK,并且 Google Drive 将不再工作.)

(编辑#2:另外,我已经仔细检查过,Google API 控制台中的凭据使用的是正确的 SHA-1 签名。事实上,自从我设置了 Google 管理的签名后,似乎所有这三个我的本地发布证书和 Google Play 的应用签名证书和上传证书是一样的,所以用错的可能性很小。)

这意味着我的应用程序唯一可以访问 Google Drive 的版本是直接从 Android Studio 构建和部署的版本。

这有什么明显的暗示吗?

标签: androidgoogle-apigoogle-drive-api

解决方案


您是作为 APK 还是捆绑包 (.aab) 部署到 Google Play?如果是后者,您可以尝试以 APK 的形式发布,以防 Google 的重新签名是某种原因——尽管我看不出它是怎么回事。请注意,我相信在这种情况下您必须单独上传您的符号。

您不能更改已发布应用程序的签名证书,所以我不会搞砸这些,但您可以联系 Google 的签名支持,这样至少他们可以验证他们的设置方式没有问题.


推荐阅读