Привет! Я Влад, Android-разработчик. Три года я делаю корпоративное приложение банка Alfa People. В перерывах играю в футбол и Elden Ring и выращиваю на подоконнике острый перец. 

Это я, бью по мячу, чтобы не «бить» асессоров
Это я, бью по мячу, чтобы не «бить» асессоров

Сегодня поделюсь темой, из-за которой я фрустрировал три месяца, столько же общался с проверяющими из около-гугловой компании, наблюдая, как наше приложение теряет баллы в сторе. Речь пойдёт про спортивный челлендж. Именно так, вы не ослышались. Однажды мы пригласили сотрудников посоревноваться в количестве шагов. Согласовали дизайн челленджа, выбрали название — Alfa Energy, раздали задачи продуктовой команде. 

На мне, как обычно, была реализация этого функционала на Андроид в паре со вторым разрабом. А я всегда говорил: хочешь спокойствия — выбирай Айфон, хочешь веселья — Андроид.

Как получить доступ к метрике шагов в Google: ожидание

Итак, я готовлю релиз по стандартной схеме. Настаёт черёд подключать API Google Fit, чтобы знать, кто как проходит спортивный челлендж в приложении. 

Список доступных API
Список доступных API

Получаю первичное одобрение от Google, а значит можно использовать скоупы. Теперь-то я понимаю, что Андроид пытается стать очень секьюрным, посмотрев на своего американского брата, и местами это выходит боком. Выясняется, что я не могу просто взять и подрубить счётчик шагов к своему приложению, Google против. 

Согласование секьюрного доступа застряло
Согласование секьюрного доступа застряло

Вы знали, что телефон и так каждый день считает шаги, даже если вы его об этом не просили? Вообще всегда знает геолокацию? Но делиться этими данными с приложениями из его же стора Google не спешит.

Данные бывают разные, для некоторых, конечно, нужны правила повышенной безопасности: для ФИО, даты рождения, роста, веса, клички кота. Мы хотели получить метрику шагов, причём с согласия пользователя — просто знать, сколько вы проходите за месяц, пока идёт челлендж. Не чтобы рекламировать кроссовки, не чтобы давать гиги за шаги. Просто шаги, пожалуйста.

Google, поделись, пожалуйста, данными о шагах, а мы зашьём согласие в User policy
Google, поделись, пожалуйста, данными о шагах, а мы зашьём согласие в User policy

Я представлял себе процесс получения данных о шагах так:

  1. Я как владелец приложения прошу Google выдать мне доступ к метрике пройденных юзером шагов.

  2. Я в момент вступления в челлендж 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 пользователям, потому что функционал находится в тестовом режиме. А мы и не знали! То есть нам как бы говорят: «Ну, мы ещё проверяем приложение, поэтому подсветим юзерам, что оно небезопасное». 

Пока Google проверяет функционал, доступ к нему возможен, но есть нюанс
Пока Google проверяет функционал, доступ к нему возможен, но есть нюанс

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

Такой экран видели пользователи Андроид, когда регистрировались в челлендже после сотого участника
Такой экран видели пользователи Андроид, когда регистрировались в челлендже после сотого участника

У меня происходит ещё один увлекательный диалог с продактом:

— Влад, что происходит?

— Пу-пу-пу, оказалось, можно запустить всего 100 юзеров на время проверки CASA.

— %$#! И когда нас проверят?

— Написано, дедлайн — 28 февраля следующего года.

— Но сейчас ноябрь, и мы уже в проде. Что там за проверка такая, на которую даётся три (!) месяца?

А дела с проверкой обстояли так. Наше приложение CASA прогоняли через утилиту, которая проверяет узкие места в коде, кэширование данных пользователя, ищет легаси. 

Скрин с доки CASA, переведённой автоматическим транслейт-плагином 
Скрин с доки CASA, переведённой автоматическим транслейт-плагином 

После этого нам пришёл глоссарий с примерно сотней вопросов, в которых надо пояснить за уязвимости, помеченные как High. Вопросы такого плана: «Кэшируете ли вы данные юзера?». Варианты: да, нет, N/A. Если ответ не нравится проверяющему, он пишет нам в профиль. Этап с перепиской напоминает эпичное сражение ситхов и джедаев. 

В это время сотрудники трекают шаги в челлендже только на iOS. Мы получаем тонну гневных сообщений от владельцев Андроида: «Почему нельзя было затестить?», и заниженные оценки в сторе. 

Как я общался с CASA и вспоминал английский

Теперь самое интересное — увлекательные переписки с CASA. Я с профиля приложения (а там фото CTO Маши) каждый день отвечаю по деталям функционала, вспоминая технический английский и составляя обоснования.

Пример письма CASA. Мы так долго общались, что я гуглил контакт из подписи (скорее всего, имя индийское)
Пример письма CASA. Мы так долго общались, что я гуглил контакт из подписи (скорее всего, имя индийское)

У меня английский B2, читаю нормально, но выражать свои мысли в письме мне бывает сложно. Думаю, именно поэтому мы с асессором Soumi так хорошо друг друга понимали.

Ребята в команде Alfa People разгоняют новый MVP под следующий спортивный челлендж. У меня дёргается глаз, потому что степень непонятности с проверкой, как у новой модели «АвтоВАЗа»: вроде, будет, а когда — непонятно.

Один из «завтраков» проверяющих после недель ожидания
Один из «завтраков» проверяющих после недель ожидания

Я словил жёсткий тильт и посыпание головы пеплом. Честно, я был готов ручками проставлять целый месяц шаги от пары тысяч сотрудников (ну, или скриптом), но всё же обработать данные. Тем временем челлендж завершился для iOS-пользователей и 100 счастливчиков на Андроид. Плавно и нервно мы подходили к дедлайну проверки CASA в статусе факапа.

Наступил февраль 2024, я всё ещё финалил ответы по вопросам из глоссария CASA, попутно переделывая код. Счёт итерациям уже потерян, остаётся надеяться на заветную дату. На протяжении трёх месяцев я так и не понимал, одобрят ли нам всё это, и что нас ждёт после CASA.

Понимаете, в чём соль, мы просим только шаги, а проходим с подрядчиком Гугла девятый круг ада, и нам это должно нравиться. Асессоры начинают отвечать реже, то ли закапываясь в наш код, то ли фрустрируя от общения с «рашн программист гёрл», но продвижения не происходит.

«Влад, чё, когда?», «Влад, они ответили?» — эти фразы я слышал даже во сне. Все три месяца, с конца ноября до 27 февраля, я общался по глоссарию с CASA. Пинал ли я проверяющих все 3 месяца? — Боюсь, у бедного Soimi для меня уже была личная папочка (спам). 

Это я, воодушевлён общением с асессорами
Это я, воодушевлён общением с асессорами

28 февраля, в день дедлайна, наш глоссарий согласовали и передали на следующий этап ревью — лё шанс финаль. Я открываю почту, и там сабмит! CASA визирует для Google, что все моменты обсуждены, вопросов к нам нет.

Радости было, как будто собрал карбюратор, а лишних деталей не осталось! Я выдаю эту новость нашим ребятам и наконец «протыкиваю» людей, которые не могли раньше записаться в челлендж. Это успешный успех!

Мы как будто нахрапом проходим сразу два этапа. Что это значит: отмена тестовых пользователей, лимит в 100 юзеров снят, но всё ещё висит вопрос, что же будет с расширенными скоупами.

Тут есть нюанс: если мы захотим трекать не только шаги, но и дистанцию, скорость — это отдельные скоупы, на которые нужны разрешения Google. Тогда меня снова ждёт круг по Золотому кольцу Индии, и я напишу статью «Как за две недели освоить хинди до C1».

Что советую коллегам по Андроиду по ассессменту Google

  1. После пережитого мной челленджа главный совет — запасаться терпением и предупреждать CTO, продакта, стейкхолдера и маму о крайне неопределённых сроках. Заложите сроки с запасом до выхода функционала в прод, особенно, если ваше приложение будет на ревью впервые.

  2. Не зарекайтесь ни от каких проверок. Ещё полгода назад я даже не думал, что мне в HR Tech банка понадобится ассессмент по API Google Fit. Помните, фантазия стейкхолдера безгранична.

  3. Готовьте план B, а лучше даже C. Никто не добавит вам целый квартал на проверки функционала (а у меня реально ушло 3 месяца на ассессмент), но вы должны понимать, что предложите команде, если согласование забуксует.

  4. Хоть кто-то из команды должен владеть техническим английским от B2, чтобы общаться с представителями платформ и сторов. Вложения в репетитора точно отобьются, если вы хотите развивать карьеру в мобильной разработке.

  5. Подумайте на пару шагов вперёд и отправьте на проверку функционал на вырост. Лучше сразу затащить дополнительные скоупы, условно, на MVP уровня 2-3, чем страдать так же, как я, да ещё при каждом обновлении.


Спасибо за внимание всем, кто дочитал. Буду рад, если в комментариях поможете с вопросами по ассессменту в Google: проходил ли кто Huawei Health (а может, и сбор данных из Google Fit)? Ну, и стоит ли переходить с Google Fit на бета-версию гугловского Health?

Комментарии (4)


  1. SuharkovMP
    16.05.2024 10:25
    +3

    Три года я делаю корпоративное приложение банка Alfa People. 

    У вас то приложение имеет доступ к фото, контактам и звонкам, календарю. Копит в себе данные о доходах сотрудника, о наличии автомобиля, документооборот. Довольно интересная информация там.

    А забуксовали вы в общении с Гуглом именно на шагах? Странные политики безопасности.


  1. gleb_l
    16.05.2024 10:25

    Это "пояснить за..." в тексте прекрасно. Словно в подворотню случайно попал )


  1. Ales_Ivanov
    16.05.2024 10:25
    +3

    Как-то тоже нужно было прикрутить счетчик шагов к приложению. Тогда так и не разобрался с Google Fit, на коленке накидал грубый как полено алгоритм для интерпретации данных акселерометра. Видно, мой челлендж был полегче, чем дополнительные приседания автора в общении с ребятами из Google)))


    1. Krushiler
      16.05.2024 10:25

      А сенсор разве хранит график данных между запусками прилаги? Так только в форграунд сервисе разве что работать будет, а смысл в том, чтобы шаги крутились при выключенном приложении.