This document provides an overview of Parse, a backend platform that allows developers to add functionality like user authentication, databases, file storage and push notifications to their mobile and web applications. Some key capabilities highlighted include saving and querying data from Parse databases, user signup and login functionality, integrating with third party services via cloud code, and using Parse push notifications and analytics to measure app usage.
16. UI BINDINGS
FILES
PUSH NOTIFICATIONS
SOCIAL
USER SESSIONS
DATA MODELS
CACHING
NETWORKING
APP BUSINESS LOGIC
APP SECURITY
MIDDLEWARE
ROUTING
RESTful API
DATABASE BINDINGS
LOAD BALANCING
PHYSICAL SERVERS
17. YOUR APP
UI BINDINGS
FILES
PUSH NOTIFICATIONS
SOCIAL
USER SESSIONS
DATA MODELS
CACHING
NETWORKING
APP BUSINESS LOGIC
APP SECURITY
MIDDLEWARE
ROUTING
RESTful API
DATABASE BINDINGS
LOAD BALANCING
PHYSICAL SERVERS
23. PARSE CORE
Your backend in the cloud
Save data to and fetch
data from Parse
Run custom app code on
Parse’s servers
Easily create and manage
user accounts and sessions
25. THE F8 APP
Key Value
Title
Everything You Need to Know About
Login
Time 12:30
Speaker Eddie O’Neil
isFavorite FALSE
26. SAVING TO PARSE
ParseObject talk = new ParseObject(”Talk”);
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
27. SAVING TO PARSE
ParseObject talk = new ParseObject(”Talk”);
talk.put(“title”, “Opening Keynote”);
talk.put(“speaker”, “Mark Zuckerberg”);
talk.put(“time”, talkDate); // Date
talk.put(“isFavorite”, false);
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
28. SAVING TO PARSE
ParseObject talk = new ParseObject(”Talk”);
talk.put(“title”, “Opening Keynote”);
talk.put(“speaker”, “Mark Zuckerberg”);
talk.put(“time”, talkDate); // Date
talk.put(“isFavorite”, false);
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere talk.saveInBackground();
in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
31. PARSE QUERY
ParseQuery<ParseObject> query =
ParseQuery.getQuery(”Talk”);
// Find only the talks that are in the Build track
query.whereEqualTo(”track”,”Build”);
query.findInBackground(new FindCallback<ParseObject>(){
p ublic void done(List<ParseObject> buildTalks, ParseException e) {
if (e == null) {
// We have a list of all the Build track talks
} else {
// Something went wrong; check the ParseException
}
}
32. PARSE QUERY
ParseQuery<ParseObject> query =
ParseQuery.getQuery(”Talk”);
}
// Find only the talks that are in the Build track
query.whereEqualTo(”track”,”Build”);
query.findInBackground(new FindCallback<ParseObject>(){
p ublic void done(List<ParseObject> buildTalks, ParseException e) {
if (e == null) {
// We have a list of all the Build track talks
} else {
// Something went wrong; check the ParseException
}
}
33. PARSE SOCIAL
Easy User & Session Management
Sign up
Improve app
security with ACLs
Log in & add 3rd Create Roles
party auth
Manage user session
with “currentUser”
34. SIGN UP A PERSON
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
35. SIGN UP A PERSON
ParseUser user = new ParseUser();
user.setUsername(”janedoe”);
user.setPassword(”mypass123”);
user.setEmail(”janedoe@fb.com”);
user.signUpInBackground();
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
36. LOG A PERSON IN
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
37. LOG A PERSON IN
ParseUser.logInInBackground( ”janedoe”,
”mypass123”, new LogInCallback() {
public void done(ParseUser user, ParseException e) {
if (user != null) {
// The user is logged in
} else {
Lorem ipsum // dolor Something sit amet, went consectetur wrong; check the adipiscing ParseException
elit. Nam urna nisi,
}
posuere }
in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor });
vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
38. SAVING TO PARSE WITH A CURRENT USER
ParseObject post = new ParseObject(”Post”);
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
39. SAVING TO PARSE WITH A CURRENT USER
ParseObject post = new ParseObject(”Post”);
post.put(“title”, “Restrict screen orientation”);
post.put(“author”, ParseUser.getCurrentUser());
post.put(“topic”, “Android”);
post.put(“content”, ”How can I make my app work in portrait
Lorem ipsum dolor sit amet, orientation consectetur only?”);
adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
40. SAVING TO PARSE WITH A CURRENT USER
ParseObject post = new ParseObject(”Post”);
post.put(“title”, “Restrict screen orientation”);
post.put(“author”, ParseUser.getCurrentUser());
post.put(“topic”, “Android”);
post.put(“content”, ”How can I make my app work in portrait
Lorem ipsum dolor sit amet, orientation consectetur only?”);
adipiscing elit. Nam urna nisi,
posuere post.saveInBackground();
in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor // This post vitae, is commodo now saved with a nisi. an Morbi ACL; the tincidunt default felis is
lacus, nec
congue // public tortor read, consectetur writes only id. by Lorem the user ipsum that dolor saved it
sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
41. SAVE A FILE
byte[] data = myPhotoObject.toByteArray();
42. SAVE A FILE
byte[] data = myPhotoObject.toByteArray();
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data);
speakerPhoto.saveInBackground();
43. SAVE A FILE
byte[] data = myPhotoObject.toByteArray();
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data);
speakerPhoto.saveInBackground();
ParseObject speaker = new ParseObject(”Speaker”);
picture.put(”name”, ”Héctor Ramos”);
picture.put(”photo”, speakerPhoto);
picture.saveInBackground();
44. SAVE A FILE
byte[] data = myPhotoObject.toByteArray();
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data);
speakerPhoto.saveInBackground();
ParseObject speaker = new ParseObject(”Speaker”);
picture.put(”name”, ”Héctor Ramos”);
picture.put(”photo”, speakerPhoto);
picture.saveInBackground();
45. CLOUD CODE
Run custom app code in Parse’s cloud
Run code when objects
are saved or deleted
Create custom functions
and web hooks
Schedule long-running jobs
with Background Jobs
46. CLOUD MODULES
Easy third-party integration
with pre-built modules
Send email Take payments
Add SMS to your
app
Connect with any RESTful service
using Parse.Cloud.httpRequest
47. BACKGROUND JOBS
Schedule long-running jobs
For operations that need
to be performed regularly
or on command
Longer timeouts—
15 minutes
Trigger from the web
UI or REST endpoint
48. BACKGROUND JOBS
Schedule long-running jobs
For operations that need
to be performed regularly
or on command
Longer timeouts—
15 minutes
Trigger from the web
UI or REST endpoint
49. A SIMPLE JOB
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
50. A SIMPLE JOB
Parse.Cloud.job(”lowercaseallthethings”, function (request, status) {
// Set up to modify user data
Parse.Cloud.useMasterKey();
// Query for all users
var query = new Parse.Query(Parse.User);
query.each(function(user) {
// Set and save the change
user.set(”name”, user.name.toLowerCase());
return user.save();
}).then(function() {
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor // vitae, Set the commodo job’s success a nisi. and Morbi error tincidunt statuses
felis lacus, nec
status.success(”All users now have lowercase names”);
congue }, tortor function(consectetur error) {
id. Lorem ipsum dolor sit amet,
consectetur status.error(”Job did not complete.”);
});
adipiscing elit. Sed semper dapibus eleifend.
}
60. INSTALLATIONS
1 device + 1 install of your app = 1 Installation
Pushes are sent to
Installations
Add relationships to objects
of interest, e.g. users
ParseInstallation.getCurrentInstallation().saveInBackground();
61. PUSH TARGETING
Channels vs Queries
Target stable interest
groups with channels
Send pushes to ad-hoc or
changing groups by
pushing to queries
To push to a query, your
Installation class must point
to the class of interest
62. PUSH TO A CHANNEL
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
63. PUSH TO A CHANNEL
ParsePush push = new ParsePush();
push.setChannel(”PSGFans”);
push.setMessage(”The game starts now on channel 5!”);
push.sendInBackground();
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
64. PUSH TO A QUERY
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
65. PUSH TO A QUERY
ParseQuery pushQuery = ParseInstallation.getQuery();
pushQuery.whereEqualTo(”hasCheckedInToVenue”, true);
ParsePush push = new ParsePush();
push.setQuery(pushQuery);
push.setMessage(”The keynote is about to start!”);
push.sendInBackground();
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
72. CUSTOM EVENTS
Events + Dimensions
Create your own events
and track custom user
behaviour
Slice and dice your data
however you choose
Save additional
parameters with
dimensions
75. CUSTOM EVENTS
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
76. CUSTOM EVENTS
Map<String, String> dimensions = new HashMap<String, String>();
// Add key-value pairs to be saved alongside event
dimensions.put(”gender”,”f”);
dimensions.put(”source”,”web”);
// Consider using buckets to meaningfully segment events
dimensions.put(”friendsUsingApp”,”25-50”);
dimensions.put(”wasReferred”,”true”);
ParseAnalytics.trackEvent(”signup”, dimensions);
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi,
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec
congue tortor consectetur id. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed semper dapibus eleifend.
77.
78. CUSTOM EVENTS
Knowledge is Power
Is the first level of my
game too hard?
Why aren’t people
completing purchases
in my app?
How successful was our
last push campaign?
90. Parse Core Parse Push Parse Analytics
FREE &
UNLIMITED
up to 30 requests/sec
($100pcm extra per 10 r/sec extra)
FREE &
UNLIMITED
up to 1,000,000 recipients
($0.05 per 1,000 recipients extra)
FREE &
UNLIMITED
data points