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