Разбор облачного кода GeoPoint

У меня есть приложение Parse, которое имеет два основных объекта. Первый объект "Пользователь" имеет свойство "Местоположение", в котором хранится GeoPoint.

Вторым объектом является "Sighting", у которого есть свойство "location" с GeoPoint.

В своем облачном коде я успешно ввел функцию после сохранения на объекте "Sighting", чтобы пуш-уведомление отправлялось всем после сохранения визирования.

Однако то, что я пытаюсь достичь, это только отправлять этих пользователей в пределах определенного диапазона.

Я нашел query.withinKilometeres, но я не могу понять, как сравнить все пользовательские "местоположения" и взять сохраненный объект "Местоположение" в качестве основы. После этого отправьте всем возвращенным пользователям пуш.

Облачный код для меня совершенно чужд, поэтому любая помощь приветствуется.

Спасибо

Джеймс

1 ответ

Цель push - _Installation. В вашем вопросе вы должны сохранить указатель 'user' для соответствующего currentUser устройства.

//afterSave of Sighting
var sighting = request.object;
//means created, not update
if(!sight.existed()){
    var location = sighting.get('location');
    var userQuery = new Parse.Query(Parse.User);
    //1 for example
    userQuery.withinKilometeres('location', 1);

    var query = new Parse.Query(Parse.Installation);
    query.matchesQuery('user', userQuery);

    Parse.Push.send({
        where:query,
        data:{
            alert: "this is msg",
            title: "this is title" 
        }
    },{useMasterKey:true})
    .then(function(){
        console.log('push done');
    }, function(error){
        console.error(error);
    });

}

Есть ограничение matchQuery. В этом случае вы не можете отправить более 1000 пользователей (для получения соответствующих установок).

Поэтому я предлагаю вам поместить информацию о местоположении в _Installation, и это имеет больше смысла (у вашего пользователя может быть несколько устройств, но пользователь не может разделиться на 2 места)

Другие вопросы по тегам