我正在使用Core API将Dropbox与iOS应用集成。我可以验证帐户,并成功上传文件。
但是说,在身份验证后,用户会从保管箱帐户中删除应用文件夹,或通过保管箱设置卸载应用。
之后如果我尝试上传文件,整个文件上传(进度从0到1)然后我收到错误代码-1021
,对应NSURLErrorRequestBodyStreamExhausted
,根据{{3}}中的标准API错误,也不会出现错误代码401
问题是这种情况发生在iOS 6的设备上,即使帐户本身也没有取消链接。
我有一个iOS 5设备,它的错误代码为401
(但整个文件上传后也是如此),这是核心api文档中解释的身份验证错误(错误代码401)。并且该帐户自行取消关联。
更新:此错误已在最新的dropbox核心api Build中解决。
答案 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];
}
}