解析云:将推送发送给单个用户

时间:2014-09-25 13:54:32

标签: parse-platform cloud push where

我正在使用Parse,我无法使这种方法起作用。

我们的想法是使用来自“云代码”中任何平台的已知用户标识符向单个用户发送推送。

查询我试过没有将推送传递给该用户(实际上没有推送给任何用户)

  • PF通过用户指针安装:

    var targetUser = new Parse.User();

    targetUser.id = userID;

    var query = new Parse.Query(Parse.Installation);

    query.equalTo('user', targetUser);

  • 在PFUser本身中查询

    var query = new Parse.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);
    }
    });

});

感谢您的时间和帮助。

3 个答案:

答案 0 :(得分:10)

这对我很有用,但您必须在以下情况下将用户与您的安装相关联:

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);
    }
});

答案 1 :(得分:0)

您可以将Parse.Session和Parse.Installation与用户指针一起作为Session主键加入,下一步" installationId"作为连接键。

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"
    } );
}

上面的云函数作为参数:

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

答案 2 :(得分:-2)

我正在使用您提到的两种方法中的第一种,并且它可以正常工作。

请确保您使用的是objectId,而不是targetUser.id的用户名。

例如:

targetUser.id = 'Qhao1j22j';   //Never hard code like this though.