使用 Facebook ID 向特定用户发送 Parse 推送通知无法在 Android 上运行

Posted

技术标签:

【中文标题】使用 Facebook ID 向特定用户发送 Parse 推送通知无法在 Android 上运行【英文标题】:Sending Parse push notifications to specific users using Facebook ID not working from Android 【发布时间】:2014-03-28 07:01:15 【问题描述】:

我正在尝试向我的 Facebook 好友列表发送推送通知。我已经为每个 Parse 用户存储了 Facebook ID,并将该用户保存在 Parse Installation 中。 android 实现存在问题,因为从 Android 设备发送通知时不会将通知发送给所有朋友,但从 ios 设备发送通知时,所有朋友都会收到通知。下面是我从 iOS 和 Android 发送通知的代码。

Android 推送的 Targeting 字段如下:

用户高级运算符 ($inQuery "where"=>"fbid"=>"$in"=>[“id1”, “id2”, “id3”, “id4”], “className "=>"_User") deviceType 是“ios”、“android”、“winphone”或“js”中的任何一个

而 iOS 推送的 Targeting 字段如下:

用户高级运算符 ($inQuery "className"=>"_User", "where"=>"fbid"=>"$in"=>["id1", "id2", "id3", "id4"]) deviceType 是“ios”、“android”、“winphone”或“js”中的任何一个

然而,在 Android 的情况下,通知仅发送给 1 个用户而不是 4 个(基于推送通知中的“订阅者”字段)。而在 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: 不允许客户端对安装集合执行查找操作。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

不允许使用 ClientKey 的应用查询安装类。

我建议使用独特的渠道,使用渠道您可以针对特定用户推送消息。

【讨论】:

以上是关于使用 Facebook ID 向特定用户发送 Parse 推送通知无法在 Android 上运行的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中向特定用户推送通知

解析从云代码向特定用户发送推送通知

Facebook iOS SDK - 向 facebook 用户发送应用请求

如何向 Facebook 用户发送私人消息?

使用 socket.io 向特定客户端发送消息,同时套接字 id 快速变化

使用 Socket IO、Laravel、Redis、Angularjs 向特定用户发送数据