Кейс разработки мобильного приложения «Мой Билайн» под Apple Watch: как ломались копья
Первой и основной проблемой, с которой мы столкнулись при разработке приложения под Apple Watch, было отсутствие тестовых устройств. Значительная часть заморочек, о которых пойдет речь в этой статье, напрямую связана с этим фактом. Ну а потом мы дорвались до часов и снова плясали с бубнами, чтобы приложение корректно заработало, да и просто попало в стор.
Идея, дизайн и начало разработки- Экран с подсказкой для авторизации
- Баланс и «аккумуляторы» (звонки, смс и интернет-трафик)
- Обновление данных пользователем по жесту force touch
- Glance (виджет) с последними данными из приложения
- Трансляция push из приложения на телефоне на часы
«Изучение гайдлайнов дало понимание, что Apple Watch нельзя рассматривать как независимый девайс — он всегда идет в паре с телефоном и является его дополнением, вторым дисплеем. Мы начали думать, что бы на часах хотел увидеть абонент “Билайна”. Самую актуальную информацию, которая приходит на телефон в виде уведомлений и сообщений. Баланс, остаток SMS, минут разговора и интернет-трафика в соответствии с тарифом. Эту информацию можно получить, набрав длинный код из сочетания символов, либо залезть в обычное приложение со смартфона. То есть это небыстрый процесс, который мы хотели ускорить. В этом смысле Apple Watch оказались крайне подходящим инструментом.
Актуальная информация должна быть визуально четкой и понятной. Когда речь идет о каком-то цифровом значении, часто пользователя в первую очередь волнуют не сами цифры, а просто убыло у него что-то или прибыло — израсходовал он все SMS или почти все, и, соответственно, требуется ли что-либо предпринять. Для визуализации мы решили использовать круглые диаграммы, которые позволяют одним взглядом, не вчитываясь, понять, как обстоят дела. К ним мы также сделали анимацию. Когда открывается экран, на нем откручивается спиннер до состояния, в котором находится баланс пользователя или остаток по каким-то определенным параметрам.
Из двух типов навигации мы выбрали постраничную, поскольку не собирались и не собираемся добавлять в приложение слишком много информации. Самым сложным было продумывание взаимодействия пользователя с zero screens, экранами для нештатных ситуаций. Например, если у человека на телефоне не активирован автологин, часы просят его авторизоваться в телефоне; бывает, что отсутствует соединение с сетью; а иногда данные просто долго подгружаются. Надо было как-то дать понять пользователю, что приложение “думает”, а не зависло. Для этого мы применили анимацию — мигает огонек, значит данные подгружаются, все в порядке, ничего не зависло.
Мы использовали фирменные цвета и шрифты заказчика, а графику делали, ориентируясь на гайдланы, которые в свое время подготовили для экосистемы приложений “Билайн”. Создание первоначального варианта дизайна заняло меньше недели, после этого вносились только незначительные изменения».
Однако без сложностей все же не обошлось. В предыдущей статье о разработке под Apple Watch мы уже подробно рассказывали о различных системных ограничениях. Особенностях работы с группами вместо слоев; ухищрениях, которые приходилось придумывать на ходу, чтобы реализовать динамическое увеличение количества страниц при использовании PageControl; сложностях с созданием анимации. Но этим дело не ограничилось.
Симулятор и тестирование на часахВ условиях отсутствия тестовых устройств мы использовали симулятор. Но, во-первых, на симуляторе можно было протестировать далеко не все сценарии, во-вторых, порой он откровенно глючил. Например, плохо работала фича с картинками разных размеров под разные модификации часов. А режим handoff в принципе невозможно нормально отработать на симуляторе. В то время как Apple Watch задуманы для использования на ходу, симулятор совершенно не позволяет этого ощутить, а напротив, создает впечатление, что ты смотришь на часы постоянно. Появляется ложное чувство, что часы — это еще один экран телефона.
Илья Горшков, руководитель команды QA
Обновление данныхДва года назад в iOS появилась возможность обновлять данные в приложении, когда само оно не запущено. Мы использовали ее в отчужденных от основного приложения «Мой Билайн» системных виджетах. Тогда достаточно было сделать так, чтобы приложение доставало специфические данные и токены из защищенного хранилища только в тот момент, когда пользователь разблокировал телефон. Часы же должны получать обновленные данные и тогда, когда телефон находится в кармане. Во время тестирования на настоящих часах стало ясно, что данные на них при заблокированном телефоне не обновляются. Очевидные решения проблемы не сработали, но мы выкрутились.
Григорий Матвиевич ( fountainhead ), iOS-разработчик
«Для получения баланса у нас есть специально сгенерированный токен, который хранится в самой защищенной области операционной системы iOS, в keychain. Когда часы запрашивают данные, приложение закрыто, и сам телефон заблокирован. Часы запускают в бэкграунде основное iOS-приложение, чтобы запросить баланс. Часы связываются с основным приложением на телефоне, оно запускается в бэкграунде, лезет в keychain, забирает этот токен и запрашивает баланс по этому токену.
У всей информации, которая хранится в keychain, есть специальные атрибуты хранения. Некоторые атрибуты предполагают, что при заблокированном телефоне информация недоступна. Для доступа к этому keychain мы пользуемся одной библиотекой, которая упрощает этот доступ. Мы начали менять атрибуты хранения на более низкие, чтобы информация была доступна не только на заблокированном телефоне. Но это не помогло.
Необходимо было проверить, с какими атрибутами токен хранится в keychain, и когда он реально доступен. Был взят джейлбрейкнутый телефон, в интернете найдена специальная программка, которая дампит keychain, и использована специальная утилита для доступа к файловой системе. Таким образом мы выясняли, с какими атрибутами сохранен этот токен, меняли атрибуты и проверяли, применились ли изменения. Как оказалось, проблема была с библиотекой, которая оборачивает доступ. Оказалось, что у токена насильно устанавливался атрибут хранения “только на разблокированном девайсе”, и это затрагивает всех пользователей, у которых телефоны защищены Touch ID или паролем. При смене атрибута хранения на “доступен после первой разблокировки” и ремонта внешней библиотеки проблема была решена».
Работа с данными и интеграция с основным приложениемВозможности модификации сервера на стороне клиента у нас не было, поэтому уйти от зависимости от сервера “Билайна” и скорости интернета было нельзя. Процесс соединения данных — не то чтобы сложный, но долгий, и, конечно, он дополнительно усложнялся отладкой на симуляторе. Это было связано с тем, что основное приложение на iPhone и WatchKit Extension — два разных независимых процесса со своей «песочницей».
Михаил Московченко, iOS-teamlead
«Интеграция подразумевала взаимодействие со стандартным flow, который идет в основном приложении: авторизация, получение финансовой информации требовали правильной реализации для часов. Главной трудностью было “научить” часы общаться с основным приложением даже когда оно не запущено. В основном приложении все происходит в форграунде — то, что запускается, видно на экране, все процессы происходят в тот момент, когда пользователь с ними взаимодействует. И все было настроено таким образом, чтобы экраны друг друга меняли поочередно.
Для часов был выделен отдельный процесс. Изначально мы использовали сценарий, сделанный специально для “Моего Билайна”, но он давал побочный эффект. Приложение оказывалось запущенным в бэкграунде, и когда в этот момент человек запускал его на телефоне, оно уже было активно. При этом мог, например, отображаться некорректный экран. Главный экран не появлялся, потому что процесс авторизации не был завершен. Чтобы этого избежать, мы решили разделить запуск приложения и обновление на часах и сделали отдельный набор методов для авторизации. Проверка оферты, тип абонента, заблокирован ли аккаунт, получение самого токена. То есть мы выделили отдельно все, что входит в авторизацию».
Выкладка в стор и reviewКогда мы отправляли приложение в стор, Apple еще не задокументировала множество нюансов относительно выкладки аппов под часы. Тем не менее, вышла новая версия среды разработки Xcode, которая требовала проверки всех сертификатов, в том числе и для часов.
Михаил Московченко, iOS-teamlead
ИтогМногих трудностей, конечно, можно было избежать, если бы мы не спешили с выкладкой приложения в стор и дождались массовой продажи часов. Но мы спешили :) И выпустили первое российское телеком-приложение под Apple Watch.
В первой версии умных часов Apple позволила сторонним разработчикам создавать аппы, которые являются расширением основного iOS-приложения. Разработку исключительно под Apple Watch обещают сделать в будущем.
Тогда могут появиться новые оригинальные сценарии взаимодействия с часами, а пока нам остается развивать приложения в рамках тех ограниченных возможностей, которые есть у разработчиков — и у пользователей. Ближайший план — возможность оплаты мобильного интернета прямо с часов в следующем обновлении.