简体   繁体   中英

Parse Cloud Code Sending Push Notification Twice

I am trying to send a push notification using cloud code to targeted channels. The Object is called Prayers. When someone saves Prayers, it is supposed to send a push notification to certain channels, if the new data in Prayers was not made anonymously. Prayers has a key of 'Anonymous' in it that is boolean. So, I have cloud code set up like this, in an effort that if the boolean value is false, it sends, it, but if it is true, it won't send the push. The issue now is that it is sometimes sending the Push through 2 times on a non-anonymous post.

Parse.Cloud.afterSave("Prayers", function(request) {

    var firstName = request.object.get('FirstName');
    var lastName = request.object.get('LastName');
    var userId = request.object.get('UserId');
    var anonymous = request.object.get('Anonymous');
    var anonymousString = anonymous.toString

    var pushQuery = new Parse.Query(Parse.Installation);
    pushQuery.equalTo('channels', userId);
    if (anonymous == false) {
        Parse.Push.send({
            where: pushQuery, // Set our Installation query
            data: {
                alert: firstName + " " + lastName + " " + "just added a prayer request."
            }
        }, {
            success: function() {
                // Push was successful
            },
            error: function(error) {
                throw "Got an error " + error.code + " : " + error.message;
            }
        });
    }

});

At first glance there doesn't seem anything wrong with your function, but since you always try to send a push notification after a prayer has been saved, are you sure you're not saving the object twice? That could be the reason why the afterSave is invoked twice.

One of the things I also once ran into was, that I had 2 pieces of cloud code

First one would modify an object when I tried to save it. Second one was that I would do a push after saving the object.

In my code where I modified the object during the save process, I saved the modified object, which resulted in my Parse.Cloud.afterSave being fired twice for the same object

Server Side

  1. Update reg_id by UUID when device registration on server.
  2. Delete by reg_id which have return a canonical_id in the response after send a push.
  3. Periodically send fake push using dry_run and do the same things as 2.

Client Side

  1. Send message_id within payload, and save it in sqlite DB. And device will know that it has received it or not.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM