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.
Экосистема
BaaSMEAPPaaS
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/

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