Wenn ein Beitrag in meiner Parse-Datenbank gefällt, möchte ich einen Push an den Autor über Cloud-Code senden.
Um Pushs an bestimmte Benutzer senden zu können, speichern alle Installationen die objectId
des aktuellen Benutzers. Um den Autor des geliebten Beitrags zu finden, verwende ich die AbfrageMöglicher Parse-Fehler in matchesKeyInQuery
var userWhosePostWasLikedQuery = new Parse.Query(Parse.Installation);
userWhosePostWasLikedQuery.equalTo(kClassInstallationKeyCurrentUserId, userWhosePostWasLiked.id);
Das funktioniert gut: Ein einziger Push wird an den Autor gesendet.
Jetzt möchte ich diesen Push nur senden, wenn der Autor solche Pushs aktiviert hat. So speichert jeder Benutzer ein Push-Settings-Array mit Aktivierungsflags für verschiedene Pushs.
Ich verwende jetzt eine weitere Abfrage für alle Benutzer, die solche Schübe aktiviert:
const User = Parse.Object.extend(kClassUser);
var pushEnabledUserQuery = new Parse.Query(User);
pushEnabledUserQuery.equalTo(kClassUserKeyPushSettings, kPushNotificationTypePostLiked);
Diese Abfrage korrekt liefert alle Benutzer, die solche haben drückt aktiviert.
Schließlich möchte ich die Abfrage für Installationen mit dem Autor als aktuellen Benutzer einschränken, durch diese Abfrage für Benutzer, die Pushs aktiviert haben. Dies wird in der folgenden Weise:
var userWhosePostWasLikedQuery = new Parse.Query(Parse.Installation);
userWhosePostWasLikedQuery.equalTo(kClassInstallationKeyCurrentUserId, userWhosePostWasLiked.id);
userWhosePostWasLikedQuery.matchesKeyInQuery(kClassInstallationKeyCurrentUserId, kPFObjectId, pushEnabledUserQuery);
Da die alte Abfrage ohne die 3. Zeile 1 Benutzer zurückgibt, die neue Abfrage mit der zusätzlichen Beschränkung (matchesKeyInQuery
) soll die gleichen Benutzer zurückgeben, da der Autor aktiviert drückt.
Aber gibt es 2 Benutzer, der Autor und ein anderer Benutzer, der den Beitrag mochte.
Meiner Ansicht nach sieht dies wie ein Parse-Fehler aus, da alle Einschränkungen für eine Abfrage ANDed sind.
Irgendwelche Ideen, vielleicht für einen Workaround?
Vielen Dank für Ihre Antwort. Mein Problem ist jedoch, dass meine 'pushEnabledUserQuery' nur einen Benutzer ** zurückgibt, während' matchesKeyInQuery (..., ..., pushEnabledUserQuery) '** 2 Benutzer ** zurückgibt. Und das ist meines Wissens unmöglich, da 'matchesKeyInQuery' die Ergebnisse der ersten Abfrage filtern sollte und keine weiteren Ergebnisse liefern sollte. –
kein Problem, so wie ich sagte, diese Funktion (matchesKeyInQuery) funktioniert gut für mich, so dass Sie wahrscheinlich einen anderen Fehler in Ihrem Code haben. Ich würde nicht denken, dass es einen Fehler in dieser Funktion gibt, wenn es für viele andere Leute funktioniert. aber du weißt, dass alles passieren kann :) – dang