Приветствую всех приверженцев и почитателей кроссплатформенной разработки мобильных приложений с помощью фреймворка Titanium. 16 апреля 2012 года компания Appcelerator анонсировала обновление Titanium Mobile SDK до версии 2.0.1 вкупе с обновлением Titanium Studio все до той же версии 2.0.1. Чуть больше подробностей под катом.
По словам разработчиков из Appcelerator, кроме фикса более 700 багов, выявленных в предыдущих версиях, Titanium Mobile SDK 2.0.1 базируется на сильных сторонах предыдущей версии 1.8, а также включает в себя ряд интересных нововведений:
- реализована интеграция с Appcelerator Cloud Services (известный ранее как CocoaFish);
- изменена система разметки приложения;
- более высокая степень кроссплатформенности при разработке приложений для Android и iPhone;
- mobile Web (ранее HTML5 platform) релиз кандидат;
- более гибкий функционал в области геолокации;
- поддержка Xcode 4.3 и iOS 5.1;
Подробнее хотелось бы остановиться на такой вкусности, как интеграция с Appcelerator Cloud Service (ACS).
Ни для кого не секрет, что комфортное использование мобильных устройств предполагает 2 вещи:
- Широкие возможности мобильного клиента, включающие как общую так и устройство-специфичную функциональность.
- Возможности связанные с облачными технологиями, позволяющие конечному пользователю получать доступ к контенту без привязки к устройству, а также позволяющие взаимодействовать с устройствами других пользователей и получать доступ к их локальному контенту. Теперь это возможно с ACS.
Appcelerator Cloud Services предоставляет разработчику широкий спектр автоматически масштабирующихся сетевых возможностей. Такие задачи, как Push-уведомления, авторизация пользователей, управление фотографиями пользователя, фотоколлекции, получение и обновление статуса пользователя, которые обычно требуют серверного программирования или интеграции с несколькими SDK, теперь осуществляются через единый интерфейс подключаемого модуля.
По словам разработчиков Titanium, они позаботились о стабильном функционировании баз данных, хранилищ файлов, поисковых движков и о стеках приложений, так что мы можем сосредоточиться на том, что действительно важно: наших приложениях и пользователях этих приложений.
На сегодняшний день “из коробки” доступны:
- Push-уведомления;
- Управление пользователями (создание, авторизация, запрос информации о пользователе и т.д.);
- Различные манипуляции с фотографиями пользователей (загрузка на сервер, хранение и т.д.);
- Места (rich location storage);
- Социальная интеграция;
- Хранение файлов (Beta);
- Чекины (check-ins);
- Обновления статуса пользователя;
- Чаты;
- Друзья (Beta);
- Рейтинги и обзоры;
- Дискуссионные форумы;
- Организация мероприятий (Beta);
- Сообщения (Beta);
- Хранение данных в формате ключ-значение;
В настоящее время фичи, помеченные как beta, не доступны из модуля Titanium.Cloud, но к ним можно обращаться с помощью REST API.
Кроме того, ACS доступен всем разработчикам мобильных приложений, независимо от технологии, с помощью которой разрабатываются эти самые приложения. Т.е. не важно с помощью чего мы создаем наше приложение, будь то Titanium, Objective-C, Java, Sencha Touch или PhoneGap. Любая технология, позволяющая сделать HTTP-запрос, может легко использовать ACS в качестве сервера бэкэнда.
Для того, чтобы использовать ACS в своем приложении, нам нужно выполнить следующие четыре шага:
1) Регистрация приложения в Appcelerator Cloud Services
Если мы создаем новый проект в Titanium Studio и при этом активируем соответствующий чекбокс — приложение в Appcelerator Cloud Services регистируется автоматически. Его можно увидеть на странице "мои приложения" в нашей учетной записи на Appcelerator Developer Center. Если же чексбокс не был активирован, то зарегистрировать приложение вручную можно позже все на той же странице "мои приложения".
При регистрации приложения будут сгенерированы уникальные OAuth Consumer Key, OAuth Secret и App Key, которые нам нужно будет использовать при дальнейшей разработке приложения.
2) Подключение модуля Appcelerator Cloud Services
Поддержка ACS встроена в Titanium. Тем не менее, для того чтобы использовать его, мы должны с помощью директивы require() в любом удобном для нас файле подключить модуль ACS к нашему проекту:
var Cloud = require('ti.cloud');
Cloud.debug = true; // опционально. Для продакшена тут нужно поставить false
Также нужно не забыть о tiapp.xml и убедиться в присутствии там следующей директивы:
<modules>
<module platform="commonjs">ti.cloud</module>
</modules>
3) Аутентификация
Для обеспечения безопасности соединений и дабы исключить варианты, при которых кто-то выдает себя за нас и посылает запросы к ACS, наше приложение должно доказать, что оно имеет право общаться с ACS. Безопасный доступ обеспечивается с помощью двухстадийной аутентификации OAuth. Это процесс, при котором Consumer Key и OAuth Secret используются для “подписывания” каждого запроса нашего приложения. Когда сервер ACS получает запрос, OAuth Secret используется вместе с данными, представленными в запросе для расчета контрольной подписи. Если отправленная и рассчитываемая подписи совпадают — запрос будет обработан.
Для того, чтобы наше приложение могло успешно “представиться” серверу, необходимо в файл tiapp.xml добавить следующие строки:
<property name="acs-api-key" type="string">get_from_app_admin_page</property>
<property name="acs-oauth-key" type="string">get_from_app_admin_page</property>
<property name="acs-oauth-secret" type="string">get_from_app_admin_page</property>
4) Непосредственно использование API в коде приложения
Несколько примеров:
4.1) Создание пользователя:
Cloud.Users.create({
username: username.value,
password: password.value,
password_confirmation: confirmPassword.value,
first_name: firstName.value,
last_name: lastName.value
}, function (e) {
if (e.success) {
// пользователь создан успешно
} else {
// обработка ошибки
}
});
4.2) Публикация фото:
// предполагается, что у нас уже есть фото. Не важно каким способом мы его получили.
// collectionID это ID необходимый для группировки фотографий в облаке
Cloud.Photos.create({
photo: photo,
collection_id: collectionID,
'photo_sync_sizes[]': 'small_240'
}, function (e) {
if (e.success) {
// тут можно обнулить наши объекты для очистки памяти
photo = null;
collectionID = null;
} else {
// обработчик ошибки
}
});
4.3) Подключение FaceBook Login к нашему приложению:
//код для реализации модуля Facebook в приложении не показан
// функция обработчик, которая будет логинить пользователя
function updateLoginStatus() {
if (Ti.Facebook.loggedIn) {
label.text = 'Logging in to ACS as well, please wait...';
Cloud.SocialIntegrations.externalAccountLogin({
type: 'facebook',
token: Ti.Facebook.accessToken
}, function (e) {
if (e.success) {
var user = e.users[0];
alert('Logged in! You are now logged in as ' + user.id);
}
else {
error(e);
}
});
}
else {
label.text = 'Please login to Facebook.';
}
}
//повесим обработчик на события авторизации и деавторизации пользователя в FaceBook
Ti.Facebook.addEventListener('login', updateLoginStatus);
Ti.Facebook.addEventListener('logout', updateLoginStatus);
// добавим кнопку логина Facebook
win.add(Ti.Facebook.createLoginButton({
top: 10
}));
С одной стороны — одни плюсы! Пока единственный обнаруженный минус заключается в том, что free-версия ACS доступна только до 1 июня 2012 года. Об этом также сообщается в одном из постов разработчиков Appcelerator.
Создается стойкое впечатление, что ребята из Appcelerator в области организации разработки приложений настойчиво гонятся за ребятами из Apple. Посудите сами: каждый разработчик должен зарегистрироваться, если хочет использовать Titanium, предоставляется своя среда разработки, благодаря которой каждое разрабатываемое приложение фиксируется и по нему ведется статистика, есть магазин модулей и т.д.
На этом, собственно, все. Спасибо за внимание.
Источники:
- Introducing Titanium 2.0
- Сloud services
- Официальная документация Titanium SDK ver. 2.0.1/GA
- Integrating with Appcelerator Cloud Services
- ACS quickstart guide
Автор: vesel4ak