workshop: building your mobile backend with parse - droidcon paris2014
DESCRIPTION
http://fr.droidcon.com/2014/agenda/detail?title=Parse+Worskshop Learn how to focus on creating a great user experience and forget complex infrastructure. Instantly add a powerful core, push notifications, and analytics to your app with Parse. We will take a deep dive at Parse's native SDKs for Android and see how to build an app that scales to millions of users. Speaker: Ali Parr, Parse Head of Mobile Platform Partnerships Engineering, EMEA, Facebook and Parse, based in London. He currently heads up the Parse partnerships program for Facebook in EMEA, as well focusing on new developer acquisition. Ali is focused on building partnerships between Parse and developers across EMEA, through direct contact, public speaking opportunities, and mentoring events. Ali is also a mentor at Techstars in London, and The Family in Paris, providing advice and experience to high-potential startups. Prior to Facebook, Ali was the founder of Infinite Degree, a gaming startup that reached top 10 in Apple App Store across many regions including the US and the UK. Ali holds a Masters degree in Computer Science.TRANSCRIPT
![Page 1: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/1.jpg)
BUILDING YOUR MOBILE BACKEND WITH PARSE
ALI PARR PLATFORM PARTNERSHIPS
![Page 2: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/2.jpg)
![Page 3: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/3.jpg)
![Page 4: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/4.jpg)
IDENTITYSHARING
PUSH NOTIFICATIONSAPP INSTALLSMONETIZATION
![Page 5: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/5.jpg)
IDENTITYSHARINGPUSH NOTIFICATIONSAPP INSTALLSMONETIZATION
![Page 6: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/6.jpg)
CORE API STABILITY GUARANTEE
2 YEAR
![Page 7: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/7.jpg)
VERSIONINGFOR ALL APIs
![Page 8: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/8.jpg)
MAJOR BUG FIX SLA
48 HOUR
![Page 9: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/9.jpg)
![Page 10: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/10.jpg)
![Page 11: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/11.jpg)
![Page 12: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/12.jpg)
BUILD GROW
App Installs
Sharing
Messaging
MONETIZE
Payments
Audience Network
Parse
Login
App Events
App Links
![Page 13: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/13.jpg)
![Page 14: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/14.jpg)
![Page 15: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/15.jpg)
![Page 16: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/16.jpg)
PHYSICAL SERVERSLOAD BALANCINGDATABASE BINDINGS
RESTful APIROUTING
MIDDLEWARE
APP SECURITY
APP BUSINESS LOGIC
NETWORKING
CACHING
DATA MODELS
USER SESSIONSSOCIAL
PUSH NOTIFICATIONSFILESUI BINDINGS
![Page 17: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/17.jpg)
PHYSICAL SERVERSLOAD BALANCINGDATABASE BINDINGS
RESTful APIROUTING
MIDDLEWARE
APP SECURITY
APP BUSINESS LOGIC
NETWORKING
CACHING
DATA MODELS
USER SESSIONSSOCIAL
PUSH NOTIFICATIONSFILESUI BINDINGS
YOUR APP
![Page 18: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/18.jpg)
PARSE
YOUR APP
![Page 19: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/19.jpg)
![Page 20: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/20.jpg)
Parse Core Parse Push Parse Analytics
![Page 21: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/21.jpg)
![Page 22: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/22.jpg)
Completely Open Source
![Page 23: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/23.jpg)
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
![Page 24: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/24.jpg)
THE F8 APP
![Page 25: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/25.jpg)
THE F8 APP
Key Value
TitleEverything You Need to Know About
Login
Time 12:30
Speaker Eddie O’Neil
isFavorite FALSE
![Page 26: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/26.jpg)
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.
SAVING TO PARSEParseObject talk = new ParseObject(”Talk”);
![Page 27: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/27.jpg)
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.
SAVING TO PARSE
talk.put(“title”, “Opening Keynote”);talk.put(“speaker”, “Mark Zuckerberg”);talk.put(“time”, talkDate); // Datetalk.put(“isFavorite”, false);
ParseObject talk = new ParseObject(”Talk”);
![Page 28: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/28.jpg)
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.
SAVING TO PARSE
talk.saveInBackground();
talk.put(“title”, “Opening Keynote”);talk.put(“speaker”, “Mark Zuckerberg”);talk.put(“time”, talkDate); // Datetalk.put(“isFavorite”, false);
ParseObject talk = new ParseObject(”Talk”);
![Page 29: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/29.jpg)
![Page 30: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/30.jpg)
DEMO TIME!
![Page 31: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/31.jpg)
PARSE QUERYParseQuery<ParseObject> query = ParseQuery.getQuery(”Talk”);
query.findInBackground(new FindCallback<ParseObject>(){ public 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 } }
// Find only the talks that are in the Build track query.whereEqualTo(”track”,”Build”);
![Page 32: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/32.jpg)
PARSE QUERY
}
ParseQuery<ParseObject> query = ParseQuery.getQuery(”Talk”);
query.findInBackground(new FindCallback<ParseObject>(){ public 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 } }
// Find only the talks that are in the Build track query.whereEqualTo(”track”,”Build”);
![Page 33: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/33.jpg)
PARSE SOCIAL
Easy User & Session Management
Sign up Improve app
security with ACLsManage user session with “currentUser”
Create Roles Log in & add 3rd party auth
![Page 34: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/34.jpg)
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.
SIGN UP A PERSON
![Page 35: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/35.jpg)
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.
SIGN UP A PERSONParseUser user = new ParseUser();user.setUsername(”janedoe”);user.setPassword(”mypass123”);user.setEmail(”[email protected]”);user.signUpInBackground();
![Page 36: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/36.jpg)
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.
LOG A PERSON IN
![Page 37: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/37.jpg)
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.
LOG A PERSON INParseUser.logInInBackground( ”janedoe”,
”mypass123”, new LogInCallback() {public void done(ParseUser user, ParseException e) {
if (user != null) {// The user is logged in
} else {// Something went wrong; check the ParseException
}}
});
![Page 38: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/38.jpg)
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.
SAVING TO PARSE WITH A CURRENT USERParseObject post = new ParseObject(”Post”);
![Page 39: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/39.jpg)
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.
SAVING TO PARSE WITH A CURRENT USER
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
orientation only?”);
ParseObject post = new ParseObject(”Post”);
![Page 40: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/40.jpg)
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.
SAVING TO PARSE WITH A CURRENT USER
post.saveInBackground();
// This post is now saved with an ACL; the default is// public read, writes only by the user that saved it
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
orientation only?”);
ParseObject post = new ParseObject(”Post”);
![Page 41: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/41.jpg)
SAVE A FILEbyte[] data = myPhotoObject.toByteArray();
![Page 42: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/42.jpg)
SAVE A FILE
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data);speakerPhoto.saveInBackground();
byte[] data = myPhotoObject.toByteArray();
![Page 43: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/43.jpg)
SAVE A FILE
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();
byte[] data = myPhotoObject.toByteArray();
![Page 44: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/44.jpg)
SAVE A FILE
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();
byte[] data = myPhotoObject.toByteArray();
![Page 45: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/45.jpg)
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
![Page 46: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/46.jpg)
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
![Page 47: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/47.jpg)
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
![Page 48: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/48.jpg)
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
![Page 49: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/49.jpg)
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.
A SIMPLE JOB
![Page 50: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/50.jpg)
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.
A SIMPLE JOBParse.Cloud.job(”lowercaseallthethings”, function (request, status) {
// Set up to modify user dataParse.Cloud.useMasterKey();
// Query for all usersvar query = new Parse.Query(Parse.User);query.each(function(user) {
// Set and save the changeuser.set(”name”, user.name.toLowerCase());return user.save();
}).then(function() {// Set the job’s success and error statuses
status.success(”All users now have lowercase names”);}, function(error) {
status.error(”Job did not complete.”);});
}
![Page 51: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/51.jpg)
![Page 52: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/52.jpg)
![Page 53: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/53.jpg)
![Page 54: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/54.jpg)
![Page 55: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/55.jpg)
Parse Local Datastore
![Page 56: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/56.jpg)
Parse Local Datastore
![Page 57: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/57.jpg)
Parse.enableLocalDatastore();
ParseQuery<ParseObject> query = ParseQuery.getQuery(“GameScore");query.orderByDescending(“score”);query.fromLocalDatastore();query.findInBackground(new FindCallback<ParseObject>() { ...});
Parse Local Datastore
![Page 58: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/58.jpg)
Parse Config
Create and manage configuration variables for your apps from the Parse Dashboard
![Page 59: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/59.jpg)
PARSE PUSH
![Page 60: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/60.jpg)
1 device + 1 install of your app = 1 Installation
Pushes are sent to Installations
ParseInstallation.getCurrentInstallation().saveInBackground();
INSTALLATIONS
Add relationships to objects of interest, e.g. users
![Page 61: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/61.jpg)
Channels vs Queries
Target stable interest groups with channels
PUSH TARGETING
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
![Page 62: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/62.jpg)
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.
PUSH TO A CHANNEL
![Page 63: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/63.jpg)
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.
PUSH TO A CHANNELParsePush push = new ParsePush();push.setChannel(”PSGFans”);push.setMessage(”The game starts now on channel 5!”);push.sendInBackground();
![Page 64: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/64.jpg)
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.
PUSH TO A QUERY
![Page 65: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/65.jpg)
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.
PUSH TO A QUERYParseQuery pushQuery = ParseInstallation.getQuery();pushQuery.whereEqualTo(”hasCheckedInToVenue”, true);
ParsePush push = new ParsePush();push.setQuery(pushQuery);push.setMessage(”The keynote is about to start!”);push.sendInBackground();
![Page 66: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/66.jpg)
![Page 67: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/67.jpg)
![Page 68: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/68.jpg)
DEMO TIME!
![Page 69: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/69.jpg)
PARSE ANALYTICS
![Page 70: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/70.jpg)
Measure App Usage
API calls
PARSE ANALYTICS
Burst rates Responses to push notifications
![Page 71: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/71.jpg)
![Page 72: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/72.jpg)
Events + Dimensions
Create your own events and track custom user
behaviour
CUSTOM EVENTS
Slice and dice your data however you choose
Save additional parameters with
dimensions
![Page 73: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/73.jpg)
CUSTOM EVENTS
![Page 74: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/74.jpg)
event: "signedUp"dimensions: {gender: "f",source: "web",friendsUsingApp: "35",wasReferred: "true"
}
CUSTOM EVENTS
![Page 75: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/75.jpg)
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.
CUSTOM EVENTS
![Page 76: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/76.jpg)
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.
CUSTOM EVENTSMap<String, String> dimensions = new HashMap<String, String>();
// Add key-value pairs to be saved alongside eventdimensions.put(”gender”,”f”);dimensions.put(”source”,”web”);// Consider using buckets to meaningfully segment eventsdimensions.put(”friendsUsingApp”,”25-50”);dimensions.put(”wasReferred”,”true”);
ParseAnalytics.trackEvent(”signup”, dimensions);
![Page 77: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/77.jpg)
![Page 78: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/78.jpg)
Knowledge is Power
Is the first level of my game too hard?
CUSTOM EVENTS
Why aren’t people completing purchases
in my app?
How successful was our last push campaign?
![Page 79: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/79.jpg)
![Page 80: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/80.jpg)
Understanding Growth
![Page 81: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/81.jpg)
Understanding Retention
![Page 82: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/82.jpg)
Understanding Retention
![Page 83: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/83.jpg)
Understanding Retention
![Page 84: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/84.jpg)
0
50,000
100,000
150,000
300,000
2011 2012 2013 2014
200,000
250,000
2015
Apps
bui
lt on
Par
se
![Page 85: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/85.jpg)
0
50,000
100,000
150,000
300,000
2011 2012 2013 2014
200,000
250,000
2015
Apps
bui
lt on
Par
se
![Page 86: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/86.jpg)
Over260,000 Apps Built!
0
50,000
100,000
150,000
300,000
2011 2012 2013 2014
200,000
250,000
2015
Apps
bui
lt on
Par
se
![Page 87: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/87.jpg)
180,000new developers this year
![Page 88: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/88.jpg)
New Parse Customers
![Page 89: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/89.jpg)
Pricing
![Page 90: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/90.jpg)
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
![Page 91: Workshop: building your mobile backend with Parse - Droidcon Paris2014](https://reader033.vdocument.in/reader033/viewer/2022052301/557b8e8bd8b42a333a8b52ae/html5/thumbnails/91.jpg)
THANKS, QUESTIONS?