2015-10-16 210 views
0

我正在嘗試向特定設備發送推送通知,但如果我發送到某個頻道,我只能使其工作。解析iOS:向特定人員/設備發送推送通知

「userQuery.countObjects」正在返回1個用戶發現,所以我不知道什麼是錯,幫助!

這裏是我的代碼:

   PFUser *user1= [friendUsers objectAtIndex:0]; 

       // Associate the device with a user 
       PFInstallation *installation = [PFInstallation currentInstallation]; 
       installation[@"user"] = [PFUser currentUser]; 
       [installation saveInBackground]; 

       PFQuery *userQuery = [PFUser query]; 
       [userQuery whereKey:@"fbId" equalTo:user1[@"fbId"]]; 
       userQuery.limit = 1; 

       NSLog(@"cnt=%d", userQuery.countObjects); 

      // Find devices associated with these users 
      PFQuery *pushQuery = [PFInstallation query]; 
      [pushQuery whereKey:@"user" matchesQuery:userQuery]; 

      // Send push notification to query 
      PFPush *push = [[PFPush alloc] init]; 
      [push setQuery:pushQuery]; // Set our Installation query 
      [push setData:data]; 
      [push sendPushInBackground]; 

解析推儀表板顯示了我這個,我已刪除了ID

PUSH ID 
dkfo3WhNod 

TARGETING 
user advanced operator ($inQuery {"className"=>"_User", "limit"=>"1", "where"=>{"fbId"=>"xxxx"}}) 
SENDING TIME 
October 16th, 2015 at 4:37 PM 

EXPIRATION 
None 

FULL TARGET 
{ 
"user": { 
    "$inQuery": { 
    "className": "_User", 
    "limit": "1", 
    "where": { 
    "fbId": "xxx" 
    } 
    } 
    } 
} 

FULL DATA 
{ 
    "alert": "Hi", 
    "badge": "Increment", 
    "sound": "hi.wav" 
} 
+0

http://stackoverflow.com/questions/27690215/sending-push-notification-to-all - 用戶在查詢 –

+0

@NicolasS良好的信息,但不是問題的根源。安裝查詢,在這種情況下稱爲'pushQuery',正在設置 – Russell

+0

奇怪的是,這段代碼現在工作正常! – cal

回答

0

您在installation對象與關聯是在正確的軌道上他們各自的用戶進行定位,但我認爲有些用戶通過fbId查詢出錯了。

NSLog(@"cnt=%d", userQuery.countObjects);返回一個不是因爲有一個用戶找到(查詢永遠不會執行),而是因爲它計數單個查詢對象。

仔細檢查用戶查詢是否正在返回您認爲的內容。分別執行查詢並打印結果。

另外,它看起來像你已經有用戶數組friendUsers。由於您已經擁有指針,因此不需要單獨的用戶查詢。

如果您想發送推送通知所有用戶在陣列中,請嘗試以下

// Find devices associated with these users 
PFQuery *pushQuery = [PFInstallation query]; 
[pushQuery whereKey:@"user" containedIn:friendUsers]; 

// Send push notification to query 
PFPush *push = [[PFPush alloc] init]; 
[push setQuery:pushQuery]; // Set our Installation query 
[push setData:data]; 
[push sendPushInBackground]; 

同樣,如果你只關心第一個用戶,只需使用whereKey:@"user" equalTo:[friendUsers objectAtIndex:0]

作爲有用的提示,您還需要將盡可能多的邏輯卸載到雲代碼。而不是使用戶關聯的客戶端,你可以在雲代碼beforeSave功能檢查了這一點下面

// Make sure all installations point to the current user 
Parse.Cloud.beforeSave(Parse.Installation, function(request, response) { 

    Parse.Cloud.useMasterKey(); 
    if (request.user) { 
     request.object.set('user', request.user); 
    } else { 
     request.object.unset('user'); 
    } 
    response.success(); 
}); 
+0

謝謝你,原來的代碼現在工作正常! – cal

相關問題