"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

66

Transcript of "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Page 1: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
Page 2: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
Page 3: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

5 мобильных платформ – один готовый бэкенд в облаке

от потребностей к использованию

Владимир Юнев Microsoft

Page 4: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Agenda

Идеальный бэкенд для мобильных приложений – какой он?

Page 5: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Мобильное приложение и данные

Мы создаем мобильное приложение Но где нам хранить данные?

? данные пользователя, таблицы рекордов, настройки приложения, логи и так далее

Page 6: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Мобильное приложение и данные

Мы создаем мобильное приложение А давайте построим свое хранилище

VPS + OS

СУБД

Среда исполнения

Бизнес-логика

REST API

? все еще

?

Page 7: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Данные

Идеальный бэкенд для мобильных приложений – это…

SQL

REST

API

, Ope

n So

urce

SD

Ks

Пуш-уведомления

Серверный код

Git

Custom REST Web API CRON

Аутентификация

Facebook Twitter

Microsoft Account Google Active

Directory

Table Blobs

SQL SQL

SQL

Обработка CRUD

Node.js, NPM

MongoDB

Масштабирование по требованию и автоматически

Бесплатный тариф

Администрирование, скрипты, мониторинг, логи

Store - 3rd party сервисы: DB, Mail, SMS, Auth0, OCR, …

Page 8: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ИСТОРИЯ четыре друга

Page 9: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ЖИЛИ–БЫЛИ 4 ДРУГА Эрик, Стэн, Кайл и Кенни

Page 10: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

И РЕШИЛИ ОНИ СРУБИТЬ БАБЛО

говорят, народ хорошо платит за мобильные приложения

Page 11: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

СКОРО ПЕРЕД НИМИ ВСТАЛА ПРОБЛЕМА

где хранить данные из мобильных приложений?!

?

Page 12: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

РЕШЕНИЕ

Хостинг и ОС

СУБД

Масштабирование,Балансировка,Отказоустойчивость,Бэкапы

PHP, REST API

Бизнес-логика

Мобильный бэкенд

как сервис!

Page 13: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ШЛО ВРЕМЯ… пока Эрик разбирался с хостингомСтэн и Кайл писали код мобильных приложений

Page 14: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ШЛО ВРЕМЯ… пока Эрику настраивали БД и писали код бэкендаСтэн и Кайл писали код мобильных приложений

Page 15: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ШЛО ВРЕМЯ… пока Эрик обсуждал бизнес-логикуСтэн и Кайл засабмитили приложения в магазин

Page 16: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ШЛО ВРЕМЯ… пока Эрик разбирался со сбоями и отказамиСтэн и Кайл начали рубить бабло со своих приложений

Page 17: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ШЛО ВРЕМЯ… Да, Эрик почти закончил свой бэкендА Стэн и Кайл уже успели разработать приложения под iOS и Android для одного и того же облачного бэкенда

Page 18: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

!  Потратил кучу времени на посторонние задачи

!  Потратил силы и средства на постройку своего велосипеда

!  Проблемы с масштабированием, надежностью

!  Пока не начал рубить бабло

!  Занимались бизнес-задачей – писали мобильные приложения

!  Воспользовались готовым облачным бэкендом как сервисом

!  Масштабируемость облака, надежность и отказоустойчивость

!  Рубят бабло уже с четырех приложений

ИТОГИ

Page 19: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

А КЕННИ…? Мы точно не знаем что произошло с Кенни…

Page 20: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

А КЕННИ…? … похоже, он так и не справился с установкой рабочего окружения для разработки под Android.

О, мой бог! Андроид убил Кенни!

Сволочь!

Page 21: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО Создание бэкенда. Управлениеи масштабирование

Page 22: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Создание бэкенда, мониторинг, логи

Page 23: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Масштабирование бэкенда

Page 24: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО Сохраняем данные в облаке, получаем на клиенте

Page 25: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

URL и ключ доступа приложения

Page 26: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Создание и управление таблицами

Page 27: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Подключение к бэкенду

public static MobileServiceClient MobileService = new MobileServiceClient( "AppUrl", "AppKey" );

@property (nonatomic, strong) MSClient *client; self.client = [MSClient clientWithApplicationURLString:@"APPURL" applicationKey:@"APPKEY"]; private MobileServiceClient mClient;mClient = new MobileServiceClient(

"MobileServiceUrl", "AppKey", this).withFilter( new ProgressFilter());

var MobileServiceClient = new WindowsAzure.MobileServiceClient( 'AppUrl', 'AppKey'),  

Page 28: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Обращение к таблице SQL

private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();

await todoTable.InsertAsync(todoItem); @property (nonatomic, strong) MSTable *table; self.table = [self.client tableWithName:@"TodoItem"]; [self.table insert:item completion:^(NSDictionary *result,

NSError *error) { NSUInteger index = [items count]; [(NSMutableArray *)items insertObject:item atIndex:index];

mToDoTable = mClient.getTable(ToDoItem.class);mToDoTable.insert(item, new TableOperationCallback<ToDoItem>() { … todoItemTable = MobileServiceClient.getTable('todoitem');todoItemTable.insert({ text: itemText, complete: false })

.then(refreshTodoItems);  

Page 29: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Постраничные данные на клиенте

     .Skip(3).Take(3);  

   query.includeTotalCount  =  YES;  //  Request  the  total  item  count      query.fetchOffset  =  3;      query.fetchLimit  =  3;  

   mToDoTable.where().field("complete").eq(false).skip(3).top(3)

   var  query  =  todoItemTable.where({  complete:  false  }).skip(3).take(3);  

Page 30: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Скрипты на сервере

'select  *  from  orders  where  country  =  "Russia"

tables.getTable('address');

log("Inserting  item  '%j'.",  item);  

Page 31: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО Авторизуемся в социальных сетях

Page 32: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Аутентификация и бэкенд

Page 33: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Аутентификация пользователя

private MobileServiceUser user; user = await App.MobileService .LoginAsync(MobileServiceAuthenticationProvider.Facebook);

[client loginWithProvider:@"facebook" controller:self animated:YES completion:^ (MSUser *user, NSError *error) {

[self refresh]; }];

mClient.login(MobileServiceAuthenticationProvider.Google, new UserAuthenticationCallback() { …

client.login("facebook").then(refreshAuthDisplay, function(error) { alert(error);

});  

Page 34: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО Рассылаем уведомления миллионам пользователей

Page 35: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Push Notifications

Page 36: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Подключение учетных записей пуш-сервисов

Page 37: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Пуш-Уведомления Windows  Store  push.wns.sendToastText04(item.channel,  {text1:  text},  …  );  Windows  Phone  push.mpns.sendFlipTile(item.channel,  {title:  text},  …);  iOS  push.apns.send(item.token,  {  

 alert:  text,      payload:  {  inAppMessage:  details  }  

},  …);  Android  push.gcm.send(item.registrationId,  item.text,  …);  

Page 38: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Единый бэкенд для пуш-уведомлений function  sendNotifications()  {                                                  …  

 if  (deviceInfo.platform  ==  'iOS')  {      push.apns.send(deviceInfo.pushToken,          {  alert:  "New  something  created"  });    }  else  if  (deviceInfo.platform  ==  'Android')  {      push.gcm.send(deviceInfo.pushToken,          "New  something  created");    }  

…  }  

Page 39: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО Собственный код в бэкенде. Git и Node.js – наш выбор

Page 40: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Создание своего REST Web API

Page 41: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Интеграция с Git

Page 42: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Планировщик (CRON)

Page 43: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО 3rd party сервисы

Page 44: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Windows Azure Store

Page 45: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Отправка почтового сообщения SendGrid var  SendGrid  =  require('sendgrid').SendGrid;  function  sendEmail(item)  {          var  sendgrid  =  new  SendGrid('**username**',  '**password**');                        sendgrid.send({  

   to:  '**email-­‐address**',        from:  '**from-­‐address**',      subject:  'New  to-­‐do  item',      text:  Text  is:  '  +  item.text  

       },  function(success,  message)  {    …  

       });  }  

Page 46: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Отправка SMS через Twilio var  twilio  =  require('twilio');  exports.post  =  function(request,  response)  {          var  client  =  new  twilio.RestClient('[ACCOUNT_SID]',  'AUTH_TOKEN');          client.sendSms({                  to:'[]',  from:'[]',                  body:‘Hello!  Testing  Twilio  and  node.js'          },  function(error,  message)  {  …          });  };  

Page 47: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО Управление через командную строку

Page 48: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Windows Azure Command-Line Tools

Windows Windows Azure Command-Line Tools Installer

OSX Windows Azure SDK Installer

Linux Node.js npm install azure-cli -g

Page 49: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Управление через командную строку

Создание  сервиса  azure  mobile  create  <service-­‐name>    

 <server-­‐admin>  <server-­‐password>  Список  сервисов  azure  mobile  list  Удаление  сервиса  azure  mobile  delete  <service-­‐name>  -­‐a  -­‐q  

Page 50: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Управление через командную строку

Создание  таблицы  azure  mobile  table  create    

 <service-­‐name>  <table-­‐name>  Удаление  таблицы  azure  mobile  table  delete    

 <service-­‐name>  <table-­‐name>  -­‐q  Регистрирование  скрипта  для  обработки  CRUD  azure  mobile  script  upload  todolist    table/todoitems.insert.js  http://www.windowsazure.com/en-us/manage/linux/other-resources/command-line-tools/#Commands_to_manage_mobile_services

Page 51: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ДЕМО REST API

Page 52: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Login •  Verb: POST •  URL: https://<service-name>.azure-mobile.net/login?mode=authenticationToken •  Uri Parameter: mode •  Request Headers:

•  Body: JSON object {"authenticationToken":“<authentication-provider-token>"} for Microsoft{“access_token":“<authentication-provider-token>"} for Facebook and Google

•  Response: JSON object{"user":{"userId":"<authentication-provider>:cb392ceae24a44408ed863482b20f274"}, "authenticationToken":"<mobile-service-authentication-token>"}

Request Header Required  Value

Accept No Set this header to application/json.

Content-Length Yes The length of the request body.

Content-Type No Set this header to application/json.

Page 53: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Query Records •  Verb: GET •  URL: https://<service_name>.azure-mobile.net/tables/<table_name> •  URI Parameters: $filter, $inlinecount, $orderby, $select, $skip, $top •  Request Headers:

•  Response: data in JSON format

•  Samples: •  GET https://plunko.azure-mobile.net/tables/todoitem •  GET https://plunko.azure-mobile.net/tables/todoitem/1 •  GET https://plunko.azure-mobile.net/tables/todoitem?$filter=(complete%20eq%20false) •  GET https://plunko.azure-mobile.net/tables/todoitem?$filter=(complete%20eq%20false)&$orderby=text%20asc

Request Header Required  Value

Accept No Set this header to application/json.

X-zumo-application Conditional The application key of the mobile service. You must specify a valid application key when required to access the table operation. This is the default table operation access permission.

X-zumo-auth Conditional The service-generated authentication token for an authenticated user. You must specify a token for an authenticated user when required to access the table operation.

Page 54: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Insert Record •  Verb: POST •  URL: https://<service_name>.azure-mobile.net/tables/<table_name> •  Request Headers:

•  Body: new record in JSON format •  Response: The JSON representation of the inserted item, which includes the ID for the

item generated by the mobile service. •  Sample:

•  POST https://plunko.azure-mobile.net/tables/todoitem •  Body: {"text" : "Go to Las Vegas", "complete": false, "when" : "don't know"}

Request Header Required  Value

Accept No Set this header to application/json. Content-Length Yes The length of the request body.

Content-Type No Set this header to application/json.

X-zumo-application Conditional The application key of the mobile service.

X-zumo-auth Conditional The service-generated authentication token for an authenticated user.

Page 55: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Update Record •  Verb: PATCH •  URL: https://<service_name>.azure-mobile.net/tables/<table_name>/<item_id> •  Request Headers:

•  Body: The updated values encoded in JSON format, along with the optional id value of the object.

•  Response: The JSON representation of the updated item

•  Sample: •  PATCH https://plunko.azure-mobile.net/tables/todoitem/1 •  Body: {"text" : "Go to Barcelona", "complete": false, "when" : "don't know"}

Request Header Required  Value

Accept No Set this header to application/json. Content-Length Yes The length of the request body.

Content-Type No Set this header to application/json.

X-zumo-application Conditional The application key of the mobile service.

X-zumo-auth Conditional The service-generated authentication token for an authenticated user.

Page 56: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Delete Record •  Verb: DELETE •  URL: https://<service_name>.azure-mobile.net/tables/<table_name>/<item_id> •  Request Headers:

•  Body: none •  Response: none

•  Sample: •  DELETE https://plunko.azure-mobile.net/tables/todoitem/6

Request Header Required  Value

X-zumo-application Conditional The application key of the mobile service.

X-zumo-auth Conditional The service-generated authentication token for an authenticated user.

Page 57: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ПРАЙСИНГ Сравнение с Parse.com Примеры использования

Page 58: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Тарифные планы и ценообразование

$Коммерческая доступность - 99.9%

Бесплатно Standard Premium

Цена Бесплатно (до 10 сервисов/

месяц)

$25 в месяц (за экземпляр*)

$199 в месяц (за экземпляр*)

Вызовы API 500K (для всей подписки)

1.5M (для каждого сервиса)

15M (для каждого сервиса)

Активные устройства

500 Без ограничений Без ограничений

Масштабирование

N/A До 6 Standard-экземпляров

До 10 Enterprise-экземпляров

Работы планировщика

Ограничено Включено Включено

SQL Database (требуется)

20MB включено, при превышении применяются

тарифы

20MB включено, при превышении

применяются тарифы

20MB включено, при превышении

применяются тарифы Подробно о ценах: http://aka.ms/Xbkujw

Page 59: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Сравнение с Parse.com

Mobile Services Pros: - SQL Database – возможность делать все, что вы можете делать с SQL Server: развернуть у себя, запросы, отчеты, BI;

- CRON-сервисы, планировщик задач; - Инфраструктура глобальной платформы Windows Azure: надежность, присутствие по всему миру, интеграция компонент, постоянное быстрое развитие;

- $25 plan, масштабирование в 10 раз, автомасштабирование; - Расширение через Windows Azure Store.

Page 60: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Где используется Windows Azure Mobile Services?

Приложения для iOS

Приложения для Android

Приложение для Windows Phone

Page 61: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

www.aplana.com

Наши клиенты

10/1/13 61

Page 62: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

www.aplana.com

Как  мы  используем  Azure  Mobile  Services  

10/1/13 62

Server  (REST  API)  

Azure  Mobile  Services  (Пуш  нотификация,  

авторизация  в  соц.  сетях)    

Page 63: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Примеры использования

Page 64: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

ЗАКЛЮЧЕНИЕ Windows Azure Mobile Services

Page 65: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

CLOUD OS SUMMIT

Page 66: "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft

Спасибо за внимание! Ваши вопросы

Бесплатный триалhttp://WindowsAzure.com Центр экспертизы на русском языкеhttp://AzureHub.ru Группа «Windows Azure для всех» на Facebookhttp://fb.com/groups/azurerus Консультации от группы экспертов[email protected]