【问题标题】:Parse push notifications specific users Cloud Code解析推送通知特定用户云代码
【发布时间】:2015-12-15 22:32:30
【问题描述】:

目前我正在尝试向我的应用添加推送通知,特别是向两个不同用户的推送通知,由第三个用户触发。

除了推送通知不起作用之外,下面的云代码运行良好。当第三个用户触发此功能时,我希望将两个推送通知设置给赢家和输家用户。

Parse.Cloud.define('addWinsLosses', function(request,response) { 

    Parse.Cloud.useMasterKey(); 

    var winnerUserId = request.params.winnerUserId;
    var loserUserId = request.params.loserUserId;

    var User = Parse.Object.extend('_User');
    var winner = new User({ objectId: winnerUserId });
    var loser = new User({ objectId: loserUserId });

    console.log(JSON.stringify(winner));
    console.log(JSON.stringify(loser));

    winner.increment('wins');
    loser.increment('losses');

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

    pushQuery.equalTo('user', winner)

    Parse.Push.send({
        where: pushQuery
        data: {
            alert: "You Won!",
            badge: "increment"
        }
    }, {
        success: function () {
            response.success();
        },
        error: function (error) {
            response.error(error);
        }
    })

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

    pushQuery.equalTo('user', loser)

    Parse.Push.send({
        where: pushQuery
        data: {
            alert: "You lost.",
            badge: 'increment'
        }
    }, {
        success: function () {
            response.success();
        },
        error: function (error) {
            response.error(error);
        }
    })

    Parse.Promise.when([winner.save(), loser.save()]).then(function () {
        // both saves have completed
        response.success();
    }, function (error) {
        // one or more errors
        console.log("Error in addWinsLosses : " + error.message);
        response.error(error);
    });
});

我已经添加了所需的关系:

let installation = PFInstallation.currentInstallation()
            installation["user"] = PFUser.currentUser()
            installation.saveEventually()

这应该是指向 PFUser 的指针,然后将其与我的云代码中指向 PFUser 的另一个指针(“赢家”或“输家”)进行比较。两个用户的消息不同。

有几个问题:

  1. 我的代码有什么问题?
  2. 如何清理我的代码 从组合“Parse.Push.send”开始?

【问题讨论】:

  • 考虑将用户 ID(带有一些前缀)设置为频道

标签: ios parse-platform push-notification parse-cloud-code


【解决方案1】:

您可能应该只在最后一个 promise 回调中调用 response.error() 和 response.success()。否则,一旦发送了一个推送通知,或者当用户对象完成保存(以先完成者为准),云函数几乎肯定会提前返回。

我会尝试从您对 Parse.Push.send 的使用中删除成功/错误回调,而是将函数返回的 promise 对象添加到对 Parse.Promise.when 的调用中:

var winnerPushPromise = Parse.Push.send({
    where: pushQuery
    data: {
        alert: "You Won!",
        badge: "increment"
    }
})

...

var loserPushPromise = Parse.Push.send({
    where: pushQuery
    data: {
        alert: "You lost.",
        badge: 'increment'
    }
})

var promises = [winnerPushPromise, loserPushPromise, winner.save(), loser.save()]

Parse.Promise.when(promises).then(function () {
...

编辑

我刚刚注意到您的用户对象存在问题,这可能会导致您的查询出现问题 - 尝试将“objectId”更改为“id”。

【讨论】:

  • 是否应该为每次推送更改查询名称?
  • 就个人而言,我会为每个推送查询创建一个变量,但如果您想重用 pushQuery 变量并不重要(只要您在发送第二个推送通知之前更新查询)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多