Как написать Geo-запросы с прослушивателями событий и обратным вызовом, используя GeoFireStore - PullRequest
0 голосов
/ 27 марта 2020

Пример сценария:

Допустим, в приложении есть два пользователя с именами A и B. Пользователь B находится на расстоянии 5 км от пользователя A. Пользователь A может видеть местоположение пользователя B, поскольку он находится с радиус 10 км от пользователя A. пользователь B всегда меняет свое местоположение, и пользователь A должен видеть в приложении измененное местоположение пользователя B в реальном времени.

Приложение использует карты Google и Google Firestore для сохранения данных о местонахождении этих пользователей.

Я написал код, позволяющий пользователям перемещаться вокруг пользователя А., когда он двигается.

Вот и все

const updateUserLocation = () => {
    const coordinates = new Firebase.firestore.GeoPoint(region.latitude, region.longitude)
    geocollection.doc(store.user.uid).set({
        name: store.displayName,
        uid: store.user.uid,
        avatarUrl: store.photoURL,
        score: 100,
        coordinates
    }, { merge: true }).then((docRef) => {

        const center = new Firebase.firestore.GeoPoint(region.latitude, region.longitude)
        const query = geocollection.near({ center, radius: 10 });
        query.get().then((querySnapshot) => {
            let nearByContact = []
            // All GeoDocument returned by GeoQuery, like the GeoDocument added above
            querySnapshot.docChanges().forEach((change) => {
                nearByContact.push(change.doc)
            })
            setNearByUsers(nearByContact)
        })
    })
}

Но я хочу функцию, которая возвращает местоположение пользователя Б всякий раз, когда пользователь B меняет (документ пользователя B изменяется в firesotre, когда он перемещается), его местоположение в пределах заданного радиуса для пользователя A.

Я видел, что это может быть достигнуто с библиотекой firebase / geofire- js как у них есть ready, key_entered, key_exited и key_moved GeoQuery.on eventType и обратный вызов. Но он поддерживает только Firebase Databse. Я хочу добиться этого с помощью Firestore.

...