2016-06-01 5 views
0

Ich habe eine Parse-App, die zwei grundlegende Objekte hat. Das erste Objekt "Benutzer" hat eine Eigenschaft namens "location", die einen GeoPoint speichert.Parse Cloud Code GeoPoint

Das zweite Objekt ist "Sichtung", die eine "Standort" -Eigenschaft mit einem GeoPoint hat.

In meinem Cloud-Code habe ich erfolgreich eine Aftersave-Funktion auf das "Sighting" -Objekt eingeführt, so dass eine Push-Benachrichtigung an alle gesendet wird, sobald eine Sichtung gespeichert wurde.

Ich versuche jedoch, nur diese Benutzer in einem bestimmten Bereich zu senden.

Ich habe query.withinKilometeres gefunden, aber ich kann nicht verstehen, wie alle Benutzer zu vergleichen. "Locations" und nehmen Sie das gespeicherte Objekt "Location" als Basis. Danach senden Sie allen zurückgegebenen Benutzern einen Push.

Der Cloud-Code ist mir völlig fremd, also wird jede Hilfe geschätzt.

Dank

James

Antwort

0

Das Ziel von Push ist _Installation. In Ihrer Frage sollten Sie einen Zeiger 'Benutzer' für verwandte currentUser des Geräts pflegen.

//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); 
    }); 

} 

Es gibt eine Einschränkung von matchesQuery. In diesem Fall können Sie nicht mehr als 1000 Benutzer senden (um verwandte Installationen zu erhalten). So

Ich schlage vor, Sie stellen Informationen über den Standort in _Installation, und es mehr Sinn machen (Ihr Benutzer kann mehrere Geräte haben, aber Benutzer können nicht auf 2 Plätze aufgeteilt)

+0

Wow danke. Parsen der Cloud ist schwieriger als ich es erwartet hätte, würde dies effektiv einen Push zu jeder Installation innerhalb von 1km vom Zielort senden? – user3642005

+0

Die Leistung hängt von Ihrem Design und den Ergebnisgrößen ab. Die Abfrageleistung ist einer der wichtigsten Punkte des Push. (Aber manchmal Parse.com Verzögerungen können 1 ~ 30 min drücken) – ChunTingLin

Verwandte Themen