Вся история с Google Play и 2ГИС — наш post mortem

Мы уже рассказывали о произошедшем и получаем много вопросов от пользователей. Решили подробнейше разобрать ситуацию публично, рассказать все технические нюансы и дать максимум ответов. Материал будет интересен тем, кто любит углубляться в детали, и паблишерам приложений в Google Play, которые могут столкнуться с аналогичными трудностями.

Post mortem — это статья, написанная по следам крупного инцидента. Её цель — помочь предотвратить подобные ситуации в будущем.

Как всё обычно работает?

Ошибки в алгоритмах проверки — не редкость. Перед релизом в Google Play каждое приложение проходит проверку. И если систему проверки что-то смутило, то разработчик получает уведомление.

Решение проверки можно оспорить, прикрепив скрины или текстом объяснив модератору необходимость каких-то запросов или работу той или иной фичи или библиотеки. Как правило, именно такие шаги помогали нам решать большинство вопросов модерации.

Но 2ГИС нет в Google Play, и мы не можем получать и оспаривать перед релизом решения алгоритмов проверки. Поэтому сейчас мы разбираемся, что послужило причиной ошибочного срабатывания защиты.

Почему вообще Google Play Protect определил 2ГИС как «опасное» приложение?

Мы не знаем наверняка. Возможно, Google действует по простому алгоритму. 2ГИС нет в Google Play, значит, модерация может не иметь ссылку на политики конфиденциальности, которые выполняют ключевую функцию по регулированию работы с данными. Он не может задать нам уточняющие вопросы о запрашиваемых разрешениях и автоматически помечает 2ГИС как вредоносное.

Если смотреть список причин, из-за чего можно попасть в эту категорию spyware, к которой нас отнёс Google, то можно предположить только одну причину — чтение контактов и фото. Для остальных возможных причин у приложения нет прав. Оба этих действия мы делаем строго с согласия пользователя. Контакты используем для построения социального графа (отзывы и «Друзья на карте»), а фото — для добавления изображений к местам.

Разрешения запрашиваем не при запуске приложения, а непосредственно при действиях пользователя в конкретных фичах. Обе эти пермиссии существуют с нами давно.

Зачем вам permission на SMS и журнал звонков?

Мы не запрашиваем такие чувствительные пермиссии. В заблуждение вводит шаблонный текст от Google Play Protect.

Вся история с Google Play и 2ГИС — наш post mortem

Мы используем SMS Retriever API от Google, чтобы автоматически вводить одноразовый код из нашей же смски, когда вы регистрируетесь в 2ГИС по номеру телефона. То есть вам не нужно вручную вводить одноразовый код для 2ГИС, который вы получили в SMS.

В предупреждении об опасности Google Play Protect используется текст, в котором перечисляется всё обобщённо. Из-за этого может показаться, что 2ГИС якобы имеет доступ ко всем SMS и журналу звонков. Это не так.

Зачем вам моя фоновая геопозиция? Пермиссии ACCESS_BACKGROUND_LOCATION и ACTIVITY_RECOGNITION

В начале декабря мы выпустили фичу «Друзья на карте», сейчас ей активно пользуется несколько процентов аудитории — пользователи могут разрешать друг другу видеть, где они находятся. Самостоятельно приложение не может получить права фонового определения геопозиции. Чтобы 2ГИС получил доступ, пользователь сам должен перейти в настройки телефона и явно их выдать. Разрешение запрашиваем только при включении «Друзей на карте», оно необязательное и нужно только для тех, кто решил использовать фичу.

Вот как происходит её включение:

Вся история с Google Play и 2ГИС — наш post mortem

Запрос на отображение геопозиции в фоне отличается от запроса геопозиции для отображения вашего местоположения на карте — там мы не запрашиваем фоновую геопозицию.

Контакты. Зачем картографическому приложению permission READ_CONTACTS?

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

Пермиссия необязательная, запрашиваем только если пользователь сам хочет добавить в 2ГИС контакты для «Друзей на карте» или рекомендациях в отзывах.

Звонки. Что на счёт пермиссии CALL_PHONE?

CALL_PHONE используется для звонка в компанию напрямую из приложения без дополнительного перехода в системный дайлер («звонилку»). Эта пермиссия в приложении уже давно. Запрашиваем её непосредственно после тапа на номер телефона в карточке компании.

Доступ к микрофону? Permission RECORD_AUDIO

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

Что говорит сам Google?

Пока ничего. Мы сразу отправили апелляцию, на статус всё ещё In progress. Обращения по другим каналам тоже остаются без внимания, в том числе обращение в Google Play Community, поддержанное нашей аудиторией (спасибо вам!).

Есть ли сейчас безопасная с точки зрения Google версия?

Свежая версия 6.31.0.535 свободна от предупреждений Google Play Protect. В ней мы удалили пермиссии, на которые теоретически мог ошибочно срабатывать Play Protect: android.permission.READ_CONTACTS, android.permission.CALL_PHONE, SMS Retriever API (это не пермиссия, но в ситуации недостатка информации решили тоже отключить).

Мы рекомендуем использовать её всем пользователям, чтобы не сталкиваться с предупреждениями.

Почему при самообновлении через 2ГИС от Google Play Protect всё равно появляется предупреждение на новую версию?

Версия 6.31.0.535 свободна от предупреждений Google Play Protect. Но обновиться на неё с предыдущей версии без предупреждения не получится — для Google Play Protect всё выглядит так, что «вредоносное ПО пытается поставить ещё одно приложение». И, конечно, пользователя об этом предупреждают. После обновления предупреждение перестаёт показываться.

А почему старые версии 2ГИС не помечают как«вредоносные»?

Мы не знаем. И по использованию данных, и по пермиссиям они одинаковы с harmful-версиями («вредоносными»).

Может быть проблема в новой фиче «Друзья на карте» по шарингу геопозиции?

Мы рассматриваем эту версию. Но против неё три аргумента:

  • Фича вышла в версии 6.29, на которую Google Play Protect не «ругается».

    (upd 16 января Google начал отправлять ошибочные уведомления для версии 6.29, но прежние два аргумента в силе)

    Более того, в первое время после появления проблемы эта версия была тихой гаванью, куда мы перенаправили все новые установки пользователей.
  • В новой версии 6.31.0.535 мы не удаляли эту фичу, а Google Play Protect перестал относить приложение к вредоносным и не видит больше проблем с безопасностью.
  • Для нарушений, связанных с отслеживанием местоположения у Google есть категория stalkerware, а не spyware, ошибочно присвоенная 2ГИС.

Если отобрать у 2ГИС все пермиссии, он останется работоспособным?

Да. Как и в случае, если не выдавать пермиссии — приложение будет работать с учётом ограничений.

Первый раз вижу чтобы Google Play Protect срабатывал на крупное известное приложение. 2ГИС первый?

Нет, 2ГИС не первый. Похожая история случилась с Samsung Wallet: обсуждение на reddit и в треде на форуме Google.

Все равно вам не верю, вы просто очень складно сочиняете. Google крупная компания, почему я должен верить вам?

Мы уверены, что произошла ошибка, и уверены в безопасности 2ГИС. Мы рассказываем подробно обо всём, что делаем в эти дни, аргументируя свои выводы. Мы прозрачны и не пытаемся завлечь вас обманом пользоваться 2ГИС. Если вы хотите получить ещё больше деталей — пишите нам, обязательно поделимся.

Что делать?

Вы можете обновиться на новую версию 6.31.0.535, которую Google Play Protect уже не помечает как вредоносное. Второй вариант: временно отозвать все разрешения 2ГИС в настройках устройства, если они нужны для функций приложения, которыми вы не пользуетесь.

Руслан Назаров, ведущий Android-разработчик

Антон Спиридонов, руководитель разработки

134134
128 комментариев

Нормально объяснили. 2ГИС уважуха!

26
Ответить

» Пермиссии

Мы вообще-то в России. В русском языке нет такого слова.

14
Ответить

Слова тролль тоже не было раньше. А вон, поди же ты - сидишь тут.

30
Ответить

Слова «разрешения» или «права доступа» видимо недостаточно технологично звучат.

15
Ответить

Ну пермишнс звучит ещё глупее, ну а если прогеры постоянно сталкивающиеся с какой то частой в их работе проблеме решили дать ей некое конкретное название, значит так тому и быть)) можно в словарь вносить, как новый англицизм. А пытаться с помощью "фи" учить айтишников ещё глупее чем требовать от гопников не пить пиво ночью на лавке, в лучшем случае матом пошлют)

3
Ответить

это ж термин

1
Ответить

Учитывая как работает служба проверки приложений у гугла, иногда достаточно просто отправить точно тотже релиз но с новой версией сборки.

7
Ответить