Dropbox - App文件夹已删除 - 获取NSURLErrorRequestBodyStreamExhausted错误 - iOS

时间:2013-03-26 12:45:37

标签: ios dropbox

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

但是说,在身份验证后,用户会从保管箱帐户中删除应用文件夹,或通过保管箱设置卸载应用。

之后如果我尝试上传文件,整个文件上传(进度从0到1)然后我收到错误代码-1021,对应NSURLErrorRequestBodyStreamExhausted,根据{{​​3}}中的标准API错误,也不会出现错误代码401 问题是这种情况发生在iOS 6的设备上,即使帐户本身也没有取消链接。 我有一个iOS 5设备,它的错误代码为401(但整个文件上传后也是如此),这是核心api文档中解释的身份验证错误(错误代码401)。并且该帐户自行取消关联。

更新:此错误已在最新的dropbox核心api Build中解决。

1 个答案:

答案 0 :(得分:1)

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

将此添加到您初始化Dropbox的应用代理didFinishLaunchingWithOptions方法

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];
    }
}