Parse platform 解析云:向单个用户发送推送

Parse platform 解析云:向单个用户发送推送,parse-platform,cloud,push,where,Parse Platform,Cloud,Push,Where,我正在使用Parse,无法使此方法正常工作 其想法是从“云代码”中的任何平台向具有已知用户标识符的单个用户发送推送 我尝试过的查询没有向该用户发送推送(实际上没有向任何用户发送推送) 通过用户指针进行安装: var targetUser=new Parse.User() targetUser.id=userID var query=newparse.query(Parse.Installation) query.equalTo('user',targetUser) PFUser本身中的查询 v

我正在使用Parse,无法使此方法正常工作

其想法是从“云代码”中的任何平台向具有已知用户标识符的单个用户发送推送

我尝试过的查询没有向该用户发送推送(实际上没有向任何用户发送推送)

  • 通过用户指针进行安装:

    var targetUser=new Parse.User()

    targetUser.id=userID

    var query=newparse.query(Parse.Installation)

    query.equalTo('user',targetUser)

  • PFUser本身中的查询

    var query=newparse.query(Parse.User)

    query.equalTo('objectId',userID)

方法的完整代码:

Parse.Cloud.define("sendPushContactUser", function(request, response) {

// Get parameters
var userID       = request.params.userID; // I'm obviously passing this parameter in the method call


// Query
/* ------ query = Any of the above options ------ */


Parse.Push.send({
    where: query,
    data: {
        title   : "New message",
        alert   : "User message",   
        badge   : "Increment",
        sound   : "soundNotifUserContact.caf",
        "params" : {
            "pushType"  : 2,
            "userID"    : userID
        }
    }
}, {
    success: function() {
        response.success();
    },
    error: function(error) {
        response.error(error);
    }
    });

});

感谢您的时间和帮助。

我正在使用您提到的两种方法中的第一种,效果很好

只需确保使用objectId,而不是
targetUser.id
的用户名

例:


这对我来说很好,但您必须先将用户与安装链接起来,然后才能:

var query = new Parse.Query(Parse.User);
query.equalTo('username', 'Sento');
// Find devices associated with these users
var pushQuery = new Parse.Query(Parse.Installation);
// need to have users linked to installations
pushQuery.matchesQuery('user', query);


Parse.Push.send({
    where: pushQuery,
    data: {
        aps: {
            alert: "Test",
            sound: ""
        }
    }
}, {
    success: function () {
        response.success("Hello world!");
    },
    error: function (error) {
        response.error(error);
    }
});

您可以使用用户指针作为会话主键,下一个“installationId”作为连接键来连接Parse.Session和Parse.Installation

var PushSend = function(payload, dbContact) {
    var querySession = new Parse.Query(Parse.Session);
        querySession.equalTo("user", dbContact);
        querySession.descending("updatedAt");

querySession.first({ useMasterKey: true })

.then(function(dbSession) {
    var installId = dbSession.get("installationId");

    var installQuery = new Parse.Query(Parse.Installation);
        installQuery.equalTo("installationId", installId);

        Parse.Push.send( {
            where: installQuery,
            data: {
                alert: payload
            }
        }, { useMasterKey: true} )

        .then(function() {
            // "success"
        }, function(error) {
            // "failed"
        } );
    }, function(error) {
        // "failed"
    } );
}
上述云函数采用以下参数:

  • 有效负载文本字符串
  • 目标联系人指针(例如,您以前从Parse.User查询过)

  • 谢谢你的回答。我添加了一个指向User.installation的指针,链接看起来很好。我可以点击安装,并显示安装。但仍然无法发送。是的!为此祝福你的心。我尝试过这样做,并编写了相同的代码,但我不明白你如何链接用户和安装?我应该从客户端执行此操作,还是有办法从Parse dashboard执行此操作?首先,您必须在用户表(dashboard)中创建一列作为指向安装的指针。一旦用户注册了你的应用程序,你必须用你将从Parse(客户端)获得的安装更新用户表。你如何从android调用云方法??
    var PushSend = function(payload, dbContact) {
        var querySession = new Parse.Query(Parse.Session);
            querySession.equalTo("user", dbContact);
            querySession.descending("updatedAt");
    
    querySession.first({ useMasterKey: true })
    
    .then(function(dbSession) {
        var installId = dbSession.get("installationId");
    
        var installQuery = new Parse.Query(Parse.Installation);
            installQuery.equalTo("installationId", installId);
    
            Parse.Push.send( {
                where: installQuery,
                data: {
                    alert: payload
                }
            }, { useMasterKey: true} )
    
            .then(function() {
                // "success"
            }, function(error) {
                // "failed"
            } );
        }, function(error) {
            // "failed"
        } );
    }