firebase http 函数如何 return 快照到 swift 应用程序

How firebase http function to return snapshot to swift app

我有一个 firebase 函数,它通过 geohash 搜索半径执行查询和过滤。它正在工作,但我正在 returning Json 而我真正想做的是 return 快照。我是 firebase 函数的新手。

这是我的 firebase 函数

var GeoFirestore = require('geofirestore').GeoFirestore;

exports.geoQueryWitningRadius = functions.https.onRequest(async (req, res) => {

 const data = req.body;
 const lat = data.lat;
 const lon = data.lon;
 const radius = data.radius;

 const firestore = admin.firestore();
 const geofirestore = new GeoFirestore(firestore);
 const geocollection = geofirestore.collection('pickups');
 const query = geocollection.near({ center: new admin.firestore.GeoPoint(lat, lon), radius: 
 radius });
 await query.get().then((snapshot) => { 
    return res.send(snapshot)
 }).catch(error => {
     console.log('error', error); 
 });

});

这是我在 swift

中的 http 请求
static func getGeoHashPickups(radius: Int, completion: @escaping([String: Any]?, String?) -> Void)  { //url, Error
    
    let parameters : [String : Any] = [
        "lat" : UserService.user.lat,
        "lon" : UserService.user.lon,
        "radius" : radius
    ]
    let url = "https://us-central1-app-request-ect"        
    AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON { response in
        switch response.result {
            case .success(let dict):
                guard let dictionary = dict as? [String : Any] else { return }
                completion(dictionary, nil)
            case .failure(let error):
                print(error.localizedDescription)
                completion(nil, error.localizedDescription)
        }
    }
}

如何将返回到前端的内容转换为快照?

Cloud Functions 无法发回 DocumentSnapshot,因为该类型不可序列化。并且无法在 Swift 代码中将 JSON 转换回 DocumentSnapshot

不过你得到的归根结底就是那个快照的数据,应该够用了。如果您在 return 编辑的数据中遗漏了某些内容,您还必须 return 从您的 Cloud Functions 代码中获取额外信息,以便 Swift 代码可以提取它。