首次(通过ChangeResource)列出Drive文件夹的更改时,应使用什么页面令牌?

时间:2018-11-13 06:04:00

标签: c# google-api google-drive-api google-api-dotnet-client

可以说用户已经将文件(通过我的应用程序)同步到其云端硬盘文件夹。现在,他们在第二台设备上登录了我的应用,并准备首次同步文件。是否在初始同步过程中使用Changes API?

我问,因为使用Changes API需要StartPageToken,而StartPageToken要求之前已经进行了同步操作。如果用户是第一次在设备上同步数据,那么用户就不可能拥有StartPageToken。

Google的文档是个玩笑。他们不应该让我们在字里行间阅读并弄清楚这一点。我确定我可以煮出一些能“起作用”的东西,但是我怎么知道这是处理这一问题的“适当”且有效的方式呢?

public async Task<AccessResult> GetChangesAsync(CancellationToken cancellationToken, string fields = "*")
{
    ChangesResource.ListRequest listRequest = new ChangesResource.ListRequest(DriveService, startPageToken)
    {
        Spaces = Folder_appDataFolder,
        Fields = fields + ", nextPageToken",
        IncludeRemoved = true,
        PageSize = 20
    };

    ChangeList changeList = await listRequest.ExecuteAsync(cancellationToken);
}

在这里,我希望第一次开始同步用户的内容,因此页面令牌甚至没有意义,因为第一次同步期间,您的目标是获取所有用户数据。从那时起,您只希望同步任何进一步的更改。

我想到的一种方法是简单地使用ListRequest列出所有用户数据并以这种方式开始下载文件。然后,我可以简单地请求一个起始页令牌并将其存储在以后尝试进行同步的过程中使用...

...但是,如果在最初下载用户文件(例如800个文件)期间发生错误,并且ListRequest在文件423上失败,该怎么办?因为在紧急情况下我无法在ListRequest的中间获取StartPageToken进行存储,所以我是否必须重新启动并重新下载全部800个文件,而不是从文件423开始?

1 个答案:

答案 0 :(得分:0)

首次执行changes.list时,您应该致电getStartPageToken,这将返回您可以用来获取更改列表的页面令牌。如果是第一次,那当然不会改变。

如果用户从多个设备上使用您的应用程序,那么逻辑上的做法是,当用户第一次在第一次欺骗中启动该应用程序时,将页面令牌保存在中央位置。这样一来,您便可以在用户可能选择使用的所有其他设备上使用相同的令牌。

这可以在您自己的服务器上,甚至可以在用户app data folder on drive

我不是确切的用户,您的应用程序在做什么,但是我真的不认为您应该下载用户文件,除非他们尝试访问它。对于您的应用程序,我可以认为没有逻辑原因可以存储用户驱动器帐户的镜像。在需要时访问他们需要的数据。您不需要一切。再次,我不完全知道您的应用程序做什么。