2013-03-26 47 views
2

我正在使用Core API将Dropbox与iOS应用程序集成。我能够验证一个帐户,并成功上传文件。Dropbox - 应用程序文件夹已删除 - 获取NSURLErrorRequestBodyStreamExhausted错误 - iOS

但是说认证后,用户从收件箱帐户删除应用程序文件夹,或通过Dropbox设置卸载应用程序。

之后,如果我尝试上载文件,整个文件被上传根据标准(进度达到从0到1),然后我收到错误代码-1021其对应于NSURLErrorRequestBodyStreamExhausted错误,并且也没有错误代码401https://www.dropbox.com/developers/core/api中的API错误。
问题在于,iOS 6的设备上发生这种情况,即使帐户本身也没有关联。 我有一个设备与iOS 5,其中获取错误代码401(但也是在整个文件已上传后),这是验证错误(错误代码401),如核心api文档中所述。而且帐户本身没有链接。

更新:该bug已在最新的Dropbox核心api Build中解决。

+0

没有ü解决这一问题? – 2013-04-10 17:07:54

+0

我在dropbox论坛上提出过同样的问题。他们说,框架本身存在一些问题,并且这个问题只在上传文件时才会出现。所以他们建议在登录后立即加载元数据,以确认是否提供了认证。 – neeraj 2013-04-10 20:11:32

+0

在旁注中,我在应用程序中使用了“Google Drive”和“Android”。我的应用现在会被拒绝吗?我已经提交了 – 2013-04-12 17:08:51

回答

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

这可以做到,但它只发生一次应用开始。如果在应用程序启动后该应用程序未链接,该怎么办?然后又会发送错误的错误代码。我们应该在每次上传之前做这样的事情,我没有看到只做一次这一点。重点是提出一些确认该帐户未被链接的查询。 – neeraj 2013-04-15 05:33:05

+0

因此,@neeraj在我的应用程序中,作为临时解决方案(直到SDK被更新),如果我上传文件时出现错误,我将其作为帐户未链接的方式处理。另一种解决方案是,如果在上传文件时返回错误,请立即请求用户帐户信息以检查其是否未链接。如果您取回401,则该人员不再链接,如果您取回用户信息,则由于其他原因上传失败,并提示用户再次尝试。 – AlBeebe 2013-04-15 19:30:24

+0

是的,可以做到。将-1021错误代码视为无授权错误代码。或者,您可以使用此https://forums.dropbox.com/topic.php?id=98962#post-538908。 – neeraj 2013-04-16 08:20:41