查询 PFInstallation 并从云代码添加到频道键
Query PFInstallation and add to channels key from cloud code
我正在尝试将订阅添加到特定 PFUser 的所有 PFInstallations(对于一个人在 iPhone iPad 上使用相同登录的情况等)。我有一个 table 视图,查看他们所有也在使用该应用程序的 Facebook 好友。在选择行中的朋友时,我希望它获取我的 objectId 并查询所有 PFInstallations 以获取键 usersObjectId 与 PFUser objectId 匹配的所有 PFInstallations 的数组。然后,我可以为每个 PFInstallations 的通道添加一个值。我有:
FriendArray *job = self.jobsArray[indexPath.row];
PFQuery *query = [PFUser query];
//job.facebookid is the Facebook id for that particular user
//each PFUser has a fbId and for those who logged in with Facebook, their Facebook ID is stored here
[query whereKey:@"fbId" equalTo:job.facebookid];
PFUser *user = (PFUser *)[query getFirstObject];
//This gives me the PFUser whose fbId value matches the Facebook id for the row that was selected
NSString *subscription = [@"User_" stringByAppendingString:user.objectId];
PFUser *me = [PFUser currentUser];
PFQuery *pushQuery = [PFInstallation query];
//Trying to get all PFInstallations that match the current user's usersObjectId, so I can add the value to each channel
[pushQuery whereKey:@"usersObjectId" equalTo:[me objectId]];
PFInstallation *allInstallations = (PFInstallation *)[pushQuery findObjects];
[allInstallations addUniqueObject:subscription forKey:@"channels"];
不过,它告诉我不能直接查询 PFInstallation。我怎样才能在云代码中做同样的事情?
看来您只能修改当前设备上的一个 PFInstallation,而不能全部来自一个用户或云端。
这是解析时显示的代码:
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation addUniqueObject:@"Giants" forKey:@"channels"];
[currentInstallation saveInBackground];
也许解决方法是添加一个您订阅每个用户的新默认频道,如果他们应该订阅新频道,该频道会向他们发送通知?我不确定这是否是最佳解决方案,因为我不知道您在什么情况下执行此订阅。
好的,经过几个小时的工作,我终于想通了,并认为 post 解决方案。如果您想编辑某种类型的所有 PFInstallation 条目(我通过始终将我的 PFUser objectId 作为 PFInstallation 的新值来做到这一点),在这里。
云代码使用:
Parse.Cloud.define("subscribingAll", function(request, response) {
Parse.Cloud.useMasterKey();
var usersObjectId = request.params.usersObjectId;
var newSubscription = request.params.newSubscription;
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo("usersObjectId", usersObjectId);
pushQuery.find({
success: function(results) {
response.success(results);
},
error: function() {
response.error("failed");
}
});
});
然后,在您的应用程序上,您需要一个 PFCloud 调用来处理所有这些。
[PFCloud callFunctionInBackground:@"subscribingAll"
withParameters:@{@"usersObjectId": [me objectId], @"newSubscription": subscription}
block:^(NSArray *theCount, NSError *error) {
if (!error) {
int i;
for (i = 0; i < [theCount count]; i++) {
PFInstallation *change = [theCount objectAtIndex:i];
[change addUniqueObject:subscription forKey:@"channels"];
[change saveInBackground];
}
}
}];
云代码returns 一个数组,其中每个对象都是来自 PFInstallation 的与查询匹配的数据。您需要通过一个循环 运行 ,并将每个 objectAtIndex 设置为一个 PFInstallation。从那里,只需执行一个简单的 addUniqueObject,瞧,你就完成了。
就我而言,登录时,它将 objectId 复制到我为 PFInstallation 创建的名为 usersObjectId 的键。因此,我登录 iPhone,然后再次登录 iPad,我有 2 个不同的 PFInstallations,但都具有相同的 usersObjectId。 运行 所有这些代码允许我隔离我所有的安装并编辑它们,特别是与我用于订阅 Facebook 好友的代码一起使用,这样当他们 post 有东西时我可以得到通知.
我正在尝试将订阅添加到特定 PFUser 的所有 PFInstallations(对于一个人在 iPhone iPad 上使用相同登录的情况等)。我有一个 table 视图,查看他们所有也在使用该应用程序的 Facebook 好友。在选择行中的朋友时,我希望它获取我的 objectId 并查询所有 PFInstallations 以获取键 usersObjectId 与 PFUser objectId 匹配的所有 PFInstallations 的数组。然后,我可以为每个 PFInstallations 的通道添加一个值。我有:
FriendArray *job = self.jobsArray[indexPath.row];
PFQuery *query = [PFUser query];
//job.facebookid is the Facebook id for that particular user
//each PFUser has a fbId and for those who logged in with Facebook, their Facebook ID is stored here
[query whereKey:@"fbId" equalTo:job.facebookid];
PFUser *user = (PFUser *)[query getFirstObject];
//This gives me the PFUser whose fbId value matches the Facebook id for the row that was selected
NSString *subscription = [@"User_" stringByAppendingString:user.objectId];
PFUser *me = [PFUser currentUser];
PFQuery *pushQuery = [PFInstallation query];
//Trying to get all PFInstallations that match the current user's usersObjectId, so I can add the value to each channel
[pushQuery whereKey:@"usersObjectId" equalTo:[me objectId]];
PFInstallation *allInstallations = (PFInstallation *)[pushQuery findObjects];
[allInstallations addUniqueObject:subscription forKey:@"channels"];
不过,它告诉我不能直接查询 PFInstallation。我怎样才能在云代码中做同样的事情?
看来您只能修改当前设备上的一个 PFInstallation,而不能全部来自一个用户或云端。
这是解析时显示的代码:
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation addUniqueObject:@"Giants" forKey:@"channels"];
[currentInstallation saveInBackground];
也许解决方法是添加一个您订阅每个用户的新默认频道,如果他们应该订阅新频道,该频道会向他们发送通知?我不确定这是否是最佳解决方案,因为我不知道您在什么情况下执行此订阅。
好的,经过几个小时的工作,我终于想通了,并认为 post 解决方案。如果您想编辑某种类型的所有 PFInstallation 条目(我通过始终将我的 PFUser objectId 作为 PFInstallation 的新值来做到这一点),在这里。
云代码使用:
Parse.Cloud.define("subscribingAll", function(request, response) {
Parse.Cloud.useMasterKey();
var usersObjectId = request.params.usersObjectId;
var newSubscription = request.params.newSubscription;
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo("usersObjectId", usersObjectId);
pushQuery.find({
success: function(results) {
response.success(results);
},
error: function() {
response.error("failed");
}
});
});
然后,在您的应用程序上,您需要一个 PFCloud 调用来处理所有这些。
[PFCloud callFunctionInBackground:@"subscribingAll"
withParameters:@{@"usersObjectId": [me objectId], @"newSubscription": subscription}
block:^(NSArray *theCount, NSError *error) {
if (!error) {
int i;
for (i = 0; i < [theCount count]; i++) {
PFInstallation *change = [theCount objectAtIndex:i];
[change addUniqueObject:subscription forKey:@"channels"];
[change saveInBackground];
}
}
}];
云代码returns 一个数组,其中每个对象都是来自 PFInstallation 的与查询匹配的数据。您需要通过一个循环 运行 ,并将每个 objectAtIndex 设置为一个 PFInstallation。从那里,只需执行一个简单的 addUniqueObject,瞧,你就完成了。
就我而言,登录时,它将 objectId 复制到我为 PFInstallation 创建的名为 usersObjectId 的键。因此,我登录 iPhone,然后再次登录 iPad,我有 2 个不同的 PFInstallations,但都具有相同的 usersObjectId。 运行 所有这些代码允许我隔离我所有的安装并编辑它们,特别是与我用于订阅 Facebook 好友的代码一起使用,这样当他们 post 有东西时我可以得到通知.