【问题标题】:How to track URLSessionTask after Alamofire retries the requestAlamofire重试请求后如何跟踪URLSessionTask
【发布时间】:2018-10-28 19:39:06
【问题描述】:

我们正在使用 Alamofire 4 并希望将 URLSessionTasks 与数据库中的实体进行匹配。

我们首先使用URLSessionTasktaskDescription 字段将数据库实体的UUID 放在那里,但后来发现Alamofire 在请求重试时创建了一个新任务,并且该字段没有被复制。 taskIdentifier 也会随着每个新任务的创建而变化,而且似乎没有办法在 Alamofire 中跟踪 taskIdentifier 的变化。

是否有任何其他技术可以匹配数据库或文件中的任务和实体?如果后台上传请求成功,最终目标是删除文件+实体。这可能会在应用程序终止后发生,因此我们目前将信息存储在数据库中。

【问题讨论】:

    标签: alamofire nsurlsession nsurlsessiondatatask nsurlsessionuploadtask


    【解决方案1】:

    假设 AlamoFire 没有做一些疯狂的事情,你应该能够做这样的事情:

    NSString *const identifierProperty = @"com.you.yourProduct.requestID";
    NSString *myIdentifier = [NSUUID UUID].UUIDString;
    [NSURLProtocol setProperty:myIdentifier
                         inKey:identifierProperty
                      inRequest:theURLRequest];
    

    然后,稍后,将其取回:

    NSString *requestID = [NSURLProtocol propertyForKey:identifierProperty
                                              inRequest:theURLRequest];
    

    为 Objective-C 道歉,但它应该可以轻松转换为 Swift。

    完成此操作后,无论何时复制请求,都应复制该属性,就像请求中的任何一等属性一样。您甚至可以考虑在 NSURLRequest 上创建一个类别,以将基础值公开为实际的原生属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 2017-08-10
      • 2010-11-04
      • 2018-09-23
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多