-
-
Save parthjdabhi/2e91df0d2e984c66480dcc43ffdaa5e0 to your computer and use it in GitHub Desktop.
Targeted Push Notifications: Parse.com Cloud Code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Use Parse.Cloud.define to define as many cloud functions as you want. | |
// For example: | |
Parse.Cloud.define("hello", function (request, response) { | |
response.success("Hello world!"); | |
}); | |
Parse.Cloud.define("userWithEmailExists", function (request, response) { | |
var email = request.params.email; | |
if (email != null && email !== "") { | |
email = email.trim(); | |
} else { | |
response.error("Must provide \"email\" in JSON data"); | |
return; | |
} | |
var logMessage = "Checking for email \"{0}\"".format(email); | |
console.log(logMessage); | |
// Find users with a given email | |
var userQuery = new Parse.Query(Parse.User); | |
userQuery.equalTo("email", email); | |
userQuery.find({ | |
success: function (results) { | |
if (results.length > 0) { | |
response.success('true'); | |
} else { | |
response.success('false'); | |
} | |
}, | |
error: function (error) { | |
response.error(error); | |
} | |
}); | |
}); | |
Parse.Cloud.define("getUserWithEmail", function (request, response) { | |
var emailParam = request.params.email; | |
// Check if email exists and return associated user | |
Parse.Cloud.run("userWithEmailExists", { email: emailParam },{ | |
success: function (booleanObj) { | |
if (JSON.parse(booleanObj)) { | |
// Find users with a given email | |
var userQuery = new Parse.Query(Parse.User); | |
userQuery.equalTo("email", emailParam); | |
userQuery.first({ | |
success: function (object) { | |
response.success(object); | |
} | |
}); | |
} else { | |
response.error("User with email does not exist"); | |
} | |
}, | |
error: function (error) { | |
response.error(error); | |
} | |
}); | |
}); | |
Parse.Cloud.define("pushToEmail", function (request, response) { | |
var emailParam = request.params.email; | |
var message = request.params.message; | |
if (message != null && message !== "") { | |
message = message.trim(); | |
} else { | |
response.error("Must provide \"message\" in JSON data"); | |
return; | |
} | |
// Can see this at https://www.parse.com/apps/{APP_NAME}/cloud_code/log | |
var logMessage = "Sending \"{0}\" to {1}".format(message, emailParam); | |
console.log(logMessage); | |
// Check if email exists and send notification | |
Parse.Cloud.run("userWithEmailExists", { email: emailParam },{ | |
success: function (booleanObj) { | |
if (JSON.parse(booleanObj)) { | |
// Find users with a given email | |
var userQuery = new Parse.Query(Parse.User); | |
userQuery.equalTo("email", emailParam); | |
var pushQuery = new Parse.Query(Parse.Installation); | |
// pushQuery.containedIn("deviceType", ["ios", "android"]); // errors if no iOS certificate | |
pushQuery.exists("user"); // filter out installations without users | |
pushQuery.include('user'); // expand the user pointer | |
pushQuery.matchesQuery("user", userQuery); | |
// Send push notification to query | |
Parse.Push.send({ | |
where: pushQuery, // Set our installation query | |
data: { | |
alert: message | |
} | |
}, { | |
success: function () { | |
// Push was successful | |
console.log("Message was sent successfully"); | |
response.success('true'); | |
}, | |
error: function (error) { | |
response.error(error); | |
} | |
}); | |
} else { | |
response.error("User with email does not exist"); | |
} | |
}, | |
error: function (error) { | |
response.error(error); | |
} | |
}); | |
}); | |
Parse.Cloud.define("pushToAll", function (request, response) { | |
var message = request.params.message; | |
if (message != null && message !== "") { | |
message = message.trim(); | |
} else { | |
response.error("Must provide \"message\" in JSON data"); | |
return; | |
} | |
// Can see this at https://www.parse.com/apps/{APP_NAME}/cloud_code/log | |
var logMessage = "Sending \"{0}\" to all installations".format(message); | |
console.log(logMessage); | |
var pushQuery = new Parse.Query(Parse.Installation); | |
// pushQuery.containedIn("deviceType", ["ios", "android"]); // errors if no iOS certificate | |
// Send push notification to query | |
Parse.Push.send({ | |
where: pushQuery, // Set our installation query | |
data: { | |
alert: message | |
} | |
}, { | |
success: function () { | |
// Push was successful | |
console.log("Message was sent successfully"); | |
response.success('true'); | |
}, | |
error: function (error) { | |
response.error(error); | |
} | |
}); | |
}); | |
if (!String.prototype.format) { | |
String.prototype.format = function() { | |
var args = arguments; | |
return this.replace(/{(\d+)}/g, function(match, number) { | |
return typeof args[number] != 'undefined' | |
? args[number] | |
: match | |
; | |
}); | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment