Привет! Я Влад, Android-разработчик. Три года я делаю корпоративное приложение банка Alfa People. В перерывах играю в футбол и Elden Ring и выращиваю на подоконнике острый перец.
Сегодня поделюсь темой, из-за которой я фрустрировал три месяца, столько же общался с проверяющими из около-гугловой компании, наблюдая, как наше приложение теряет баллы в сторе. Речь пойдёт про спортивный челлендж. Именно так, вы не ослышались. Однажды мы пригласили сотрудников посоревноваться в количестве шагов. Согласовали дизайн челленджа, выбрали название — Alfa Energy, раздали задачи продуктовой команде.
На мне, как обычно, была реализация этого функционала на Андроид в паре со вторым разрабом. А я всегда говорил: хочешь спокойствия — выбирай Айфон, хочешь веселья — Андроид.
Как получить доступ к метрике шагов в Google: ожидание
Итак, я готовлю релиз по стандартной схеме. Настаёт черёд подключать API Google Fit, чтобы знать, кто как проходит спортивный челлендж в приложении.
Получаю первичное одобрение от Google, а значит можно использовать скоупы. Теперь-то я понимаю, что Андроид пытается стать очень секьюрным, посмотрев на своего американского брата, и местами это выходит боком. Выясняется, что я не могу просто взять и подрубить счётчик шагов к своему приложению, Google против.
Вы знали, что телефон и так каждый день считает шаги, даже если вы его об этом не просили? Вообще всегда знает геолокацию? Но делиться этими данными с приложениями из его же стора Google не спешит.
Данные бывают разные, для некоторых, конечно, нужны правила повышенной безопасности: для ФИО, даты рождения, роста, веса, клички кота. Мы хотели получить метрику шагов, причём с согласия пользователя — просто знать, сколько вы проходите за месяц, пока идёт челлендж. Не чтобы рекламировать кроссовки, не чтобы давать гиги за шаги. Просто шаги, пожалуйста.
Я представлял себе процесс получения данных о шагах так:
Я как владелец приложения прошу Google выдать мне доступ к метрике пройденных юзером шагов.
Я в момент вступления в челлендж Alfa Energy в приложении прошу юзера разрешить доступ к его данным, а именно — к количеству шагов из Google Fit. Если Google Fit у юзера ещё не установлен — предлагаю установить его из стора.
Уже на первом этапе я забуксовал, получая разрешение от Google, поэтому родилась эта статья. Конечно же, я знал, что нужна какая-то проверка. Я добавил под это дело 3 дня, а дальше рассчитывал выйти в прод, в первый раз что ли?
«Зачем вам эти персональные данные?»: ассессмент Google
Я допиливаю функционал и параллельно отправляю своё творение на проверку в Google, думая, что всё изи-пизи. И вот тут-то запахло жареным. Google вместо выдачи разрешения на метрику шагов начинает сыпать сообщениями из разряда: а кто вы, а что вы, а где лендинг, юзер полиси?
Уже идёт тестовый челлендж, до старта на всех юзеров не более двух недель, и вот за 10 дней до выхода в прод нам говорят, что мы прошли первый этап. Мы такие: «Ура, первый этап пройден! Стоп, в смысле первый?».
Да, оказалось, что этапов проверки в Google два, а не один, как я планировал. Причём второй этап — это просто соулс-лайк битва с боссом, где ты эльф первого уровня, а перед тобой Зверь — хранитель Элдена.
Тут завершается тестовый челлендж, и мы плавно перетекаем в прод. Вернее, iOS плавно перетекает в прод, а у меня начинаются вот такие диалоги с продактом:
— Влад, что там с юзерами на Андроид? Что с проверкой?
— Да всё нормально, думаю, будет небольшой диаложек с Google, а так пока идём в прод без ограничений.
Далее в запланированные даты выходит тизер Alfa Energy на всех сотрудников, а это несколько тысяч человек. Я всё ещё верю, что релиз не затормозится, и отсылаю Андроид-функционал на проверку в CASA.
Что такое CASA и при чём тут Google
CASA (Cloud Application Security Assessment) — это ребята, которые встраиваются в процесс релиза приложения по поручению Google и проверяют подключенные к вашему приложению API. В моём случае таким API был Google Fit. Решениям CASA доверяет Google: если CASA говорит: «Всё секьюрно», значит ваш релиз выходит без ограничений (тизер: проверяют они чисто на словах, по ощущениям).
Итак, спортивный челлендж в корпоративном приложении стартует. Наплыв людей в первый же день, шутки в рабочих чатах про имбу по шагам у специалистов по доставке карт, айтишники обсуждают рут, скрипт, автотрекинг для читерских побед. И тут мы получаем десятки сообщений, что люди не могут зарегистрироваться. П-А-Н-И-К-А.
Оказывается, пока CASA проверяет функционал, мы можем подключить метрику только 100 пользователям, потому что функционал находится в тестовом режиме. А мы и не знали! То есть нам как бы говорят: «Ну, мы ещё проверяем приложение, поэтому подсветим юзерам, что оно небезопасное».
Юзеры от 101-го и дальше получают сообщение, что доступ к приложению заблокирован. На самом деле доступ есть, просто капасити исчерпалось.
У меня происходит ещё один увлекательный диалог с продактом:
— Влад, что происходит?
— Пу-пу-пу, оказалось, можно запустить всего 100 юзеров на время проверки CASA.
— %$#! И когда нас проверят?
— Написано, дедлайн — 28 февраля следующего года.
— Но сейчас ноябрь, и мы уже в проде. Что там за проверка такая, на которую даётся три (!) месяца?
А дела с проверкой обстояли так. Наше приложение CASA прогоняли через утилиту, которая проверяет узкие места в коде, кэширование данных пользователя, ищет легаси.
После этого нам пришёл глоссарий с примерно сотней вопросов, в которых надо пояснить за уязвимости, помеченные как High. Вопросы такого плана: «Кэшируете ли вы данные юзера?». Варианты: да, нет, N/A. Если ответ не нравится проверяющему, он пишет нам в профиль. Этап с перепиской напоминает эпичное сражение ситхов и джедаев.
В это время сотрудники трекают шаги в челлендже только на iOS. Мы получаем тонну гневных сообщений от владельцев Андроида: «Почему нельзя было затестить?», и заниженные оценки в сторе.
Как я общался с CASA и вспоминал английский
Теперь самое интересное — увлекательные переписки с CASA. Я с профиля приложения (а там фото CTO Маши) каждый день отвечаю по деталям функционала, вспоминая технический английский и составляя обоснования.
У меня английский B2, читаю нормально, но выражать свои мысли в письме мне бывает сложно. Думаю, именно поэтому мы с асессором Soumi так хорошо друг друга понимали.
Ребята в команде Alfa People разгоняют новый MVP под следующий спортивный челлендж. У меня дёргается глаз, потому что степень непонятности с проверкой, как у новой модели «АвтоВАЗа»: вроде, будет, а когда — непонятно.
Я словил жёсткий тильт и посыпание головы пеплом. Честно, я был готов ручками проставлять целый месяц шаги от пары тысяч сотрудников (ну, или скриптом), но всё же обработать данные. Тем временем челлендж завершился для iOS-пользователей и 100 счастливчиков на Андроид. Плавно и нервно мы подходили к дедлайну проверки CASA в статусе факапа.
Наступил февраль 2024, я всё ещё финалил ответы по вопросам из глоссария CASA, попутно переделывая код. Счёт итерациям уже потерян, остаётся надеяться на заветную дату. На протяжении трёх месяцев я так и не понимал, одобрят ли нам всё это, и что нас ждёт после CASA.
Понимаете, в чём соль, мы просим только шаги, а проходим с подрядчиком Гугла девятый круг ада, и нам это должно нравиться. Асессоры начинают отвечать реже, то ли закапываясь в наш код, то ли фрустрируя от общения с «рашн программист гёрл», но продвижения не происходит.
«Влад, чё, когда?», «Влад, они ответили?» — эти фразы я слышал даже во сне. Все три месяца, с конца ноября до 27 февраля, я общался по глоссарию с CASA. Пинал ли я проверяющих все 3 месяца? — Боюсь, у бедного Soimi для меня уже была личная папочка (спам).
28 февраля, в день дедлайна, наш глоссарий согласовали и передали на следующий этап ревью — лё шанс финаль. Я открываю почту, и там сабмит! CASA визирует для Google, что все моменты обсуждены, вопросов к нам нет.
Радости было, как будто собрал карбюратор, а лишних деталей не осталось! Я выдаю эту новость нашим ребятам и наконец «протыкиваю» людей, которые не могли раньше записаться в челлендж. Это успешный успех!
Мы как будто нахрапом проходим сразу два этапа. Что это значит: отмена тестовых пользователей, лимит в 100 юзеров снят, но всё ещё висит вопрос, что же будет с расширенными скоупами.
Тут есть нюанс: если мы захотим трекать не только шаги, но и дистанцию, скорость — это отдельные скоупы, на которые нужны разрешения Google. Тогда меня снова ждёт круг по Золотому кольцу Индии, и я напишу статью «Как за две недели освоить хинди до C1».
Что советую коллегам по Андроиду по ассессменту Google
После пережитого мной челленджа главный совет — запасаться терпением и предупреждать CTO, продакта, стейкхолдера и маму о крайне неопределённых сроках. Заложите сроки с запасом до выхода функционала в прод, особенно, если ваше приложение будет на ревью впервые.
Не зарекайтесь ни от каких проверок. Ещё полгода назад я даже не думал, что мне в HR Tech банка понадобится ассессмент по API Google Fit. Помните, фантазия стейкхолдера безгранична.
Готовьте план B, а лучше даже C. Никто не добавит вам целый квартал на проверки функционала (а у меня реально ушло 3 месяца на ассессмент), но вы должны понимать, что предложите команде, если согласование забуксует.
Хоть кто-то из команды должен владеть техническим английским от B2, чтобы общаться с представителями платформ и сторов. Вложения в репетитора точно отобьются, если вы хотите развивать карьеру в мобильной разработке.
Подумайте на пару шагов вперёд и отправьте на проверку функционал на вырост. Лучше сразу затащить дополнительные скоупы, условно, на MVP уровня 2-3, чем страдать так же, как я, да ещё при каждом обновлении.
Спасибо за внимание всем, кто дочитал. Буду рад, если в комментариях поможете с вопросами по ассессменту в Google: проходил ли кто Huawei Health (а может, и сбор данных из Google Fit)? Ну, и стоит ли переходить с Google Fit на бета-версию гугловского Health?
Комментарии (4)
Ales_Ivanov
16.05.2024 10:25+3Как-то тоже нужно было прикрутить счетчик шагов к приложению. Тогда так и не разобрался с Google Fit, на коленке накидал грубый как полено алгоритм для интерпретации данных акселерометра. Видно, мой челлендж был полегче, чем дополнительные приседания автора в общении с ребятами из Google)))
Krushiler
16.05.2024 10:25А сенсор разве хранит график данных между запусками прилаги? Так только в форграунд сервисе разве что работать будет, а смысл в том, чтобы шаги крутились при выключенном приложении.
SuharkovMP
У вас то приложение имеет доступ к фото, контактам и звонкам, календарю. Копит в себе данные о доходах сотрудника, о наличии автомобиля, документооборот. Довольно интересная информация там.
А забуксовали вы в общении с Гуглом именно на шагах? Странные политики безопасности.