"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
-
Upload
yandex -
Category
Technology
-
view
1.013 -
download
2
Transcript of "Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
5 мобильных платформ – один готовый бэкенд в облаке
от потребностей к использованию
Владимир Юнев Microsoft
Agenda
Идеальный бэкенд для мобильных приложений – какой он?
Мобильное приложение и данные
Мы создаем мобильное приложение Но где нам хранить данные?
? данные пользователя, таблицы рекордов, настройки приложения, логи и так далее
Мобильное приложение и данные
Мы создаем мобильное приложение А давайте построим свое хранилище
VPS + OS
СУБД
Среда исполнения
Бизнес-логика
REST API
? все еще
?
Данные
Идеальный бэкенд для мобильных приложений – это…
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, …
ИСТОРИЯ четыре друга
ЖИЛИ–БЫЛИ 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 для всех» на Facebookhttp://fb.com/groups/azurerus Консультации от группы экспертов[email protected]