2

我正在使用 Core API 将 Dropbox 与 iOS 应用程序集成。我能够验证帐户,并成功上传文件。

但是说在身份验证后,用户从 Dropbox 帐户中删除应用程序文件夹,或者通过 Dropbox 设置卸载应用程序。

之后,如果我尝试上传文件,则整个文件都会被上传(进度从 0 到 1),然后我收到一个错误代码,错误代码-1021对应于NSURLErrorRequestBodyStreamExhausted,并且根据https://401中的标准 API 错误也没有错误代码www.dropbox.com/developers/core/api
问题是这发生在装有 iOS 6 的设备上,即使该帐户本身也没有取消链接。我有一台装有 iOS 5 的设备,它得到一个错误代码401(但在整个文件上传之后也是如此),这是核心 api 文档中解释的身份验证错误(错误代码 401)。该帐户会自行取消关联。

更新:此错误已在最新的 dropbox core api Build 中得到解决。

4

1 回答 1

1

当您的应用启动时,以下代码将立即请求用户的 Dropbox 帐户信息(如果他们当前已关联)。如果用户删除了应用程序文件夹,或从 Dropbox.com 撤消了对您应用程序的访问权限,那么当您的应用程序启动时,该用户将立即取消链接。我认为这是一个很好的做法,无论 SDK 在上传文件时是否存在无法返回 401 的错误。

didFinishLaunchingWithOptions将此添加到您初始化 Dropbox的应用委托方法中

DBSession* dbSession = [[[DBSession alloc] initWithAppKey:DROPBOX_KEY appSecret:DROPBOX_SECRET root:kDBRootAppFolder] autorelease];
[DBSession setSharedSession:dbSession];
if ([[DBSession sharedSession] isLinked]) {
    DBRestClient* dbRestClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
    [dbRestClient setDelegate:self];
    [dbRestClient loadAccountInfo];
}

然后将以下方法添加到您的应用委托

- (void)restClient:(DBRestClient*)client loadAccountInfoFailedWithError:(NSError*)error {
    if (error.code == 401) {
        [[DBSession sharedSession] unlinkAll];
    }
}
于 2013-04-14T23:29:51.633 回答