38
Leveraging parse.com for Speedy Development Andrew Kozlik @codefortravel www.justecho.com

Leveraging parse.com for Speedy Development

Embed Size (px)

Citation preview

Leveraging parse.com

for Speedy Development

Andrew Kozlik

@codefortravel

www.justecho.com

What is Parse?

• Mobile Backend as a Service

• Purchased by Facebook in 2013

• Rapidly build applications

• Fantastic for prototyping

Parse Products

• Core

• Push

• Analytics

Parse Products - Core

• Core

• Data Storage

• Authentication

• Scheduled Tasks

• Custom API Endpoints

Parse Products - Push

• Push

• Broadcasting push notifications

• A/B testing

• Channel Segmenting

Parse Products - Analytics

• Analytics

• App Usage

• Event Tracking

• Crash Reporting

Pricing - Core• 30 requests per second, 1 background job

• $100 every 10 requests per second

• 20GB File Storage

• $0.03 per GB extra

• 20GB DB Storage

• $200 per GB extra

• 2TB File Transfer

• $0.10 per GB extra

Pricing - Push

• 1,000,000 unique push recipients

• $0.05 per 1000 recipients after

• $50 per million recipients

Pricing - Analytics

• Free!

• Gee, thanks.

Installation - iOS

• Download framework

• Add to project

• Add dependencies

• Initialize Parse in code

• Use the Quick Start guide!

Installation - Android

• Download SDK

• Add SDK to build.gradle

• Update Manifest

• Initialize Parse in application’s onCreate()

• Use the Quick Start guide!

Core

• Schemaless

• Object Creation

• Object Retrieval

• Relational Data

• Local Data Store

• Special Objects

Schemaless

• Properties automatically added to backend

• Never have to look at backend

• No backend code is written to save or retrieve

objects

Creating Objects

• Create a new parse object with a specific class

name. Classes are similar to tables.

• Set all appropriate keys and values.

• Save your object in background (or foreground if

you really want to)

iOS Code

PFObject *presentation = [PFObject objectWithClassName:@“Presentation”];

presentation.title = @“Leveraging Parse for Speedy Development”;

presentation.author = @“Andrew”;

[presentation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

if (succeeded) {

NSLog(@“Woo hoo!”);

}

}];

Android Code

ParseObject presentation = new ParseObject(“Presentation”)

presentation.put(“title”, “Leveraging Parse for Speedy

Development”);

presentation.put(“author”,“Andrew”);

presentation.saveInBackground();

Retrieving Objects

• Parse uses Queries to retrieve objects

• Instantiate a new query for a class

• Set any conditions

• Retrieve on background thread

iOS Code

PFQuery *query = [PFQuery queryWithClassName:@“Presentation”];

[query whereKey:@“author” equalTo:@“Andrew”];

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

for (PFObject *object in objects) {

NSLog(@“%@“, object[@“title”]);

}

}];

Android CodeParseQuery<ParseObject> query =

ParseQuery.getQuery(“Presentation”);

query.whereEqualTo(“author”, “Andrew”);

query.findInBackground(new FindCallback<ParseObject>() {

public void done(List<ParseObject> presentationList,

ParseException e) {

for (int i =0; i < presentationList.size(); i++) {

ParseObject object = presentationList.get(i);

System.out.println(object.get(“title”));

}

}

});

Local Data Store

• Save data locally to the device

• Excellent for saving data for later processing

• Leverages SQLite

• Objects are “pinned” to background

• Querying works just like network calls, just

indicate you’re querying local store

Relational Data• One to Many Relationships

• Set one object’s key to the other object

• Object ID is stored in DB

• Multiple objects can be stored as an array

• Many to Many Relationships

• Use the relation object

• Does not retrieve all objects in the relationship

• Scalable

• Relationships can be queried as Parse Objects

iOS Code

PFUser *user = [PFUser currentUser];

PFRelation *relation = [user relationForKey:@“likes”];

[relation addObject:presentation];

[user saveInBackground];

Android Code

ParseUser user = ParseUser.getCurrentUser();

ParseRelation<ParseObject> relation =

user.getRelation(“likes”);

relation.add(presentation);

user.saveInBackground();

Special User Object

• Registration

• Authentication

• Anonymous Users

• ACL

Registration / Authentication

• Required username and password on creation

• Email and other profile fields are optional

• Signup and Login methods are available

• Optional e-mail verification

Anonymous Users

• Track a user without having them register

• Convert anonymous users to registered users

• Great for allowing access to your app

Access Control Lists

• Users can be granted privileges to objects

• Read, Write, and Delete privileges can be set

• ACL can be defaulted for all users

iOS CodePFUser *user = [PFUser user];

user.username = @“akozlik”;

user.password = @“secret_password”;

user.email = @“[email protected]”;

[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

if (!error) {

} else {

NSLog(@“%@“, [error userInfo][@“error”];

}

}];

Android CodeParseUser user = new ParseUser();

user.setUsername(“akozlik”);

user.setPassword(“secret_password”);

user.setEmail(“[email protected]”);

user.signUpInBackground(new SignUpCallback() {

public void done (ParseException e) {

if (e == null ) {

} else {

}

}

});

Push

• Setup

• Installations

• Channels

• Advanced Targeting

Setup• Set up your application to receive notifications

• iOS

• Upload certificates to Parse servers

• Update application to register for push

• Android

• Update app permissions

• Register application for push service

• Parse guides are your friend

Installations

• Each installation of your app is saved to Parse

• Used to target a specific device

• Use installations in conjunction with channels

• Unique per installation, not device

• Uninstalling and reinstalling generates new

installation ID

Channels

• Users can be subscribed to channels

• Considered to be a grouping of installations

• Use for specific group based messaging or

marketing

• Pushes can be sent directly from an app

• Great for notifying users of related information

Advanced Targeting

• Query for specific users

• Save keys to an installation object

• Query that installation object subset

• Save Users to installation objects!!!

Analytics

• Track app opens

• Custom analytics, similar to Google Analytics

• Track event with a dictionary or map of

dimensions

• View open rates, installation rates, crashes, etc.

Other Goodies• Cloud Code

• Uses Javascript API

• Complex queries and endpoints

• Background Jobs

• Scheduled tasks for processing data

• Work similar to cron tasks

• Uses Javascript API

Other Goodies• Boilerplate UI

• Authentication

• Registration

• Table Views / List Views

• In App Purchases

• Add handlers to monitor when objects are purchased

• Purchase object through Parse classes

• Store downloadable purchases as Parse files

Get Building!

• parse.com

• @codefortravel

• www.justecho.com