2016-03-22 18 views
0

私の解析データベースの投稿が好きな場合は、クラウドコード経由でプッシュを著者に送信したいと考えています。
特定のユーザーにプッシュを送信できるようにするには、すべてのインストールで現在のユーザーのobjectIdが保存されます。好きな投稿の著者を探すには、私はクエリを使用します。matchesKeyInQueryの構文解析バグ

var userWhosePostWasLikedQuery = new Parse.Query(Parse.Installation); 
userWhosePostWasLikedQuery.equalTo(kClassInstallationKeyCurrentUserId, userWhosePostWasLiked.id); 

これはうまくいきます:ワンプッシュが著者に送られます。

今私はこのプッシュが有効になっている場合にのみ、このプッシュを送信します。したがって、各ユーザは、異なるプッシュのイネーブルフラグを有するプッシュ設定アレイを記憶する。

const User = Parse.Object.extend(kClassUser); 
var pushEnabledUserQuery = new Parse.Query(User); 
pushEnabledUserQuery.equalTo(kClassUserKeyPushSettings, kPushNotificationTypePostLiked); 

このクエリは正しく有効にプッシュするように持っているすべてのユーザーを返します。
は、私は今、有効なプッシュを持つすべてのユーザーのために別のクエリを使用します。

最終的には、プッシュが有効になっているユーザーのこのクエリによって、現在のユーザーとして作成者のインストールのクエリを制約したいとします。これは、次のように行われます。

var userWhosePostWasLikedQuery = new Parse.Query(Parse.Installation); 
userWhosePostWasLikedQuery.equalTo(kClassInstallationKeyCurrentUserId, userWhosePostWasLiked.id); 
userWhosePostWasLikedQuery.matchesKeyInQuery(kClassInstallationKeyCurrentUserId, kPFObjectId, pushEnabledUserQuery); 

3行目のない古いクエリは1人のユーザーを返すので、著者が有効になってプッシュを持っているので、追加の制約(matchesKeyInQuery)を使用して新しいクエリは、同じユーザーを返す必要があります。
しかし、は、2人のユーザー、投稿者と投稿を好きな別のユーザーを返します。

これは、クエリに対するすべての制約がANDedであるため、これは解析のバグのように見えます。
考えられる解決策はありますか?

答えて

0

var "kPFObjectId"を "user"に変更する必要があります。 デフォルトの解析インストールには、 "kPFObjectId"ではなく "user"という名前のポインターがあります。 私はイムは、同じ方法(「matchesKeyInQuery」)を使用して、それがうまく機能していることを伝えることができます:あなたの答えのための

Parse.Cloud.define("sendPushForChat", function(request, response) { 
    var userId = request.params.userId; 
    var groupId = request.params.groupId; 

    var query = new Parse.Query('RecentActivity'); 
    query.equalTo('groupId',groupId); 
    query.include('user'); 
    query.notEqualTo('user', {__type: "Pointer", className: "_User", objectId: userId}); 

    var queryInstallation = new Parse.Query(Parse.Installation); 
    queryInstallation.matchesKeyInQuery('user', 'user', query); 

    var message = request.params.messageContent; 
    Parse.Push.send({ 
     where: queryInstallation, 
     data: { 
      alert: message, 
      badge: "Increment", 
      title: "מה נשמע?" 
     } 
    }, { 
     success: function() { 
      console.log("Push for chat was successful"); 
      response.success('Push for chat was successful'); 
     }, 
     error: function(error) { 
      console.error(error); 
      response.error('error'); 
     }, 
     useMasterKey:true, 
    }); 
}) 
+0

感謝を。しかし、私の問題は、私の 'pushEnabledUserQuery'は、** matchedKeyInQuery(...、...、pushEnabledUserQuery)が** 2ユーザー**を返すのに対し、**は1人のユーザー**を返します。 'matchesKeyInQuery'は最初のクエリの結果をフィルタリングし、より多くの結果を返さないため、これは私の理解では不可能です。 –

+0

問題はないので、私はこの関数(matchesKeyInQuery)は私のためにうまくいくと言っていますので、おそらくあなたのコードに他の間違いがあります。私は多くの他のpplのために働く場合、この関数にバグがあるとは思わないでしょう。しかし、あなたはすべてがhappendできることを知っている:) – dang