2016-03-22 19 views
0

Parse veritabanımda bir gönderi hoşlanıyorsa, yazara bulut koduyla bir gönderme göndermek istiyorum.
Belirli kullanıcılara push gönderebilmek için, tüm yüklemeler geçerli kullanıcının objectId numarasını depolar. Tek bir itme yazara gönderilir: sevdim yayını gönderen bulmak için, ben bu iyi çalışır sorguOlası Ayrıştırma eşleşmeleriKeyInQuery

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

kullanın.

Şimdi bu itmeyi yalnızca yazarın bu tür itmeleri etkinleştirilmiş olması durumunda göndermek istiyorum. Böylece, her kullanıcı farklı itmeler için etkinleştirme işaretleriyle bir basma ayarları dizisini saklar.

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

Bu sorgu doğru etkin iter böyle olan tüm kullanıcıları döndürür:
Şimdi etkinleştirilen iter olan tüm kullanıcılar için başka bir sorgu kullanın.

Sonunda, etkinleştirilmiş olan kullanıcılar için bu sorguya göre, yazarı olan yüklemeler için sorguyu geçerli kullanıcı olarak kısıtlamak istiyorum. Bu şu şekilde yapılır:

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

3 hat olmadan eski sorgu 1 kullanıcı, ek kısıtlama (matchesKeyInQuery) ile yeni bir sorgu döndürür beri aynı kullanıcıyı dönmelidir, yazar etkin iter beri.
Ancak 2 kullanıcı, yazar ve yayını beğenen başka bir kullanıcı döndürür.

Anlayışım için, bir sorguya tüm kısıtlamalar ANDed olduğundan, bu bir Ayrıştırma Hatası gibi görünüyor.
Herhangi bir fikir, belki bir çözüm için? Var "kPFObjectId" öğesinin "kullanıcı" olarak değiştirilebilmesi için

cevap

0

. Varsayılan ayrıştırma Yükleme "kPFObjectId" değil "user" adlı işaretçi ile birlikte gelir. Ben Im aynı yöntemi ("matchesKeyInQuery") kullanılarak ve iyi çalıştığını söyleyebilirim: Cevabınız için

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

teşekkür ederiz. Ancak, benim sorunum 'pushEnabledUserQuery 'sadece 1 kullanıcı ** döndürürken,' matchKeyInQuery (…,…, pushEnabledUserQuery) 'döndürür ** 2 kullanıcı ** döndürüyor. Ve bu benim anlayışıma göre, "kitsKeyInQuery" eşleşmeleri, 1. sorgudaki sonuçları filtrelemeli ve daha fazla sonuç döndürmemelidir. –

+0

no problem, bu fonksiyonun (matchKeyInQuery) benim için iyi çalıştığını söylediğim gibi, muhtemelen kodunuzda başka bir hata var. Birçok diğer ppl için çalışıyorsa, bu işlevde bir hata olduğunu düşünmüyorum. ama herşeyin bitebileceğini biliyorsun :) – dang