You are on page 1of 38

Adam Gross

Production Engineer, Facebook Platform


Making Mobile Apps Easier
Building with Parse
Making mobile apps is hard
Database
RE! AP"
Z
Z
Z
er#er
+
+
$ users
$ securit%
&aching
'etworking
+
+
!he fun part(
no
no
no
no
no
%es(
"t)s easier with Parse
Parse Pillars
Data ocial Push
Anal%tics *osting &loud &ode
&ore
Parse Pillars
Data Push
Anal%tics *osting &loud &ode
ocial
+our data in the cloud
Parse Data
!itle
!ime
!rack
Key Value
title ,Getting tarted with Parse
track ,!rack -.
time eptember /, 01-2 -034/ PM $1511
Talk
talk.saveInBackground();
Creating and Saving an Object
talk.put(title, Getting Started with Parse);
talk.put(track, Track 1);
talk.put(time, talkDate); // Date
ParseObject talk = new ParseObject(Talk);
Key Value
title ,Getting tarted with Parse
track ,!rack -.
time eptember /, 01-2 -034/ PM $1511
Talk
ParseQuery<ParseObject> query = ParseQuery.getQuery(Talk);
Getting a List of Objects
query.findInBackground(new FindCallback<ParseObject>(){

public void done(List<ParseObject> talkList, ParseException e) {
if (e == null) {
// We have a list of all the Basic track talks
} else {
// Something went wrong; check the ParseException
}
}
}
// Find only the talks that are in the Basic track
query.whereEqualTo(track,basic);
byte[] data = myPhotoObject.toByteArray();
Saving Files
ParseFile image = new ParseFile(Parse-2.jpg, data);
image.saveInBackground();
ParseObject picture = new ParseObject(Picture);
picture.put(title, Red Hot Chili Peppers concert);
picture.put(image, image);
picture.saveInBackground();
Parse Pillars
ocial Push
Anal%tics *osting &loud &ode
Data
Eas% 6ser Management
Parse ocial
Parse6sers make it simple to3
7 ign up
7 8og in
7 Manage user session with ,current6ser.
7 &reate Roles in %our app
7 "mpro#e app securit% with A&8s
7 "ntegrate with Facebook and !witter
Parse6ser
ParseUser user = new ParseUser();
user.setUsername(janedoe);
user.setPassword(mypassword123);
user.setEmail(janedoe@fb.com);
user.signUpInBackground();
ParseUser.logInInBackground( janedoe,
mypassword123, new LogInCallback() {
public void done(ParseUser user, ParseException e) {
if (user != null) {
// The user is logged in
} else {
// Something went wrong; check the ParseException
}
}
});
ign up
8og in
Facebook
8ink to ocial 'etworks
ParseFacebookUtils.link(user, this, new SaveCallback() {
@Override
public void done(ParseException e) {
if (ParseFacebookUtils.isLinked(user)) {
// The user added their Facebook account
}
}
};
ParseTwitterUtils.link(user, this, new SaveCallback() {
@Override
public void done(ParseException e) {
if (ParseTwitterUtils.isLinked(user)) {
// The user added their Twitter account
}
}
};
!witter
Parse Pillars
Data ocial Push
Anal%tics *osting &loud &ode
Run custom app code in the Parse &loud
&loud &ode
7 Running &ode when 9b:ects are a#ed or Deleted
7 &loud functions ; custom webhooks
7 Background <obs
7 For long running :obs
7 &an be scheduled
A imple Background <ob
Parse.Cloud.job(userMigration, 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(plan, request.params.plan);
return user.save();
}).then(function() {
// Set the jobs success status
status.success(Migration completed successfully.);
}, function(error) {
// Set the jobs error status
status.error(Uh oh, something went wrong.);
});
});
"ntegrate with #irtuall% an% third=part% ser#ice
&loud Modules
7 end te>t messages, emails, or accept pa%ments
7 &onnect to ser#ices with Parse?&loud?httpRe@uest
7 Parse "mage Module
7 ResiAe, crop, scale
7 &hange image format
7 6ser ession
Module
7 For ser#er=side apps
7 Manage user
session across pages
Parse Pillars
Data ocial Push
Anal%tics *osting &loud &ode
A powerful web presence without all the hassle
Parse *osting
er#er=free
7 %ourapp?parseapp?com
7 %ourapp?com
*osting
7 tatic Files
7 D%namic Bebsites
7 E>press?:s
Parse Pillars
Data ocial Push
Anal%tics *osting &loud &ode
Push 'otiCcations For E#er%one
Parse Push
9ne AP" to Rule !hem All
7 Reach %our i9, Android, Bindows users
7 &hoose %our audience
7 imple subscriber model, or???
7 Ad#anced targeting
"nstallations
Push 'otiCcations
ParseInstallation.getCurrentInstallation().saveInBackground();
7 Pushes are sent to "nstallations
7 - de#ice $ - install of %our app D - "nstallation
7 Add relationships to ob:ects of interest, e?g? current 6ser
ubscribe users b% interest or categor%
Push to a &hannel
ParsePush push = new ParsePush();
push.setChannel(Giants);
push.setMessage(The game starts in 5!);
push.sendInBackground();
Find users who match particular criteria
Push to a Euer%
ParseQuery pushQuery = ParseInstallation.getQuery();
pushQuery.whereEqualTo(isFacebookEmployee, true);
ParsePush push = new ParsePush();
push.setQuery(pushQuery);
push.setMessage(Good afternoon, Facebook!);
push.sendInBackground();
Parse Pillars
Data ocial Push
Anal%tics *osting &loud &ode
!rack An% Data Point "n Real !ime
Parse Anal%tics
Measure App 6sage
7 &ount AP" calls
7 Fiew %our app open rates
7 9ptimiAe push campaigns
7 !rack custom e#ents
!he Basics3 Re@uests
Di#e Deeper3 &ustom Anal%tics
a#e a free=form e#ent with dimensions for segmenting results
event: "signedUp"
dimensions: {
gender: "f",
source: "web",
friendsUsingApp: "35",
wasReferred: "true"
}
'ote3
7 Each e#ent can ha#e a ma>imum of 4 dimensions
7 Dimensions must be strings
Di#e Deeper3 &ustom Anal%tics
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);
&ustom E#ents3 Anal%Ae !rends
Gnowledge is power
7 &ertain features are used
7 People are opening %our app from push notiCcations
7 6sers cancel out of a How, or hit a certain button
7 &ertain features ha#e higher error rates than others
6se Parse Anal%tics to track if???
Parse Pillars
Data ocial Push
Anal%tics *osting &loud &ode
&ore
!hank %ou(
parse?comIdocs
parse?comIhelp

You might also like