Хабрахабр

[Перевод] Chrome (чуть не) снёс расширение, над которым мы работали три года, и не хочет говорить за что

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

Вот в такую русскую рулетку заставляет играть разработчиков интернет-магазин Chrome. Некоторым везёт, и путём долгих препирательств и игр в угадайку они в конце концов проходят модерацию – так было с Pushbullet. Другим везёт меньше – им перекрывают кислород. Мы попали в число неудачников: одиннадцатого июня нас убрали с маркета. Бизнес на грани смерти, а решают его судьбу люди, которые отказываются выходить с нами на связь.

Наше расширение – инструмент для создания доступной онлайн-среды; оно позволяет людям с нарушениями двигательных функций или травмами использовать при работе с браузером голосовое управление вместо мышки и клавиатуры. Мы работаем честно: ни рекламы, ни выкачивания данных – просто прозрачный выбор между бесплатной версией и платной подпиской. Рейтинг составляет 4.7, число активных пользователей в неделю – около четырёх тысяч. Мы вложили в этот продукт три года работы «от звонка до звонка».
Двадцать шестого мая нас оповестили, что мы нарушаем правила следующим образом:

Приватность пользовательских данных

В вашем продукте обнаружены нарушения правил из раздела «Использование разрешений», согласно которым разработчики обязаны:
— Запрашивать доступ к минимальному набору возможностей, необходимому для функционирования инструментов или сервисов вашего продукта;
— Если несколько разных разрешений могут обеспечивать выполнение функции, выбирать то, которое даёт минимальный доступ к личным данным или функциональности;
— Не создавать «задел на будущее», запрашивая разрешения, которые могут оказаться полезны для еще не реализованных инструментов или возможностей.

Поломав голову над тем, какие разрешения они могут иметь в виду, мы несколько дней просидели допоздна, внося в расширение изменения, и отправили версию с урезанными запросами. Затаили дыхание и стали ждать.

Было: debugger, notifications, tabs, activeTab, tts, storage, unlimitedStorage, host permission
Стало: tabs, debugger, notifications, tts, storage, host permission

Шестнадцатого июня мы получили свеженькое оповещение о том, что приложение отклонено, но теперь уже по другой причине. Письмо показалось нам обнадёживающим: в нём говорилось, что предыдущая версия, которая прошла модерацию, останется на маркете, нам нужно будет только исправить описание. Проблема заключалась в том, что и предыдущая версия получила отказ из-за проблемы с разрешениями. Поэтому наше расширение по-прежнему было представлено на маркете страницей 404.

Текст повторного отказа:

Cпам и реклама в магазине

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

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

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

Семнадцатого июня мы получили письмо с отказом всё по той же причине – спам и реклама в магазине. Тут мы уже вообще перестали что-либо понимать и стали ужимать описание по максимуму. Может, им не понравилось, что мы указывали конкретные сайты, под которые делали инструменты (Gmail, Google Sheets, Reddit, Hacker News)? У нас в расширении есть плагины, в которых предусмотрены особые функции именно для этих ресурсов. Ну, например, для Gmail есть специальные команды «написать», «ответить», «назад во входящие» и так далее. Возможно, модераторы не слишком вникали в частности.

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

Сегодня утром, восемнадцатого июня, нас поджидало очередное письмо счастья от магазина Chrome. На этот раз тема спама и рекламы не затрагивалась, но зато мы вернулись к тому, с чего начали – нам отказывали из-за разрешений. Каким образом нас отбросило на исходную позицию? Ведь мы вносили изменения только в описание, никаких новых пакетов с новыми разрешениями загружено не было. Бессмыслица какая-то.

Мы в полной растерянности. Попробовали обратиться в службу поддержки Chrome для разработчиков, но не получили ответа. Никто нам не говорит, какие из разрешений считаются избыточными для расширения. Сами мы тщательно проанализировали каждое и пришли к выводу, что все они строго необходимы для работы.

Все письма от администрации Chrome заканчиваются такими словами:

Регулярные или грубые нарушения правил интернет-магазина Chrome могут привести к заморозке вашего аккаунта разработчика или к запрету на использование платформы.

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

tabs

Разрешение activeTab пускает нас на ту вкладку, с которой пользователь кликнул на иконку расширения. Но для наших нужд этого недостаточно. Представьте: пользователь запускает расширение нажатием на иконку, а затем говорит: «Следующая вкладка», чтобы перейти на соседнюю вкладку в том же окне. При таком раскладе без разрешения tabs подавать команды он уже не сможет, ведь activeTab действует только в пределах той вкладки, где произошел запуск. Поэтому-то и требуется tabs, которое не имеет настолько строгих ограничений.

debugger

Необходимо, чтобы голосом нажимать клавиши («нажать на левую стрелку», «нажать на Enter»). Слушатели, реагирующие на сгенерированные события, во многих случаях не срабатывают, как например в Google Sheets или с некоторыми операторами div с атрибутом contenteditable. Сделать разрешение необязательным невозможно (ограничение прописано в манифесте).

host permission

Это разрешение добавляется по умолчанию, потому что скрипты ContentScript у нас должны свободно запускаться на всех страницах. Внедрять скрипты, которые взаимодействуют с DOM, нужно, чтобы дать пользователям возможность управлять содержимым страницы – нажимать на ссылки, пролистывать, проигрывать видео и так далее.

tts

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

notifications

С его помощью мы сообщаем пользователям, что расширение LipSurf было отключено после долгого периода бездействия, или о том, что установлено обновление.

storage

Разрешение служит для хранения пользовательских настроек и кастомных плагинов.

Дополнение к статье, опубликованное позже

В этой битве мы победили, но войну не выиграли.

Мне повезло. Если бы я в тот день не выиграл главный приз в лотерее «Интерес интернетов», наш проект бы прикрыли и пользователи остались бы брошенными на произвол судьбы с инструментом, который выручал их в повседневной жизни, а теперь больше не поддерживается. Тысячи людей с ограниченными возможностями могли потерять комфортную онлайн-среду, а мы – свой бизнес, потому что судьба того и другого находилась в руках обезличенного контролёра, который тоже иногда ошибается.

Вкратце повторим: наше приложение для Chrome удалили с маркета, якобы потому что оно нарушало правила. После обширных правок кода, многочисленных неудачных попыток пройти модерацию и недели изгнания с маркета без возможности обсудить ситуацию с администрацией мы стали во весь голос возмущаться на Reddit. Наш пост попался на глаза кому-то, кто вхож во внутреннюю кухню интернет-магазина Chrome; этот человек написал нам в Твиттере – сказал, что произошло недоразумение и извинился. В тот же день мы в очередной раз отправили расширение на модерацию и снова появились на маркете.

Но жалобы в Сети не должны становиться каналом связи с администрацией. Разработчики не должны от безысходности полагаться на лотерею «Интерес интернетов». Магазин Chrome существует уже десять лет, пора бы им как-то навести у себя порядок. Ну а мы, команда LipSurf, хотим воспользоваться своим завидным положением в центре внимания, и помочь остальным разработчикам улучшить систему.

Для начала, хотим поблагодарить героя дня @DotProto. Он не только нас спас, но еще Pushbullet и многих других. Мало того, он этим занимается в свободное от работы время. Хотя @DotProto говорит, что администрация работает над отладкой процессов изнутри, с нашей стороны было бы как-то глупо стоять в сторонке, ждать и надеяться. Проблема явно носит системный характер, судя по тому, что форумы маркета усеяны мольбами о помощи, а в комментариях к нашему посту на Reddit собралась целая перепись подобных историй. Это может случиться и с другими и, скорее всего, случится.

Исходя из этого, сегодня мы открываем группу для разработчиков, сотрудничающих с интернет-магазином Chrome, которая будет вести диалог с маркетом. Это не канал техподдержки и не платформа, где можно привлечь внимание, если администрация на тебя не реагирует. Это место, где разработчики могут собраться и обсудить, как улучшить фундаментальные принципы сотрудничества. Инициатива не организована компанией Google и группа не состоит под её началом.

Вместе у нас будет больше шансов на успех в следующем:

  1. Убедить Google Chrome разрешить магазины со сторонними расширениями. Это позволит внести разнообразие в прежде огороженный ассортимент расширений, поставит разработчиков в более выгодные условия и снизит риск того, что ваш продукт безвозвратно снесут просто потому что.
  2. Добиться со стороны администрации магазина Chrome более справедливого отношения и большей готовности вступать в контакт. От шаблонных писем с отказами, в которых информация о нарушения даётся только в самых общих чертах, страдают все – и разработчики, и сотрудники компании. Тем и другим приходится зря терять время в попытках прояснить ситуацию, особенно когда кого-то отклоняют по ошибке.

Начинать сбиваться в кучу и выстраивать оборону нужно уже сейчас – если этого не сделать, всё так и останется в руках контролёра по имени Chrome. Форум будет открыт также для сотрудников компании и людей, которые отстаивают интересы разработчиков, как @DotProto. Мы ведь не воевать с ними собираемся, в самом деле – хорошая платформа и сама выступает за, а не против своих клиентов.

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

ЧаВо

А что нам это даст?

Ну, для начала, мы хотя бы озвучим имеющиеся проблемы, заручившись поддержкой как разработчиков, так и конечных пользователей. Из более экстремальных мер можно назвать организованный блэкаут расширений Chrome в назначенный день. Из менее экстремальных – подачу предложений, как можно улучшить опыт создания и использования расширений (например, в том что касается разрешений) от лица не отдельных людей, а целого сообщества.

Как быть с adware и расширениями, которые шпионят за людьми?

Если существование магазинов со сторонними расширениями было бы разрешено, им бы предоставлялась возможность самим создавать необходимые барьеры – хоть финансовые, хоть любые другие. Есть основания считать, что они справились бы с отсеиванием мошеннических продуктов не хуже Google.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть