вторник, 5 марта 2013 г.

Как добавлял поддержку GDrive в android проект

Была уже поддержка dropbox, box.com. Настала очередь и google drive. Как никак продукт от самого гугла, а они умеют продвигать, что им надо. Правда потом так же успешно закрывать. Но не об это сейчас.

Все эти ребята как любят делать. Генеришь определенный урлик с app_id и открываешь в браузере, вводишь свои данные, а на выходе тебе токен. Хорошо, конечно, но хотелось бы лучше, когда просто открывается активити, юзер вводит логин, пароль, кликает "логин", в фоне логиниться и продолжает работать. Фактически надо повторить определенную последовательность GET/POST запросов и дело в шляпе. Так было с обоими первыми хранилищами (да и с facebook тоже).

С гуглом такое не прошло. Они юзают js, а через обычный явовский http клиент такое не с имитировать. Есть конечно, htmlunit и selenium, которые позволяют заюзать, вроде бы, без gui-шный браузер. Но сам не проверял, да и весят прилично. На данный момент отказался.
Можно было пойти законным путем для андроида. Но, честно не хотелось тянуть их либы, которые постоянно обновляются, потом какие-то api помечаются как устаревшие. Ведь фактически gdrive вышел из google docs. Тем более, что мне не так и много надо было операций (dir, upload, download, create folder, delete file/folder). Вполне можно было обойтись обычными GET/POST/DELETE запросами с передачей токенов.

Как ни странно, столкнулся с проблемой. Токен получался из аккаунта гугла, что подключен на девайсе, но он не был привязан к app_id. Пример гугловский оказался не рабочий, там так же вываливалась ошибка о не настроенном доступе (впрочем так часто бывает с примерами, гугл здесь оказался не исключением). Поиск на stackoverflow показал, что дело всё-таки в бабине. Плюс нашелся на github рабочий вариант.

Но как-то уже расхотелось юзать андроидовский вариант. Тем более нужны были тесты на яве. В итоге авторизацию стал делать как для stand alone application. Кратко: открываете в браузере определенный урлик, логинитесь, в ответ получить в теле html некоторый код, потом POST-запрос с этим кодом, в ответ же долгожданный accessToken и refreshToken. Токен живет 10 минут, потом его надо обновлять. Интересно, что после обновления приходит только accessToken, refreshToken остается прежним ( в том же box.com и refreshToken приходит новый). В моём выборе я был не одинок. Expert Explorer и ES Explorer использовали такой же механизм.
Ну а дальше уже юзал простые api.

Единственным нюансом оказалось удаление файлов/папок. Сперва использовал вариант через /files. Но был какой-то полукривой. Вроде объект удаляется, повторный вызов апи показывает, что объекта уже нет, а на вебе висит, хотя с ним ничего сделать нельзя. Через некоторое время он пропал и в вебе, но осадок остался. Второй вариант /children уже не доставил никаких неудобств.

В общем не без затыков, но задача была решена. Как часто бывает, спасибо докам гугла, достаточно информативно и понятно, плюс "Try it!" тоже хорошая вещь для отладки, посмотреть, какой там json генерится.

среда, 16 января 2013 г.

Почему сейчас я остановился на idrive.com?

Первое облачное хранилище, которое я попробовал было dropbox. Потом box.com, skydrive. Но всё это было не совсем то. Хотелось синхронизировать любые папки, а не только с какой-то одной, плюс не хотелось, чтобы любой сотрудник конторы хранилища имел доступ к моим данным. И самое главное, мне нужно было именно хранилище, т.е. синхронизация меня не особо интересовала.

В какой-то определенный момент я попробовал wuala. Почти по всем параметрам подходила, но тормознутость клиента на яве стала надоедать. В итоге сейчас я использую idrive.

idrive исключительно заточен на бэкап. С некоторого времени у них появился  idrive sync, который уже имеет функции синхронизации.

Даётся 5 Гб свободного места, можно указывать любые папки на диске (прямо через контекстное меню). Аплоад идет достаточно резво. Долго первый раз, потом уже отправляются только изменения, а не весь измененный файл (incremental backup).
И это очень радует. К примеру, есть от почтовой программы большой файл с письмами. Он занимает 600 Мб, и понятно, постоянно меняется, т.к. приходят новые письма. Замучиться можно ждать, если бы просто каждый раз аплодился такой большой файл. А за счет incremental backup заливается в считанные секунды. В целом бэкапится 10 Гб, в большинстве своём мелкие файлы. Если брать ситуацию, что почти ничего не изменилось на диске, то весь бэкап производится в течение пары минут.

Поддерживается до 30 версий изменений. Любую из них можно скачать из клиента. Я использую только windows. Хотя, если судить по сайту, также есть клиента под другие ОС, в том числе и мобильные. На данный момент версия клиента 6.x. Ничего лишнего. 

Данные в облака заливаются не в чистом виде, а шифруются, для этого при регистрации вводится помимо логина/пароля и ключ шифрования. Забывать его крайне не рекомендуется, иначе данные будут потеряны безвозвратно.

Важный момент - idrive выполняет бэкап, соответственно, если удалить файл на диске, он будет продолжать присутствовать в облаке. Если же надо подчистить облако и привести в соответствие с локальными данными, нужно использовать кнопку Archive Cleanup, в результате чего выполнится чистка и освободится место после удаления. При необходимости можно задать периодичность, с которой чистка будет выполняться в автоматическом режиме. Заметил такой баг, не баг, но не доработку. Когда кликаешь на cleanup, сперва производится генерация списка локальных данных, а после уже открывается окно, где показывается список файлов/папок которые будут удалены из облака. Показывается оно как не модальное и, видимо, запоминает позицию, где именно предыдущий раз показывалось. До этого у меня основное окно было распахнуто на весь экран, потом я его сместил вправо. В итоге окно со списком удаления показывалось за экран. Пока не распахнул и не сместил в бок.

Действуют реферальные ссылки. За каждую регистрацию по такой ссылке вы получите дополнительно 1 Гб. Внимание. Все мои ссылки на idrive реферальные. Дополнительный объем можно приобрести как для частного лица, так и для конторы. Цены смотреть здесь. Обычному юзеру можно купить 150 Гб за 5$ в месяц. Также за установку клиента дали 0.5 Гб. Или ввели новое правило или просто с задержкой приличной это делают. Потому что зарегистрировался и поставил клиент достаточно давно, приплюсовали к свободному месту месяцев через 6. Но вполне возможно, что это просто мне не повезло. Также можно пройти дополнительные миниквесты (лайкнуть в facebook, сделать твит и поставить мобильную версию приложения), тем самым получив ещё по 0.5 Гб. 

Работать с облаком можно и без клиента через браузер. Но ничего скачать не удастся  пока не введешь ключ шифрования. У меня, правда, нужды нет делать что-либо через браузер.

Присутствует поддержка бэкапа нескольких компьютеров на одном аккаунте. Для этого в облаке создается папка по имени компьютера куда уже идет резервирование, при необходимости имя можно сменить.

При удалении из облака данных они помещаются в корзину. После 30 дней эти данные будут удалены навсегда и из корзины.

idrive поддерживает расписание. По времени, дням недели. При необходимости можно включить опцию отправки на почту письма после завершения резервирования.

Суппорт, он есть :-). Пришлось (не помню правда уже зачем) обращаться, завели тикет и достаточно быстро отреагировали, потом предложили онлайн чат для общения.

Расшарить объект можно через веб. Правда с одним нюансом, если будет использован ключ шифрования по умолчанию. Это и понятно, idrive ведь не знает наш ключ, а на сервере хранятся данные только в зашифрованном виде.

idrive также поддерживает как и остальные поиск, логи, резервирование в реальном времени.

Посмотреть ЧАВО можно здесь, а справку здесь.

UPD: маленькая ремарка :-) Отказался от idrive и теперь все данные лежат/бекапятся на домашнем My Book Live NAS.