Google放置Web服务:如何在Swift 3中获得结果的下一页

我在iOS应用程序中使用Google Web Service API来查找用户位置附近的临终关怀位置。 我可以得到结果的第一页,但是使用pagetoken来检索结果的下一页却不成功。 以下是我的searchfunction。 任何帮助,我哪里去错了(从来没有使用URLSession之前)将不胜感激。

func performGoogleQuery(url:URL) { print("PERFORM GOOGLE QUERY") let task = URLSession.shared.dataTask(with: url, completionHandler: {(data, response, error) in if error != nil { print("An error occured: \(error)") return } do { let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any] // Parse the json results into an array of MKMapItem objects if let places = json?["results"] as? [[String : Any]] { print("Places Count = \(places.count)") // Returns 20 on first pass and 0 on second. for place in places { let name = place["name"] as! String print("\(name)") if let geometry = place["geometry"] as? [String : Any] { if let location = geometry["location"] as? [String : Any] { let lat = location["lat"] as! CLLocationDegrees let long = location["lng"] as! CLLocationDegrees let coordinate = CLLocationCoordinate2DMake(lat, long) let placemark = MKPlacemark(coordinate: coordinate) let mapItem = MKMapItem(placemark: placemark) mapItem.name = name self.mapitems.append(mapItem) } } } print("mapItems COUNT = \(self.mapitems.count)") // Remains at 20 after 2 passes. } // If there is another page of results, // configure the new url and run the query again. if let pageToken = json?["next_page_token"] { let newURL = URL(string: "https://maps.googleapis.com/maps/api/place/textsearch/json?pagetoken=\(pageToken)&key=\(self.googleAPIKey)") //print("PAGETOKENURL = \(newURL)") self.performGoogleQuery(url: newURL!) } }catch { print("error serializing JSON: \(error)") } }) task.resume() } 

更新(基于Dima的回应):更改self.performGoogleQuery(url:newURL!)

对此

 let when = DispatchTime.now() + 2 // change 2 to desired number of seconds DispatchQueue.main.asyncAfter(deadline: when) { self.performGoogleQuery(url: newURL!) } 

根据文件:

next_page_token的发布时间和发布时间之间有一个短暂的延迟。

我想你可能太快拿到下一页了。 尝试设置至less几秒的延迟,看看是否可以解决您的问题。

从我所看到的,我不认为你是要自动快速连续地获取页面。 他们似乎希望你让用户触发获取额外的内容。

您可以在原始查询之后最多请求两次新的页面。 每页结果都必须依次显示。 两个或多个search结果页面不应该作为单个查询的结果显示。