Android Google 玩/开车 Api

Android Google Play / Drive Api

您好,我正在使用 Google 驱动器 Api 通过 AppDataFolder 工具存储数据库。我在一台设备上成功地测试了应用 运行。我能够 upload/update/delete/download 数据库文件并将其重新集成到程序中,没有任何问题。

我遇到的问题是,当我想与另一台设备 运行 共享此数据库时使用相同的应用程序,然后事情无法按预期工作。示例设备 A 我上传数据库,设备 B - 我想下载数据库但没有找到文件(这种延迟可能从几秒到几小时不等)。这样做的原因 - 当使用 Api 时,它决定何时需要 'sync' 数据,因为它是排队而不是即时上传的。因此,当在一台设备上使用时,这不是问题,因为它要么从云存储中获取 'synced' 文件,要么获取等待同步的文件。

我尝试了各种方法,例如尝试列出所有 AppDataFolder 文件,或者在向 update/delete 发出请求之前通过带有可搜索过滤器的查询检索元数据等。但是我无法让它按预期工作从根本上说,它会选择何时同步。

所以我的实际问题是:如何强制 Google 驱动器在我需要时同步我的文件,即每次发出请求时,以便使用同一应用程序在多个设备上实现同步.必须有一个答案,因为我认为这是您首先使用 AppDataFolder 的根本原因。

提前致谢

EDIT/UPDATE:

我已经能够使用以下代码在 Api 到 'sync' 驱动器内容中找到一个选项:

            // try to sync
            Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<com.google.android.gms.common.api.Status>() {
                @Override
                public void onResult(com.google.android.gms.common.api.Status status) {
                    if (!status.getStatus().isSuccess()) {
                        Log.e("SYNCING", "ERROR" + status.getStatusMessage());
                    } else {
                        Log.e("SYNCING", "SUCCESS");
                        // execute async task to list AppFolderContents
                        new AppFolderContentsAsyncTask(getActivity()).execute();
                    }
                }
            });

这适用于快速连续尝试 3/4 次,但我达到了同步限制和状态消息:

ERRORSync request rate limit exceeded.

有没有什么方法可以提高请求率,因为如果我必须有一个提示用户“请稍后重试同步”的应用程序,这并不是真正可取的——不确定你要等多久不过你可以!'

各种解决方案,以及我的想法(无论其价值)

我要寻求的解决方案(在通过电子邮件向应用开发者发送电子邮件后,其发布了一个同步没有问题的驱动器应用程序)是使用驱动器 REST Api,而不是更新的(和 Google 首选)驱动器 API。我尝试将 'requestSync' 限制为仅当用户使用驱动器选项导航到片段时(而不是每个文件事务)。然而,这可能会在很大程度上解决 requestSync 速率限制,但它仍然可能达到该限制。此外,如果多个设备是 运行 应用程序,并且链接到同一云端硬盘帐户的两个文件同时在应用程序中都是 syncing/uploading/deleting 文件,则可能会失去同步 - 这可能是一种罕见的情况,但还是有可能的。就用户体验或应用程序设计而言,我认为让用户等待同步文件不是一个可行的选择。

不过很好奇 - 实际的云端硬盘应用程序可让您刷新(requestSync?)任意次数。我在 Web 界面上快速连续创建了 20 个文件夹,创建每个文件夹后,我刷新 phone 上的云端硬盘应用程序,它同步了 20 次。似乎 Google 理解同步的重要性,但选择让这很难在他们的新驱动器 API 中确保这一点。如前所述,将文件上传到云存储通常是立即发生的(它是排队的,但是如果你有连接,它几乎是立即发生的)。我本以为这是移动 data/updating 驱动器内容方面的昂贵交易,而不是仅仅查询文件同步。但是,您可以一次一个地向您的云端硬盘应用程序添加文件,并且它几乎立即一次上传一个文件 - 当您在 30 秒内请求同步超过 4 次,然后它失败,您必须 'cool off'一会儿。

总的来说,我对 programming/Android 很陌生 - 一旦我学到新东西,我就会意识到我实际上知道的很少,所以如果他们是一个更好的解决方案,那么使用 Drive API(而不是 REST API)我非常欢迎它。

DriveApi#requestSync 将允许您从服务器向设备请求 "sync down"。这样,在第二台设备上您应该能够看到从第一台设备上传的内容。然而,请求同步的调用是有速率限制的(每台设备),以避免滥用并保证 Drive API 合理使用数据量。理想情况下,您应该只在需要时才调用请求同步。无法提高速率限制。

关于上传完成,在提交上传后,你不应该使用请求同步,因为那对你没有帮助(它只同步不同步)。实际上传将尽快进行(基于设备的连接性和您的应用通过 DrivePreferencesApi 指定的首选项,默认情况下不受限制)。

如果您想知道实际上传发生的时间,可以使用CompletionEvents。通过这种方式,您可以更深入地了解实际情况来测试您的应用。