我正在编写一个应用程序,其中一个用户将通过此应用程序编写文件,并使用链接与其他用户共享。其他用户将使用相同的移动应用程序读取该文件。我正在使用'Drive API for Android'来使用离线写入和增量更新功能,以便读者只能下载新添加或更新的文件部分,而不是每次都下载完整文件。
但遗憾的是,该应用由一个用户创建的文件/文件夹无法通过其他设备上的同一个应用访问。我使用方法Drive.DriveApi.fetchDriveId与文件夹ID并获取以下错误消息。
“未找到驱动器项目,或者您无权访问它。”
文件/文件夹可以在具有相同ID的同一设备上访问,但在其他设备上无法访问,这表明错误消息的第二部分是真正的原因。
使用当前范围(Drive.SCOPE_FILE),我希望该文件可以访问,因为它是由同一个应用程序创建的,但它无法正常工作。
所以我的问题是“Google Drive会在创建文件/文件夹时存储设备信息,并且不允许不同设备上的同一个应用程序使用它吗?”如果没有,那一定是我在实现中的错误,我可以进一步调试。
答案 0 :(得分:0)
我有一个类似的问题,但没有Android应用程序,但JavaScript应用程序(应该不重要的IMO),我想访问共享文件而不是文件夹。但是,我想我的解决方法也可以帮到你。
第一种方法是使用完整的身份验证范围(请参阅https://developers.google.com/drive/web/scopes)
https://www.googleapis.com/auth/drive
但这并不是真正的需要,因为您应该向用户请求尽可能少的权利。因此,我的解决方法如下:
https://www.googleapis.com/auth/drive.install
https://www.googleapis.com/auth/drive.file
=对应用程序创建或打开的文件的每个文件访问权限 - 通知打开虚拟应用程序时用户将看到错误消息。您可能应该实现一个打开的网址,上面写着"感谢您批准访问文件xYZ"。我知道,它不是非常人性化,但它有效(至少现在,可能是这不是故意的) 如果您知道通过调用某个URL自动打开带有应用程序的文件的方法,那么请告诉我。 (但是,这在Google API中会出现安全问题,所以我想这是不可能的。)
由于它有点麻烦,我会向用户提出以下两个选项(因此她/他可以决定她/他自己):
我希望有所帮助。
答案 1 :(得分:0)
您可以添加完全允许的驱动器范围 -
https://www.googleapis.com/auth/drive
使用 -
请求范围.requestScopes(new Scope("https://www.googleapis.com/auth/drive"))
而不是
.resuestScopes(Drive.SCOPE_FILE)