Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 2 https://speakerdeck.com/jmortega

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 4 SQLite / Core Data Persistence in Mobile

Slide 5

Slide 5 text

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/ /databases/ Only acces with root DataModel editor in Xcode for register objects and their relationships

Slide 6

Slide 6 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 6 Persistence in Mobile Objects vs Tables Object Relational Mapping

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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)

Slide 9

Slide 9 text

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)

Slide 10

Slide 10 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 10 BaaS

Slide 11

Slide 11 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 11 BaaS MBaaS= Cloud-Mobile Services + Mobile SDKs + Management Console

Slide 12

Slide 12 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 12 MBaaS APIs

Slide 13

Slide 13 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 13 MBaaS APIs

Slide 14

Slide 14 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 14 MBaaS architecture

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 17 Startups

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 19 Startups

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 21 Storage support

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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)

Slide 25

Slide 25 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 25 Google Cloud Messaging(GCM)

Slide 26

Slide 26 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 26 Google Cloud Messaging(GCM) https://console.developers.google.com

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 28

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 30 Kinvey Data management NO SQL DataBases REST API CLOUD CODE

Slide 31

Slide 31 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 31 Kinvey Data Link

Slide 32

Slide 32 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 32 Kinvey API REST

Slide 33

Slide 33 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 33 Kinvey API REST OPERATIONS

Slide 34

Slide 34 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 34 Kinvey API REST OPERATIONS

Slide 35

Slide 35 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 35 Kinvey CLOUD CODE  JavaScript / Custom endpoints

Slide 36

Slide 36 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 36 Kinvey Users management

Slide 37

Slide 37 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 37 Kinvey Import/Export data

Slide 38

Slide 38 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 38 Kinvey Push notifications

Slide 39

Slide 39 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 39 Kinvey

Slide 40

Slide 40 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 40

Slide 41

Slide 41 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 41 BackBeam

Slide 42

Slide 42 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 42 BackBeam

Slide 43

Slide 43 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 43 BackBeam

Slide 44

Slide 44 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 44

Slide 45

Slide 45 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 45 Backendless Data Browser

Slide 46

Slide 46 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 46 Backendless data type & relations

Slide 47

Slide 47 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 47 Backendless Export data

Slide 48

Slide 48 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 48 Backendless generate code

Slide 49

Slide 49 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 49 Backendless Project

Slide 50

Slide 50 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 50 Backendless Project

Slide 51

Slide 51 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 51 Backendless security

Slide 52

Slide 52 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 52 Backendless security

Slide 53

Slide 53 text

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() { @Override public void handleResponse( BackendlessUser backendlessUser ) { Log.i( "Registration", backendlessUser.getEmail() + " successfully registered" ); } } );

Slide 54

Slide 54 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 54

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 56

Slide 57

Slide 57 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 57 Parse ARCHITECTURE

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 59 Parse CROSS-PLATFORM SUPPORT

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 61 Parse Application Keys + Installations

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 63 Parse Data browser + filter

Slide 64

Slide 64 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 64 Parse Data browser

Slide 65

Slide 65 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 65 Parse Cloud Code  Write our owns API functions with javascript

Slide 66

Slide 66 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 66 Parse with ANDROID // 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();

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 69 Parse Object with files

Slide 70

Slide 70 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 70 Parse Data Entity type

Slide 71

Slide 71 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 71 Query Language ParseQuery query = ParseQuery.getQuery(“Event"); query.whereEqualTo(“eventName", “techfest"); query.findInBackground(new FindCallback() { public void done(List 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);

Slide 72

Slide 72 text

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.

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 74 Parse Push Notifications Enabling Push Notifications

Slide 75

Slide 75 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 75 Parse SDK

Slide 76

Slide 76 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 76 Parse Push Notifications

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 78 API REST

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 80 PERMISSIONS / ACL

Slide 81

Slide 81 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 81 PARSE ANALYTICS

Slide 82

Slide 82 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 82 PARSE IMPORT DATA JSON/CSV

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 84 PARSE USER MANAGMENT

Slide 85

Slide 85 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 85 https://github.com/jmortega/parseProjects

Slide 86

Slide 86 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 86 Parse T3chfest

Slide 87

Slide 87 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 87 Parse T3chfest

Slide 88

Slide 88 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 88 Parse Login

Slide 89

Slide 89 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 89 PARSE EXAMPLES https://parse.com/tutorials

Slide 90

Slide 90 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 90 REFERENCES http://www.androidbook.com/expertandroid/projects

Slide 91

Slide 91 text

Mobile Backend as a Service(MBaaS) Leganés 12-13 Febrero 2015 91