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

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

on

  • 1,084 views

Какое бы мобильное приложение вы не разрабатывали (на iOS, Android, Windows Phone, Windows 8 или веб-версию на HTML5), лучшим ...

Какое бы мобильное приложение вы не разрабатывали (на iOS, Android, Windows Phone, Windows 8 или веб-версию на HTML5), лучшим выбором для бэкенда будет единая облачная платформа. В докладе речь пойдёт о требованиях мобильных разработчиков к серверному функционалу и сложностях, возникающих при сборке своих велосипедов. На примере Windows Azure Mobile Services мы рассмотрим готовое облачное решение, не требующее настройки и сопровождения, как альтернативу своему бэкенду. Вы узнаете, как облачную инфраструктуру можно использовать для отправки push-уведомлений и как интегрировать авторизацию с социальными сетями; как работать с серверным кодом мобильного приложения через Git и как масштабировать мобильный бэкенд по требованию, в том числе автоматически.

Statistics

Views

Total Views
1,084
Slideshare-icon Views on SlideShare
414
Embed Views
670

Actions

Likes
0
Downloads
8
Comments
0

5 Embeds 670

http://tech.yandex.ru 661
https://tech.yandex.ru 6
http://admin-ru.tech.yandex-team.ru 1
http://news.google.com 1
http://akhmetov.backoffice.dev1f.tech.yandex-team.ru 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 5 мобильных платформ – 
 один готовый бэкенд в облаке
 от потребностей к использованию Владимир Юнев Microsoft
    • Agenda Идеальный бэкенд для мобильных приложений – какой он?
    • Мобильное приложение и данные Мы создаем мобильное приложение Но где нам хранить данные? ?данные пользователя, таблицы рекордов, 
 настройки приложения, логи и так далее
    • Мобильное приложение и данные Мы создаем мобильное приложение А давайте построим 
 свое хранилище VPS + OS СУБД Среда исполнения Бизнес-логика REST API ? все еще ?
    • Данные Идеальный бэкенд для мобильных приложений – это… SQL RESTAPI,OpenSourceSDKs Пуш-уведомления Серверный код Git Custom REST 
 Web API CRON Аутентификация Facebook Twitter Microsoft Account Google Active Directory TableBlobs SQL SQL SQL Обработка 
 CRUD Node.js, NPM MongoDB Масштабирование по требованию и автоматически Бесплатный тариф Администрирование, скрипты, мониторинг, логи Store - 3rd party сервисы: 
 DB, Mail, SMS, Auth0, OCR, …
    • ИСТОРИЯ четыре друга
    • ЖИЛИ–БЫЛИ 4 ДРУГА Эрик, Стэн, Кайл и Кенни
    • И РЕШИЛИ ОНИ СРУБИТЬ БАБЛО говорят, народ хорошо платит 
 за мобильные приложения
    • СКОРО ПЕРЕД НИМИ ВСТАЛА ПРОБЛЕМА где хранить данные 
 из мобильных приложений?! ?
    • РЕШЕНИЕ Хостинг 
 и ОС СУБД Масштабирование,
 Балансировка,
 Отказоустойчивость,
 Бэкапы PHP, 
 REST API Бизнес-логика Мобильный бэкенд 
 как сервис!
    • ШЛО ВРЕМЯ… пока Эрик разбирался с хостингом
 Стэн и Кайл писали код мобильных приложений
    • ШЛО ВРЕМЯ… пока Эрику настраивали БД 
 и писали код бэкенда
 Стэн и Кайл писали код мобильных приложений
    • ШЛО ВРЕМЯ… пока Эрик обсуждал бизнес- логику
 Стэн и Кайл засабмитили приложения в магазин
    • ШЛО ВРЕМЯ… пока Эрик разбирался 
 со сбоями и отказами
 Стэн и Кайл начали рубить бабло 
 со своих приложений
    • ШЛО ВРЕМЯ… Да, Эрик почти закончил 
 свой бэкенд
 
 А Стэн и Кайл уже успели разработать приложения 
 под iOS и Android для одного 
 и того же облачного бэкенда
    • !  Потратил кучу времени 
 на посторонние задачи !  Потратил силы и средства 
 на постройку своего велосипеда !  Проблемы с масштабированием, надежностью !  Пока не начал рубить бабло !  Занимались бизнес-задачей – 
 писали мобильные приложения !  Воспользовались готовым облачным бэкендом как сервисом !  Масштабируемость облака, 
 надежность и отказоустойчивость !  Рубят бабло уже с четырех приложений ИТОГИ
    • А КЕННИ…? Мы точно не знаем что произошло с Кенни…
    • А КЕННИ…? … похоже, он так и не справился с установкой рабочего окружения для разработки под Android. О, мой бог! 
 Андроид убил Кенни! Сволочь!
    • ДЕМО Создание бэкенда. Управление
 и масштабирование
    • Создание бэкенда, мониторинг, логи
    • Масштабирование бэкенда
    • ДЕМО Сохраняем данные в облаке, получаем на клиенте
    • URL и ключ доступа приложения
    • Создание и управление таблицами
    • Подключение к бэкенду 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'),  
    • Обращение к таблице 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);  
    • Постраничные данные на клиенте      .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);  
    • Скрипты на сервере 'select  *  from  orders  where  country  =  "Russia" tables.getTable('address'); log("Inserting  item  '%j'.",  item);  
    • ДЕМО Авторизуемся 
 в социальных сетях
    • Аутентификация и бэкенд
    • Аутентификация пользователя 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); 
 });  
    • ДЕМО Рассылаем уведомления миллионам пользователей
    • Push Notifications
    • Подключение учетных записей пуш-сервисов
    • Пуш-Уведомления 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,  …);  
    • Единый бэкенд для пуш-уведомлений 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");    }   …   }  
    • ДЕМО Собственный код в бэкенде. Git и Node.js – наш выбор
    • Создание своего REST Web API
    • Интеграция с Git
    • Планировщик (CRON)
    • ДЕМО 3rd party сервисы
    • Windows Azure Store
    • Отправка почтового сообщения 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)  {    …          });   }  
    • Отправка 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)  {   …          });   };  
    • ДЕМО Управление через 
 командную строку
    • 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
    • Управление через командную строку Создание  сервиса   azure  mobile  create  <service-­‐name>      <server-­‐admin>  <server-­‐password>   Список  сервисов   azure  mobile  list   Удаление  сервиса   azure  mobile  delete  <service-­‐name>  -­‐a  -­‐q  
    • Управление через командную строку Создание  таблицы   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
    • ДЕМО REST API
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • ПРАЙСИНГ Сравнение с Parse.com Примеры использования
    • Тарифные планы и ценообразование $ Коммерческая доступность - 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
    • Сравнение с Parse.com Mobile Services Pros: - SQL Database – возможность делать все, что вы можете делать с SQL Server: развернуть у себя, запросы, отчеты, BI; - CRON-сервисы, планировщик задач; - Инфраструктура глобальной платформы Windows Azure: надежность, присутствие по всему миру, интеграция компонент, постоянное быстрое развитие; - $25 plan, масштабирование в 10 раз, автомасштабирование; - Расширение через Windows Azure Store.
    • Где используется Windows Azure Mobile Services? Приложения для iOS Приложения для Android Приложение для Windows Phone
    • www.aplana.com Наши клиенты 10/1/13 61
    • www.aplana.com Как  мы  используем  Azure  Mobile  Services   10/1/13 62 Server   (REST  API)   Azure  Mobile  Services   (Пуш  нотификация,   авторизация  в  соц.  сетях)    
    • Примеры использования
    • ЗАКЛЮЧЕНИЕ Windows Azure Mobile Services
    • CLOUD OS SUMMIT
    • Спасибо за внимание! Ваши вопросы Бесплатный триал
 http://WindowsAzure.com Центр экспертизы на русском языке
 http://AzureHub.ru Группа «Windows Azure для всех» на Facebook
 http://fb.com/groups/azurerus Консультации от группы экспертов
 azurerus@microsoft.com