代码之家  ›  专栏  ›  技术社区  ›  KT_

Google Drive访问/授权仅适用于直接/调试版本

  •  0
  • KT_  · 技术社区  · 4 年前

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

    一般的问题是,只有在我的设备上直接通过USB构建和运行时,事情才能正常工作。既然我已经完成了,我就不会详细介绍实际的代码了 elsewhere here 这样我就可以专注于当前的事情,(希望)向比我聪明的人表明问题所在。

    1. 起初,在我的设备上开发时,我遇到了一个问题,即根本无法获得谷歌云端硬盘授权。然后我发现这是因为Android Studio使用自己的debug.keystore对调试APK进行签名,所以我转到了Google API凭据仪表板,为我的应用程序包和调试密钥库创建了额外的OAuth2凭据(即,除了应用程序包的现有凭据和发布密钥库之外)。看起来工作得很好。

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

    3. 我的下一个想法(最后,经过几个月的尝试)是,我对同一个应用程序包的两组凭据——一组使用Android Studio调试密钥库,另一组使用我的发布密钥库——发生了冲突。因此,我想出了如何强制Android Studio使用我的发布密钥库对部署到我的设备上的调试构建进行签名,并在Google API仪表板上删除了调试密钥库凭据。一切似乎都正常。我以为这解决了问题。

    4. 然后,在昨晚的某个时候,在将我希望的固定捆绑包上传到Google Play后,我自己的设备应用程序从我直接部署的调试版本更新到了Google Play版本(因为版本代码是相同的?而Google Play版本更受欢迎?),然后。。。现在它不起作用了。我在logcat中得到了一个模糊的W.System.err消息流,因为它显然是一个Google Play APK。

    5. 当我再次通过USB直接从Android Studio部署到我的设备时,覆盖了Google Play APK、相同的版本代码、没有其他触摸等,它至少在Google Play再次覆盖它之前是有效的。

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

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

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

    这是否暗示了什么显而易见的事情?

    0 回复  |  直到 4 年前
        1
  •  1
  •   deanis    4 年前

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

    你不能更改已发布应用程序的签名证书,所以我不会弄乱这些证书,但你可以联系谷歌的签名支持,这样他们至少可以验证他们端的设置方式没有问题。