Top Banner
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
91
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mobile Backend as a Service(MBaaS)

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

Page 2: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

2

https://speakerdeck.com/jmortega

Page 3: Mobile Backend as a Service(MBaaS)

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

Page 4: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

4

SQLite / Core Data

Persistence in Mobile

Page 5: Mobile Backend as a Service(MBaaS)

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

Page 6: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

6

Persistence in Mobile

Objects vs Tables

Object Relational Mapping

Page 7: Mobile Backend as a Service(MBaaS)

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();

Page 8: Mobile Backend as a Service(MBaaS)

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)

Page 9: Mobile Backend as a Service(MBaaS)

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)

Page 10: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

10

BaaS

Page 11: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

11

BaaS

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

Page 12: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

12

MBaaS APIs

Page 13: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

13

MBaaS APIs

Page 14: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

14

MBaaS architecture

Page 15: Mobile Backend as a Service(MBaaS)

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

Page 16: Mobile Backend as a Service(MBaaS)

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

Page 17: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

17

Startups

Page 18: Mobile Backend as a Service(MBaaS)

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

Page 19: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

19

Startups

Page 20: Mobile Backend as a Service(MBaaS)

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

Page 21: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

21

Storage support

Page 22: Mobile Backend as a Service(MBaaS)

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

Page 23: Mobile Backend as a Service(MBaaS)

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

Page 24: Mobile Backend as a 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)

Page 25: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

25

Google Cloud Messaging(GCM)

Page 26: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

26

Google Cloud Messaging(GCM)

https://console.developers.google.com

Page 27: Mobile Backend as a Service(MBaaS)

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

Page 28: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

28

Page 29: Mobile Backend as a Service(MBaaS)

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.

Page 30: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

30

Kinvey Data management

NO SQL DataBases

REST API

CLOUD CODE

Page 31: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

31

Kinvey Data Link

Page 32: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

32

Kinvey API REST

Page 33: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

33

Kinvey API REST OPERATIONS

Page 34: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

34

Kinvey API REST OPERATIONS

Page 35: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

35

Kinvey CLOUD CODE

JavaScript / Custom endpoints

Page 36: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

36

Kinvey Users management

Page 37: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

37

Kinvey Import/Export data

Page 38: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

38

Kinvey Push notifications

Page 39: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

39

Kinvey

Page 40: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

40

Page 41: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

41

BackBeam

Page 42: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

42

BackBeam

Page 43: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

43

BackBeam

Page 44: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

44

Page 45: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

45

Backendless Data Browser

Page 46: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

46

Backendless data type & relations

Page 47: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

47

Backendless Export data

Page 48: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

48

Backendless generate code

Page 49: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

49

Backendless Project

Page 50: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

50

Backendless Project

Page 51: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

51

Backendless security

Page 52: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

52

Backendless security

Page 53: Mobile Backend as a Service(MBaaS)

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" ); } } );

Page 54: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

54

Page 55: Mobile Backend as a Service(MBaaS)

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

Page 56: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

56

Page 57: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

57

Parse ARCHITECTURE

Page 58: Mobile Backend as a Service(MBaaS)

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

Page 59: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

59

Parse CROSS-PLATFORM SUPPORT

Page 60: Mobile Backend as a Service(MBaaS)

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”);

Page 61: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

61

Parse Application Keys + Installations

Page 62: Mobile Backend as a Service(MBaaS)

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());

Page 63: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

63

Parse Data browser + filter

Page 64: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

64

Parse Data browser

Page 65: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

65

Parse Cloud Code

Write our owns API functions with javascript

Page 66: Mobile Backend as a Service(MBaaS)

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();

Page 67: Mobile Backend as a Service(MBaaS)

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);

Page 68: Mobile Backend as a Service(MBaaS)

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();

Page 69: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

69

Parse Object with files

Page 70: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

70

Parse Data Entity type

Page 71: Mobile Backend as a Service(MBaaS)

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);

Page 72: Mobile Backend as a Service(MBaaS)

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.

Page 73: Mobile Backend as a Service(MBaaS)

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); } });

Page 74: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

74

Parse Push Notifications

Enabling Push Notifications

Page 75: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

75

Parse SDK

Page 76: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

76

Parse Push Notifications

Page 77: Mobile Backend as a Service(MBaaS)

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();

Page 78: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

78

API REST

Page 79: Mobile Backend as a Service(MBaaS)

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+""; }} }); }

Page 80: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

80

PERMISSIONS / ACL

Page 81: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

81

PARSE ANALYTICS

Page 82: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

82

PARSE IMPORT DATA JSON/CSV

Page 83: Mobile Backend as a Service(MBaaS)

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();

Page 84: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

84

PARSE USER MANAGMENT

Page 85: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

85

https://github.com/jmortega/parseProjects

Page 86: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

86

Parse T3chfest

Page 87: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

87

Parse T3chfest

Page 88: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

88

Parse Login

Page 89: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

89

PARSE EXAMPLES https://parse.com/tutorials

Page 90: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

90

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

Page 91: Mobile Backend as a Service(MBaaS)

Mobile Backend as a Service(MBaaS) Leganés

12-13 Febrero 2015

91