El uso de consultas GeoFire en Swift no proporciona resultados útiles
Estoy bastante desesperado en este momento porque estoy tratando de usar GeoFire en mi base de datos Firebase para encontrar usuarios cercanos. Estoy bastante atrapado por dos días ahora. Busqué mucho en Google y stackoverflow e intenté todo lo que encontré allí, pero sin ningún éxito. Ahora mi última esperanza es crear este hilo yo mismo y espero que alguien pueda ayudarme.
Mi base de datos se ve más o menos así:
users
user_id1
email: [email protected]
username: xxx
user_id2
email: [email protected]
username: yyy
users_locations
user_id1
location
g: xxxx
l
0: 30.0000
1: 5.0000
user_id2
location
g: yyyy
l
0: 30.0010
1: 5.0010
No sé si es necesario guardar los datos de ubicación separados de los usuarios, pero también intenté guardarlos así con los mismos resultados, así que creo que no importa:
users
user_id1
email: [email protected]
username: xxx
location
g: xxx
l
0: 30.0000
1: 5.0000
Ahora el código que estoy usando:
Para escribir la ubicación en la base de datos, uso lo siguiente, que funciona bien:
let user = FIRAuth.auth()?.currentUser
let uid = user?.uid
let ref = FIRDatabase.database().reference()
let geofireRef = ref.child("users_locations")
let geoFire = GeoFire(firebaseRef: geofireRef.child(uid!))
geoFire?.setLocation(myLocation, forKey: "location")
Ahora trato de usar una consulta GeoFire para mostrarme a todos los usuarios en un radio definido que no imprime nada para este:
let ref = FIRDatabase.database().reference()
let geofireRef = ref.child("users_location")
let geoFire = GeoFire(firebaseRef: geofireRef)
let circleQuery = geoFire?.query(at: center, withRadius: 10)
circleQuery?.observe(.keyEntered, with: { (key: String?, location: CLLocation?) in
print("Key '\(key!)' entered the search are and is at location '\(location!)'")
})
Me di cuenta de que obtengo un resultado si voy con mi hijo uid real. Luego imprime la ubicación y la clave de mis usuarios reales, pero eso no es lo que quiero tener.
let geoFire = GeoFire(firebaseRef: geofireRef.child(uid!))
Entonces, quiero que GeoFire busque a través de mis UID en 'users_locations' y me devuelva todos los UID que estén en mi radio definido.
Para mí, parece que solo está buscando el niño llamado 'ubicación' en el niño definido en mi Referencia (ubicación_usuarios -> usuario_uid) y si intento consultar sobre 'ubicación_usuarios', no obtengo nada.
¿Qué estoy haciendo mal? ¿Cómo puedo hacer que la consulta busque referencia secundaria y devolverme el uid?