Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Uber API沙盒请求状态未正确更新_Ios_Swift_Uber Api - Fatal编程技术网

Ios Uber API沙盒请求状态未正确更新

Ios Uber API沙盒请求状态未正确更新,ios,swift,uber-api,Ios,Swift,Uber Api,我正在用Swift构建一个iOS应用程序,它使用Uber API ride request端点。使用沙盒时,我无法正确更改骑乘请求状态。我试着用Uber在他们的文档中的curl命令更新它,它似乎被Uber正确地接收到(我没有收到错误回复)。然而,在我的应用程序中,当我进行另一次状态呼叫时,它不会从处理更改 当前,当我将请求发布到https://sandbox-api.uber.com/v1/requests我得到下面的回复,请注意状态为已接受 Prepare to make request -&

我正在用Swift构建一个iOS应用程序,它使用Uber API ride request端点。使用沙盒时,我无法正确更改骑乘请求状态。我试着用Uber在他们的文档中的curl命令更新它,它似乎被Uber正确地接收到(我没有收到错误回复)。然而,在我的应用程序中,当我进行另一次状态呼叫时,它不会从
处理更改

当前,当我将请求发布到
https://sandbox-api.uber.com/v1/requests
我得到下面的回复,请注意状态为
已接受

Prepare to make request -> <p2_OAuth2.OAuth2Request: 0x7fb89a854e50> { URL: https://sandbox-api.uber.com/v1/requests }
Result -> {
  destination =     {
    latitude = "37.393913269";
    longitude = "-122.0800018311";
  };
  driver =     {
    name = John;
    "phone_number" = "(555)555-5555";
    "picture_url" = "https://d1a3f4spazzrp4.cloudfront.net/uberex-sandbox/images/driver.jpg";
    rating = "4.9";
  };
  eta = 1;
  location =     {
    bearing = "-150";
    latitude = "37.33233141";
    longitude = "-122.0312186";
  };
  pickup =     {
    eta = 1;
    latitude = "37.33233141";
    longitude = "-122.0312186";
  };
  "request_id" = "39d76708-3a26-4fb7-bb0f-31f37c931a0b";
  status = accepted;
  "surge_multiplier" = 1;
  vehicle =     {
    "license_plate" = "UBER-PLATE";
    make = Toyota;
    model = Prius;
    "picture_url" = "https://d1a3f4spazzrp4.cloudfront.net/uberex-sandbox/images/prius.jpg";
  };
}
这就是奇怪的部分。我现在得到的响应是
处理
。请注意,两个请求中的行驶请求ID相同。我使用NSTimer每5秒调用一次此函数,每次调用都会得到与下面相同的响应。是
nsurnsursession
缓存一些东西,因此我得到了下面的旧响应

requestID is -> 39d76708-3a26-4fb7-bb0f-31f37c931a0b
{
  driver = "<null>";
  eta = "<null>";
  location = "<null>";
  "request_id" = "39d76708-3a26-4fb7-bb0f-31f37c931a0b";
  status = processing;
  "surge_multiplier" = 1;
  vehicle = "<null>";
}

有没有其他人遇到过优步沙箱不可靠的问题?2015年4月,我使用Ruby开发了一个应用程序,沙盒运行得非常好。我认为这可能是我迅速实施的一个方面

是我请求的缓存策略导致我看到上面描述的不一致的响应。为了修复此问题,我在请求中添加了一个缓存策略
ReloadIgnoringCacheData
。我现在可以向Uber的沙箱发送Curl put,更新骑乘请求的状态,并使用正确的状态更新我的重复功能

完整请求如下:

class func rideStatus(uberRequestId:String, completion: (status: String) -> Void) {

  var status:String = ""

  let urlPath = "https://sandbox-api.uber.com/v1/requests/\(uberRequestId)"
  let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

  guard let endpoint = NSURL(string: urlPath) else { print("Error creating endpoint");return }
  let request = appDelegate.oauth.request(forURL: NSURL(string:urlPath)!)
  request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
  request.HTTPMethod = "GET"

  // Added this line to set request policy
  request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

  NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) -> Void in
    do {
        guard let dat = data else { throw JSONError.NoData }

        let result = try NSJSONSerialization.JSONObjectWithData(dat, options: NSJSONReadingOptions.MutableContainers)

        print(result)

        //set status
        status = result["status"] as! String

        print("found status...returning it back -> \(status)")
        completion(status: "\(status)")

    } catch let error as JSONError {
        print(error.rawValue)
        print("ERROR NEEDS TO BE HANDLED. NO RETURN FROM UBER API")
    } catch {
        print(error)
        print("ERROR NEEDS TO BE HANDLED. NO RETURN FROM UBER API")
    }
  }.resume()

}

我花了一些时间阅读NSURL请求,默认策略是缓存它们。我想我需要将appDelegate中的策略更新为
NSURLRequestReloadIgnoringLocalCacheData
。如果它正在缓存请求,这就解释了我在优步沙箱环境中看到的许多奇怪之处。我将尝试一下,并将向您汇报。
curl -X "PUT" "https://sandbox-api.uber.com/v1/sandbox/requests/39d76708-3a26-4fb7-bb0f-31f37c931a0b" \
  -H "Authorization: Bearer RYV7mXXXXXXXXXXXXXXXXXXXXXyzLw" \
  -H "Content-Type: application/json"\
  -d '{"status":"accepted"}'
class func rideStatus(uberRequestId:String, completion: (status: String) -> Void) {

  var status:String = ""

  let urlPath = "https://sandbox-api.uber.com/v1/requests/\(uberRequestId)"
  let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

  guard let endpoint = NSURL(string: urlPath) else { print("Error creating endpoint");return }
  let request = appDelegate.oauth.request(forURL: NSURL(string:urlPath)!)
  request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
  request.HTTPMethod = "GET"

  // Added this line to set request policy
  request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

  NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) -> Void in
    do {
        guard let dat = data else { throw JSONError.NoData }

        let result = try NSJSONSerialization.JSONObjectWithData(dat, options: NSJSONReadingOptions.MutableContainers)

        print(result)

        //set status
        status = result["status"] as! String

        print("found status...returning it back -> \(status)")
        completion(status: "\(status)")

    } catch let error as JSONError {
        print(error.rawValue)
        print("ERROR NEEDS TO BE HANDLED. NO RETURN FROM UBER API")
    } catch {
        print(error)
        print("ERROR NEEDS TO BE HANDLED. NO RETURN FROM UBER API")
    }
  }.resume()

}