Статьи

Как поссорились Гугл с Фейсбуком

 

6 марта 2013 в Буффало, штат Нью-Йорк, был прохладный день с небольшим снегопадом. Оставалось три месяца до миллиона опубликованных приложений в Google Play, чуть больше полугода до выхода Android KitKat. Мир мобильных приложений был прекрасен и с надеждой смотрел на восходящее солнце.

Деннис (Dennis Delaney) услышал уведомление, взял в руки телефон и увидел подозрительную просьбу якобы от Facebook обновить их приложение.

screenshot_2013-03-06-18-44-49screenshot_2013-03-06-18-38-33

Человек цифрового века, наученный горьким опытом, с первого взгляда почувствует какую-то подставу, ведь все порядочные приложения, и уж тем более сам Фейсбук, обновляются, очевидно, только через Google Play. Так что он без промедления отказался от столь соблазнительного предложения и попробовал выяснить, что произошло. На форуме AndroidCentral довольно быстро собралась небольшая группа людей, которых затронула эта же проблема. Впрочем, выяснять долго не пришлось — 15 марта 2013 года Ragavan Srinivasan, сотрудник Фейсбука, подтвердил, что они нуждаются во множественных тестах и обновлениях, почему и выбрали такой способ.

Ragavan Srinivasan

Hi all. I work at Facebook on the Android app and wanted to mention that this is legitimate. We’re working quickly to improve Facebook for Android and want to make sure everyone is using the best version of our app. You’ll experience these updates when you are on Wi-Fi, and they won’t rely on your data plan.

(WRONG!) Никто же не хочет быть подопытным. Особенно, если тебя сделали таковым без твоего ведома. Особенно, если вас таких примерно один процент. Сомнительность решения отметили как сами пользователи:

screenshot-at-sep-24-16-49-48

Так и достаточно крупные издания, в том числе The Verge и TechCrunch. Компания Фейсбук была вынуждена поместить в свой Help Center информацию об этом «тихом обновлении» вместе с гарантиями безвредности обновлений для пользователя.

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

В правилах Google Play к тому времени уже был пункт о сторонних источниках:

[…] prohibited on Google Play, as are applications that cause users to unknowingly download or install applications from sources outside of Google Play.

Ни скачивать. Ни устанавливать. Но, сказала компания Фейсбук, обновлять-то не запрещено? Наше приложение скачано и установлено из Google Play, а сейчас просто обновляется, ничего особенного.

Компания Google вздохнула ещё раз.

26 апреля 2013 года в Google Play Developer Programme Policy добавилось уточнение, что модификация скачанного из Google Play APK-файла какими-либо способами, кроме как механизмом обновлений Google Play, тоже запрещена:

An app downloaded from Google Play may not modify, replace or update its own APK binary code using any method other than Google Play’s update mechanism.

Лазейка закрылась.

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

Так вот, 18 марта 2016 года в Петербурге, как и предыдущие 313 лет, шёл дождь. Спящие коллеги внешне почти не отличались от тех, кто был занят важными и срочными задачами, и лишь из курилки доносились возбуждённые голоса живых. Причиной послужила статья на уважаемом техническом ресурсе, автор которой предлагал в качестве подстраховки от банов Google реализовать обновление приложения из другого источника. Отличная идея, очень свежая и классная, удивительно, что она никому раньше в голову не пришла. Хотя постойте…

На указание, что его подстраховка от бана сама по себе может привести к бану, автор ответил практически так же, как и менеджер Фейсбука:

Кроме того, здесь есть тонкость — если приложение только сообщает об обновлении и предлагает пользователю самому установить apk — вряд ли это нарушает данное правило, там скорее имеется в виду, что приложение не должно само менять свой пакет, и это довольно логично.

Что ж, давайте попробуем кратенько разобраться. Итак, билды для Android выглядят как APK-файлы. Именно за их целостность и обновление переживает Google. Именно их запрещено модифицировать, заменять или обновлять иными способами , кроме как через механизмы самого стора. Таким образом, Google имеет возможность проверить на подозрительную активность приложение до того, как оно попадёт к пользователю. Спасибо за заботу!

Но ведь вот в той вот игре есть докачка! И в той, и ещё во всех остальных. И, кстати, мне рассказывали про PhoneGap!

Это другой вопрос. APK-файлы умеют обращаться к закачанным отдельно и распакованным ресурсам (например, подобранной под разрешение экрана конкретного девайса графике). Ещё они могут хранить какие-то конфиги и, соответственно, обновлять их при необходимость, в том числе с сервера. Несмотря на то, что всё это может сильно повлиять на игру, изменить её интерфейс, баланс, что угодно ещё, эти случаи не попадают под запрет, потому что они не затрагивают сам APK-файл.

В этом смысле, действительно, интересны фреймворки, позволяющие собрать мобильное приложение, обращающееся к нативным функция через WebView. Особое внимание, казалось бы, должны получить технологии типа PhoneGap Hydration — возможность обновлять приложение мгновенно и напрямую. Но они попадают под то же исключение — сама оболочка заключена в APK и не меняется. Обновляются только HTML/CSS/JS файлы, и пускай именно они и являются по сути самим приложением, пока не затронут APK-файл, всё хорошо.

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

Первого марта 2016 Google перенесла правила для разработчиков в новый Центр правил для разработчиков. Теперь про обновление приложений есть ровно один скупой пункт в Соглашении Google Play о распространении программных продуктов:

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

А вся забота о пользователе переехала в специальный раздел.

Вот такая вот история, которая может помочь гейм-дизайнерам, при случае, блеснуть познаниями в смежных областях. Особенно, если программисты убеждают, что «быстро-быстро накатить новый баланс не получится из-за ToS Гугла» 😉

5 комментариев

  • Torick

    Милая история, вот только вряд ли геймдиза сильно волнует, что бинарник трогать нельзя. А если кто-то хранит в нем важные переменные, тот сам себе злобный буратина.
    Я бы, кстати, послушал про подводные камни докачки контента on the fly, пока магазинная apk развлекает пользователя по мере сил.

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