mobile backend as a service(mbaas)

91
José Manuel Ortega Candel Mobile Backend as a Service(MBaaS) Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/ Leganés 12-13 Febrero 2015

Upload: jose-manuel-ortega-candel

Post on 16-Jul-2015

251 views

Category:

Mobile


2 download

TRANSCRIPT

José Manuel Ortega Candel

Mobile Backend as a Service(MBaaS)

Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/

Leganés

12-13 Febrero 2015

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

2

https://speakerdeck.com/jmortega

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

3

Persistence in Mobile

iNDEX

Cloud Computing / BaaS

MBaaS features /architecture/ Startups

Push Notifications / GCM / API REST / Storage

Kinvey / Backendless / BackBeam / Parse

Demos on Android

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

4

SQLite / Core Data

Persistence in Mobile

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

5

Persistence in Mobile

Android iOS SQLite

android.database.sqlite Tables and relations

Core Data

Objects

DataModel

Content Providers

/data/data/<Application-Package>

/databases/<database-name> Only acces with root

DataModel editor in Xcode for

register objects and their

relationships

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

6

Persistence in Mobile

Objects vs Tables

Object Relational Mapping

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

7

Persistence in Mobile

public class Event extends Entity { public int id; public String name; }

Event e = Entity.query(Event.class).where("id=1").execute(); p.name = “Techfest"; p.save();

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

8

Cloud Computing

PaaS(Platform as a Service)

IaaS(Infraestructure as a Service)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

9

Cloud Computing

BaaS(Backend as a Service) /MBaaS

SaaS(Software as a Service)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

10

BaaS

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

11

BaaS

MBaaS= Cloud-Mobile Services + Mobile SDKs + Management Console

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

12

MBaaS APIs

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

13

MBaaS APIs

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

14

MBaaS architecture

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

15

MBaaS features

API REST for CRUD operations(GET,POST,UPDATE,DELETE,PATCH)

Multi platform SDK

Cloud Storage

Push notifications

User management

Data Browser

Query language

Import/Export data

Analytics / Monetization

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

16

MBaaS features

Reduce server side coding developers can focus on front-end development often providers offer SDKs that wrap REST API calls

and handle in/out parameters: both HTML/JS and native (iOS, Android,Windows

Phone) No server setup, ready to use (HOSTED SERVICE) Deployed on the cloud, with built-in scalability

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

17

Startups

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

18

Others

Appcelerator(Titanium) http://appery.io http://www.applicasa.com http://www.apiomat.com http://www.kumulos.com

Open Source http://www.baasbox.com

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

19

Startups

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

20

MBaaS

OBJECT-BASED DATA STORAGE

DATA SYNCHRONIZED

USER ACCOUNTS & AUTHENTICATION

REAL-TIME ANALYTICS

PUSH NOTIFICATIONS

API REST

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

21

Storage support

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

22

{ "results": [

{

"createdAt": "2015-01-05T14:54:00.650Z",

"eventImage": {

"__type": "File",

"name": "tfss-b84799aa-4366-488d-afe7-1afdb5646dee-t3chfest_slider.jpg",

"url": "http://files.parsetfss.com/5ffebb1f-a86a-4d00-8dcb-6b9e349f4838/tfss-b84799aa-4366-488d-afe7-1afdb5646dee-t3chfest_slider.jpg" },

"eventName": "techFest",

"eventURL": "https://techfest.uc3m.es/",

"objectId": "HxmPtSWnqa", "updatedAt": "2015-02-12T14:56:00.866Z" }] }

JSON Object

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

23

Push Notifications

Var channel= _application.pubSub.Subscribe(“channel name”); channel.Send({message});

Push Notification Service

MBaaS

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

24

Push Notifications

Multiplatforms messages

Enable server applications to send information to mobile apps even when the app isn’t in use

The device displays the information using a “badge,” alert, or pop up message. A push notification uses the service provided by the device’s operating system:

iOS - Apple Push Notification service (APNS)

Android - Google Cloud Messaging (GCM)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

25

Google Cloud Messaging(GCM)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

26

Google Cloud Messaging(GCM)

https://console.developers.google.com

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

27

Push Notifications

iOS

Apple Push Notification service (APNs) Certificate Private Key

Android

Google Cloud Messaging API KEY Sender ID

Google API Console > Authentication && Project Number

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

28

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

29

Kinvey Data collection

Kinvey stores data as collections and entities. Entities are JSON documents. Collections belong to applications. Internally, data is stored in a MongoDB cluster.

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

30

Kinvey Data management

NO SQL DataBases

REST API

CLOUD CODE

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

31

Kinvey Data Link

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

32

Kinvey API REST

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

33

Kinvey API REST OPERATIONS

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

34

Kinvey API REST OPERATIONS

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

35

Kinvey CLOUD CODE

JavaScript / Custom endpoints

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

36

Kinvey Users management

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

37

Kinvey Import/Export data

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

38

Kinvey Push notifications

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

39

Kinvey

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

40

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

41

BackBeam

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

42

BackBeam

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

43

BackBeam

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

44

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

45

Backendless Data Browser

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

46

Backendless data type & relations

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

47

Backendless Export data

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

48

Backendless generate code

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

49

Backendless Project

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

50

Backendless Project

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

51

Backendless security

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

52

Backendless security

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

53

Backendless User managment

BackendlessUser user = new BackendlessUser(); user.setEmail( “[email protected]" ); user.setPassword( "my_super_password" ); Backendless.UserService.register( user, new BackendlessCallback<BackendlessUser>() { @Override public void handleResponse( BackendlessUser backendlessUser ) { Log.i( "Registration", backendlessUser.getEmail() + " successfully registered" ); } } );

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

54

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

55

Security

Authentication && Authorization

Basic Authentication userName and password encoded in Base 64 authorization header: Authorization: Basic bXlVc2VybmFtZTpteVBhc3N3b3Jk

Session Authentication

Auth token / Social Networks

Permissions Shared / Private / Read Only / Full

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

56

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

57

Parse ARCHITECTURE

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

58

Parse SERVICES

User Authentication

Push Notification

Data Storage

Rest API JavaScript SDK

iOS SDK Android SDK JavaScript SDK

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

59

Parse CROSS-PLATFORM SUPPORT

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

60

Connect your app with services

APPLICATION ID

CLIENT KEY

+ Parse.initialize(“APP_ID”,”C_KEY”);

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

61

Parse Application Keys + Installations

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

62

Parse Objects

Parse stores data internally as flat JSON Documents, called ParseObject, with have the restriction that keys must be alphanumeric strings. Parse automatically creates ‘classes’ for ParseObjects, grouping objects with similar properties. Classes and all objects associated to them belong to applications, which can be defined on the Parse web interface.

ParseObject event = new ParseObject(“Event");

event.put(“eventName", “techfest”);

event.put(“eventURL", “http://techfest.uc3m.es");

event.put(“eventDate", new Date());

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

63

Parse Data browser + filter

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

64

Parse Data browser

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

65

Parse Cloud Code

Write our owns API functions with javascript

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

66

Parse with ANDROID

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

// Enable Local Datastore.

Parse.enableLocalDatastore(this);

Parse.initialize(this, “APPLICATION_ID", “CLIENT_KEY");

ParseObject event = new ParseObject(“Event");

event.put(“eventName", “techfest”);

event.put(“eventURL", “http://techfest.uc3m.es");

event.put(“eventDate", new Date());

event.saveEventually(); //Object saved when user has network connection

event.saveInBackground();

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

67

Parse Object

import com.parse.ParseClassName; import com.parse.ParseObject; @ParseClassName(“Event") public class Event extends ParseObject{ public Event(){} public String getName(){ return getString(“eventName"); } public void setName(String name){ put(“eventName", name); } }} ParseObject.registerSubclass(Event.class);

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

68

Parse Object with files

byte[] data = myPhotoObject.toByteArray();

ParseFile eventPhoto = new ParseFile("t3chfest.jpg", data);

eventPhoto.saveInBackground();

ParseObject event = new ParseObject("Event");

event.put("name", "t3chFest");

event.put(”photo”, eventPhoto);

event.saveInBackground();

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

69

Parse Object with files

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

70

Parse Data Entity type

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

71

Query Language

ParseQuery<ParseObject> query = ParseQuery.getQuery(“Event");

query.whereEqualTo(“eventName", “techfest");

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

public void done(List<ParseObject> eventList, ParseException e) {

if (e == null) {

Log.d(“events", "Retrieved " + eventList.size() + " events");

} else {

Log.d(“events", "Error: " + e.getMessage());

}

}

});

query.setCachePolicy(CachePolicy.CACHE_THEN_NETWORK);

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

72

CACHE

query.cachePolicy property CachePolicy.CACHE_ELSE_NETWORK

The query first tries to load from the cache, but if that fails, it loads results from the network.If neither cache nor network succeed, there is a PFError. CachePolicy.CACHE_THEN_NETWORK The query first loads from the cache, then loads from the network. In this case, the callback will actually be called twice - first with the cached results, then with the network results. Since it returns two results at different times, this cache policy cannot be used synchronously with findObjects.

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

73

JavaScript

var event= Parse.Object.extend ("Event"); var query = new Parse.Query (event); query.find ({ success: function (results) { $scope.data.events = results; }, error: function (error) { alert ("Error:" + error.code + "" + error.message); } });

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

74

Parse Push Notifications

Enabling Push Notifications

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

75

Parse SDK

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

76

Parse Push Notifications

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

77

Parse Push Notifications //Enable to receive push PushService.setDefaultPushCallback(this, RespondToPushActivity.class); ParseInstallation pi = ParseInstallation.getCurrentInstallation(); //Register a channel to test push channels Context ctx = this.getApplicationContext(); PushService.subscribe(ctx, "ch1", RespondToPushActivity.class); pi.saveEventually();

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

78

API REST

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

79

API REST AJAX CALL var headers = {"X-Parse-Application-Id":"YOUR-APP-ID-HERE", "X-Parse-REST-API-Key":"YOUR-REST-API-KEY-HERE"};

function getData() { $.ajax({ "type":"GET", "url":"https://api.parse.com/1/classes/Event", "dataType":"json", "contentType":"application/json", "headers":headers, success:function(data, status, xhr) { var result = ""; for(var i = 0; i < data.results.length; i++) {

result = result +""+ data.results[i].eventName+" / "+ data.results[i].eventURL+""; }} }); }

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

80

PERMISSIONS / ACL

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

81

PARSE ANALYTICS

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

82

PARSE IMPORT DATA JSON/CSV

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

83

PARSE USER MANAGMENT //login ParseUser.logInInBackground(username, password, new LogInCallback() { public void done(ParseUser user, com.parse.ParseException e) { }}); //signUp ParseUser user = new ParseUser(); user.setUsername(username); user.setPassword(password); user.setEmail(email); //optional user.signUpInBackground(new SignUpCallback() { public void done(com.parse.ParseException e) { }}); //Check if user is logged ParseUser currentUser = ParseUser.getCurrentUser();

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

84

PARSE USER MANAGMENT

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

85

https://github.com/jmortega/parseProjects

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

86

Parse T3chfest

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

87

Parse T3chfest

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

88

Parse Login

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

89

PARSE EXAMPLES https://parse.com/tutorials

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

90

REFERENCES http://www.androidbook.com/expertandroid/projects

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

91