我正在尝试向我的 Facebook 好友列表发送推送通知。我已经将 Facebook IDs 与每个 Parse 用户一起存储,并在 Parse 安装中保存了该用户。在 Android 实现中存在问题,因为当通知从 Android 设备发送时,并不是所有朋友都会收到通知,但当通知从 iOS 设备发送时,所有好友都会收到通知。下面是我从 iOS 和 Android 发送通知的代码。
Android 推送的 Targeting 字段如下:
用户高级运算符($inQuery {"where"=>{"fbid"=>{"$in"=>[“id1”, “id2”, “id3”, “id4”]}}, "className"=>"_User"}) 设备类型为 "ios"、"android"、"winphone" 或 "js"
而 iOS 推送的 Targeting 字段如下:
用户高级运算符($inQuery {"className"=>"_User", "where"=>{"fbid"=>{"$in"=>["id1", "id2", "id3", "id4"]}}}) 设备类型为 "ios"、"android"、"winphone" 或 "js"
然而,在 Android 的情况下只向一个用户发送通知,而不是四个(基于 Push 通知中的 'Subscribers' 字段)。而在 iOS 的情况下,所有 ID 在列表中的好友都会收到通知。
如果需要帮助,请告诉我。
iOS 的代码:
Android 推送的 Targeting 字段如下:
用户高级运算符($inQuery {"where"=>{"fbid"=>{"$in"=>[“id1”, “id2”, “id3”, “id4”]}}, "className"=>"_User"}) 设备类型为 "ios"、"android"、"winphone" 或 "js"
而 iOS 推送的 Targeting 字段如下:
用户高级运算符($inQuery {"className"=>"_User", "where"=>{"fbid"=>{"$in"=>["id1", "id2", "id3", "id4"]}}}) 设备类型为 "ios"、"android"、"winphone" 或 "js"
然而,在 Android 的情况下只向一个用户发送通知,而不是四个(基于 Push 通知中的 'Subscribers' 字段)。而在 iOS 的情况下,所有 ID 在列表中的好友都会收到通知。
如果需要帮助,请告诉我。
iOS 的代码:
NSMutableArray *friendsArray;
PFQuery *friendQuery = [PFUser query];
[friendQuery whereKey:[NSString stringWithUTF8String:@"fbID"] containedIn:friendsArray];
PFQuery *query = [PFInstallation query];
[query whereKey:@"user" matchesQuery:friendQuery];
PFPush *push = [[PFPush alloc] init];
[push setQuery:query];
[push setMessage:[NSString stringWithFormat:@"%@ sent you this test message!", [NSString stringWithCString:"TestUser" encoding:NSUTF8StringEncoding]]];
[push sendPushInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (!error) {
NSLog(@"Push sent to users successfully");
}
else {
NSLog(@"Error while fetching sending push from Parse: %@ %@", error, [error userInfo]);
}
}];
Android的代码:
List<String> friends;
ParseQuery<ParseUser> friendQuery = ParseUser.getQuery();
friendQuery.whereContainedIn("fbID", friends);
ParseQuery<ParseInstallation> query = ParseInstallation.getQuery();
query.whereMatchesQuery("user", friendQuery);
ParsePush push = new ParsePush();
push.setQuery(query);
push.setMessage(userFullName + " sent you this test message from Android!");
push.sendInBackground();
编辑:
我找到了问题所在。这个异常是由于ParseInstallation查询的结果导致的。
com.parse.ParseException:客户端不允许在安装集合上执行查找操作。
我该如何解决这个问题?