Parse platform 向解析中的特定用户发送推送通知

Parse platform 向解析中的特定用户发送推送通知,parse-platform,apple-push-notifications,Parse Platform,Apple Push Notifications,我试图在云代码中创建一个流,我需要发送推送通知,而不是发送给刚注册的用户,而是发送给他的合作伙伴 在我的应用程序中,两个用户可以作为合作伙伴连接。我的用户表有一个partnerUser列,指向他的合作伙伴。因此,流程如下所示: 1) Mark首先在应用程序中注册,并添加他朋友的John电子邮件地址作为他的合作伙伴 1.1)调用afterSave函数,但不执行任何操作,因为Mark还没有合作伙伴 2) John收到一封带有邀请代码的电子邮件,并使用该代码注册。这在解析中将两者连接起来 2.1)根据

我试图在云代码中创建一个流,我需要发送推送通知,而不是发送给刚注册的用户,而是发送给他的合作伙伴

在我的应用程序中,两个用户可以作为合作伙伴连接。我的用户表有一个
partnerUser
列,指向他的合作伙伴。因此,流程如下所示:

1) Mark首先在应用程序中注册,并添加他朋友的John电子邮件地址作为他的合作伙伴 1.1)调用afterSave函数,但不执行任何操作,因为Mark还没有合作伙伴 2) John收到一封带有邀请代码的电子邮件,并使用该代码注册。这在解析中将两者连接起来 2.1)根据John的save()调用afterSave。我要做的第一件事是查询用户表以查找John的合作伙伴—在本例中是Mark。然后,当Mark的对象在手边时,我向Mark推送一个通知

我的日志没有显示任何错误,但通知未到达标记。我不确定我是不是在忙着查询本身

我将PFInstallation表更改为具有指向用户的
指针。在用户表中,我还有一列InstallationId。有了这种关系,我希望我可以向某个用户发送单独的推送通知。这就是我在云代码中所做的:

Parse.Cloud.afterSave(Parse.User, function(request) {
    console.log(displayTime() + " - AfterSave Triggered for user " + request.object.get("firstName"));
        //Making sure the partners have been connected
    if (typeof request.object.get("partnerUser") !== 'undefined' || request.object.get("partnerUser") !== null) {

        var topicName = request.object.get("topicName");
        //Searching for the partner (in this case the partner registered first)
        query = new Parse.Query(Parse.User);
        query.equalTo("objectId", request.object.get("partnerUser").id);
        query.doesNotExist("topicName"); //we just want a partner that has not been connected yet
        query.first({
            success: function(userRetrieved) {
                console.log(displayTime() + ' - Partner Retrieved  - name :' + userRetrieved.get("firstName"));
                //We need to send a push notification to the user that first signed up (in this case "userRetrieved")
                //because that user is not connected to the topic that joins both users
                console.log(displayTime() + " - Installation Id is: " + request.object.get("installationId"));
                //var partnerTopicName = request.object.get("partnerUser").id;
                var pushQuery = new Parse.Query(Parse.Installation);
                pushQuery.equalTo('user', userRetrieved);
                pushQuery.equalTo('installationId', request.object.get("installationId"));
                Parse.Push.send({
                    where: pushQuery, // Set our Installation query
                    data: {
                        "aps": {
                            "content-available": 1,
                            "sound": "default",
                            "title": "Name Me",
                            "alert": "",
                            "type": "connect_push_notification_channel",
                            "topic": topicName
                        }
                    }
                }, {
                    useMasterKey: true,
                    success: function() {
                        console.log(displayTime() + " - Push done with installationId " + request.object.get("installationId"));
                    },
                    error: function(err) {
                        console.error(displayTime() + " - Push error " + err);
                    }
                });
查看我的日志,我可以看到:

[11/10/2016 21:06:32.870 PM]-为用户Felipe触发余波

[11/10/2016 21:06:32.873 PM] - finished for: Felipe
[11/10/2016 21:06:33.24 PM] - Partner Retrieved  - name :Gemma
[11/10/2016 21:06:33.24 PM] - Installation Id is: 2f4b6127-49d5-4586-84eb-595fbb1e3d6a
[11/10/2016 21:06:33.25 PM] - Object UpdateAt equals to Object CreatedAt
[11/10/2016 21:06:33.173 PM] - Push done with installationId 2f4b6127-49d5-4586-84eb-595fbb1e3d6a
[11/10/2016 21:06:33.313 PM] - AfterSave Triggered for user Gemma

[11/10/2016 21:06:33.313 PM] - finished for: Gemma
[11/10/2016 21:06:33.319 PM] - saved
我知道推送通知是有效的,因为我有另一个来自云函数的流,它将通知推送到两个用户,他们都得到了通知。但是查询是基于主题而不是安装的

有什么建议吗


谢谢

我终于找到了问题所在。这是一句话:

pushQuery.equalTo('installationId', request.object.get("installationId"));
这实际上是从第二个用户获取installationId,而不是第一个用户,因为它应该是这样的。我把线路改成:

pushQuery.equalTo('installationId', userRetrieved.get("installationId"));

现在它工作了

我终于找到了问题所在。这是一句话:

pushQuery.equalTo('installationId', request.object.get("installationId"));
这实际上是从第二个用户获取installationId,而不是第一个用户,因为它应该是这样的。我把线路改成:

pushQuery.equalTo('installationId', userRetrieved.get("installationId"));
现在它起作用了