Недавно я получил доступ к долгожданным очкам Google Glass и начал писать для них свое приложение.
О Glass я знал только то, что это — устройство на Android, к которому нужно подключиться через Android Debug Bridge и запускать свои программы.
Это оказалось не так!
Обзоров самих очков и их начинки уже хватает, я хочу немного рассказать, что представляют собой очки с точки зрения программиста, и как должна работать правильная программа для них.
Конечно, и Android программа будет работать, ну лучше ее не писать (хотя бы ближайшее время), и вот почему…
Все знают, что очки сопрягаются с телефоном пользователя по Bluetooth и получают от него интернет и GPS, и также, что через очки можно отвечать на звонки и отправлять SMS.
Может показаться, что очки — что-то вроде SmartWatch, этакое дополнение к телефону, но это самостоятельное устройство, которому телефон нужен только как внешнее устройство управления и 3G модем.
Чем не являются очки, и чего они не могут?
— Очки не дополняют телефон и почти ничего о нем не знают, по факту они реализуют профиль BT гарнитуры и принимают звонок так же, как и любая другая гарнитура, очки даже не умеют показывать имя контакта (если конечно это не контакт самих очков, но об этом позже). Кстати, гарнитура из очков получилась не самая лучшая, все отмечают «эхо» в трубке и низкую громкость говорящего через очки.
— Очки не принимают никаких (почти) данных с телефона, даже если поставить на них фирменную программу MyGlass (доступна только в США).
— На очках нельзя запускать обычные андроид программы, кроме как через ADB. То есть нет возможности сказать «ok glass let's play doom» и получить игру.
Что же могут очки?
— Они могут показывать ленту (timeline) из карточек. Лента «бесконечно» уходит в прошлое и содержит все совершенные действия (сделанный звонок, фото или заметку) и уведомления в хронологическом порядке.
— Они могут иметь «контакты». Контакт в понимании очков это — либо человек (телефонный номер/email), либо приложение (glassware), которому можно расшарить обычные карточки. Как только пользователь выбирает действие Share над карточкой, ему показывают список доступных контактов которые можно скролить по одному. Судя по всему, именно поэтому очки не хранят в себе полный контакт лист, навигироваться по нему было бы невозможно.
Как с этим работать?
Формально можно написать стандартное андроид приложение, залить его на очки через ADB и постить карточки, используя Timeline API напрямую, но у пользователя не будет никакого контроля над такой программой. Правильный вариант в понимании Google это — Mirror API (https://developers.google.com/glass/v1/reference/).
Вы создаете веб-приложение, которое запрашивает доступ к очкам через OAuth, с этого момента вам разрешено постить карточки в таймлайн пользователя и создавать контакты. Кроме того, при наличии обратного адреса (именно поэтому нам нужно веб-приложение), можно подписаться на уведомления от очков (об этом позже).
Что могут карточки?
— Карточка может быть простым текстом или предоставлять расширенный контент (html, картинки, видео, карты). Контент может быт длинным и разбитым на страницы (Paginating), или даже вложенным (Bundling), тогда вы просто группируете несколько похожих карточек в одну, и первая из них выступает обложкой. К картам можно прикладывать свои слои с маршрутом или интересными точками, API наложит слои и покажет в очках уже готовую картинку. Вот примеры карточек:
Карточка с картой и добавочным слоем маршрута
— Карточка может иметь меню действий. По умолчанию с карточкой нельзя сделать ничего, даже удалить не получится. Но создатель карточки (ваше приложение) может разрешить выполнять над ней ряд операций. Есть стандартный набор Reply, Delete, Share, Read aloud, Voice call, Navigate, Pin, Open URI, Play Video. Кроме того можно создать любой свой пункт меню. Вот меню уже будет генерировать уведомления для вашего приложения.
Меню Share поверх карточки
Какие доступны уведомления?
— Уведомления о действиях над карточкой: когда пользователь что-то сделает (выберет любой пункт меню), вам придет уведомление с уникальным идентификатором карточки и описанием действия. Уведомления приходят на указанный ранее Respond URL, в виде POST запроса, на который надо ответить кодом 200.
— Уведомления о перемещении очков: если подписаться на Location updates, то раз в 10 минут будет приходить уведомление о последнем известном местонахождении очков (вернее связанного телефона, т.к своего GPS очки не имеют).
Кроме этого очки оснащены рядом сенсоров: тач-панелью, кнопкой камеры, датчиками поворота, ускорений и компасом ко всему этому можно получить доступ из нативных apk-приложений. Тач-панель не дает координат, а сообщает программе о жестах: свайп, тач, свайп и тач двумя пальцами. На этих жестах и на сигналах от датчиков можно строить взаимодействие в нативном приложении, например, встроенный браузер очков умеет перемещаться по странице, следуя за наклоном головы.
Если есть желание постить что-то с телефона в очки, то лучший способ — это авторизоваться через OAuth, не указывая callback URL и просто создавать карточки через API (уведомлений приложение на телефоне получить не сможет за неимением собственного URLа). Такой вариант подойдет для программ, которые не предполагают особой реакции на пользовательские действия (напоминания, новости и т.п.)
АПИ очков быстро развивается, и наверняка скоро появится более легкий способ взаимодействия с очками, но карточки хороши именно тем, что не нагружают очки без дела (батарейка в них не самая мощная), используя единый канал связи. Вся обработка также ложится на серверную часть дополнительно разгружая мощности устройства. В общем, в текущем виде очки — это, в первую очередь, именно средство получения важной информации в режиме реального времени, а не платформа для игр или сложных приложений.
Так что, даже если у вас еще нет очков, можно уже сейчас подумать над тем, чем имеющийся интерфейс мог бы быть полезен вашей программе.
П.С. Тем, кто хочет узнать про сами очки лучше начать с официальной страницы, а тем кому не терпится попробовать написать приложение для смартфона стоит начать отсюда (только не забудьте подписать его правильным ключом и зарегистрировать в Google консоли).
П.П.С. Спасибо Weezlabs за новый девайс.
Автор: fo2rist