Rambler.iOS #2: Практика применения BaaS в мобильных сервисах

Post on 16-Jul-2015

358 views 2 download

Transcript of Rambler.iOS #2: Практика применения BaaS в мобильных сервисах

BaaS (MBaaS) Практики использования

Много их

•  Parse • Built.io • Kinvey • …

Возможности

•  Remote + Local Data storage + synchronization •  User Management •  Social Features •  Push notifications •  Cloud code •  On-device encryption •  REST API + 3rd party services •  Geo Data

Все их хотят

•  Facebook приобрел Parse, •  PayPal купил StackMob, •  Salesforce запустил Salesforce Platform Mobile

Services, •  AWS выпустил пакет своих собственных мобильных утилит,

•  Pivotal запустил Pivotal CF Mobile Services, •  RedHat приобрел FeedHenry.

Экосистема

BaaS MEAP PaaS Mobile Services Framework

Facebook

Twitter

Foursquare

Flurry

Heroku

OpenShift

GAE

Azure

AWS

Parse

Kii

Kinvey

Backendless

Android

iOS

Windows

HTML5

Xamarin

Unity

IBM MobileFirst

Kony

Verivo

PaaS vs BaaS vs Meap

•  Flexible vs. Proprietary •  Self-Service vs. Services Based • Cloud Service Subscription vs. On-Premise

License

+PaaS

Где применяются?

• Стартапы • Хакатоны • Инди-девелоперы • Интеграция с энтерпрайз

Еще один мессенджер

•  Groups of users (Chat rooms) •  Send messages to users subscribed to a topic •  Notify the app of new chat messages •  Query for objects on the cloud (messages,

photos, etc.) Log in with Facebook account

Модель

• User • ChatUser • ChatFriend • ChatRoom

Register the App

Add & Setup SDK

Check user (token)

Create Facebook App

Configure Facebook Settings (Facebook App ID)

Create ChatUser + find friends

ChatUser -> ChatFriend + ACL

Кейс №1: Плохой API

•  App version Backend version

•  Downgrade app?? •  Downgrade backend??

HashMap<String, Boolean> data = new HashMap<>(); data.put("app_version", 1); ParseCloud.callFunctionInBackground("checkVersion", new HashMap<String, Object>(), new FunctionCallback<String>() { @Override public void done(String result, ParseException e) { if (e == null) { boolean isOk = Boolean.parseBoolean(result); if(!isOk){ // show popup and exit } } } });

На клиенте

На сервере

Parse.Cloud.define("checkVersion", function(request, response) { var query = new Parse.Query(request.params. app_version); // check?

response.success(true);

});

Кейс №2: логгирование в приложении

• App crashes • Analytics •  Server logs • App logs???

ParseObject

•  class ParseObject •  class CustomLogObject extends ParseObject CustomLogObject myLog = new CustomLogObject(APP_TAGS); myLog.put(TIME_TAG, time());

myLog.put(USER_TAG, API.email); myLog.saveEventually();

Кейс №4: Проверка App Licensing

• Google Play • AppStore •  File hosting •  Torrents

Google Play App Licensing + BaaS

APP

GOOGLE PLAY CLIENT

LICENSE VALIDATOR

RAW DATA

SIGNED DATA + SIGNATURE

RAW DATA + SIGNED DATA + SIGNATURE

•  STRICT POLICY •  SERVER MANAGED

POLICY

Проверка подписи

Проверка данных приложения

Кейс №5: Вебхуки

•  Pre-processing for requests •  Post-processing for responses 1) Baas Our Prod Server 2) Our Prod server BaaS

Кейс №6: Загрузка данных по требованию

APP SERVER

APP SERVER

APP SERVER

APP SERVER

APP SERVER data

data

data

data

data

OR APP SERVER data

data

data data data data data

Parse Notification center

Server

Parse

APNS GCM

Device 1 Device 2 Device N

Проблемы MBaaS

•  ~= Vendor Lock-in • Flexibility? • High Latency (Non dedicated) • RIP of BaaS (Stackmob)

Dedicated BaaS

Вопросы?

•  http://searchsoa.techtarget.com/feature/Backend-as-a-Service-FAQs

•  https://s3.amazonaws.com/kinvey-fb-lp/docs/BaaS+vs+MEAP+201406.pdf

•  https://parse.com/docs/