Есть ли жизнь без Google Play? Альтернативы и обновление приложений
На днях я сделал приложение для обхода блокировки rutracker, однако уже дважды получил от Google отбой по разным надуманным причинам. Это очень огорчило, и возник вопрос - что делать? Поиск по хабру показал, что такие проблемы возникли очень у многих (пруфы: один, два, три, четыре… Тысячи их). А помимо бана есть ещё много причин, по которым ваше приложение может оказаться “за бортом” Google Play - например, если оно предназначено для использования только в компании, для друзей или для другого круга лиц. Так же возможно, что ваше приложение по определению не может быть выложено на Google Play - например, если оно является само по себе установщиком приложений.
Готовой статьи на эту тему я не нашёл, так что решил, что верным решением будет разобраться и написать свою. Итак, принципиальных варианта есть всего два.
1. Используем альтернативный магазин приложений
Тут довольно богато. Amazon App Shop, Samsung Apps, Yandex.Store, blackmart, humble bundle, F-Droid... В общем-то неплохо. Я из них пока попробовал только Yandex.Store. Получилось зарегистрироваться и опубликовать приложение минут за 5 - оно там уже доступно. Правда, недоумение вызывает полная невозможность как-либо дать ссылку на установку приложения в Yandex.Store. Может, я слепой, но кнопочки "Share" там просто нет. Ну и никакого веб интерфейса - только мобильный. Кстати, вопрос к представителям Yandex - а Yandex.Store вообще живой? Последний пост в твиттере датируется 2014 годом.Плюсы:
- Наличие некоторых возможностей, к которым мы привыкли в Google Play - включая автоматическое обновление, статистику и биллинг (есть не во всех указанных, конечно).
- Хотя бы какой-то авторитет издателя - хуже, чем если бы приложение было на Google Play, но лучше, чем ничего.
- Индивидуальные фичи - например, F-Droid публикует только приложения с открытым кодом.
Минусы:
<li>Потеря в имидже. Все пользователи привыки, что приложение должно качаться с google play. Если его там нет - значит, что-то не так. Хотя вот, например, Yandex.Store на Google Play нету. И качать его приходится очень стрёмным методом...</li>
<li>Пользователю придётся устанавливать некий "левый" магазин приложений. У меня вот ничего кроме google play не было с момента появления Android, и ставить я не собирался. Устанавливать себе ещё одного "большого брата" с полными возможностями по манипуляции твоим устройством - довольно стрёмно.</li>
<li>Кажется, ни у одного из них нет информации о сбоях. Плюс другие возможности Google Play включая биллинг.</li>
2. Самостоятельное решение
Как ни страшно это звучит, на самом деле здесь мы приходим к аналогу обычного десктопного софта. Сама программа знает, когда и как ей обновляться, рассказывает об этом, в ней интегрированы платёжные возможности и монетизация. Рекламой и продвижением занимаетесь вы сами. Ужас, ужас! Но на самом деле, мы просто избаловались. Нужно просто находить правильные пути. Продвигать приложение можно, например, на тематических блогах и форумах - в том числе на 4pda с очень неплохим объёмом аудитории. Или прямо на хабре.Кстати, даже если ваше приложение успешно опубликовано на Google Play - имеет смысл подстраховаться и как минимум сделать в нём свой алгоритм обновления, который активизируется, если, например, приложение давно не обновлялось. Или по проверке бана на вашем сервере или прямо на Google Play. Иначе, если вас на какое-то время забанят, пользователи не смогут обновить приложение. А если есть запасной вариант - вреда будет заметно меньше.
Плюсы
Ваше приложение практически невозможно заблокировать - только вместе с ресурсом, на котором вы держите обновление и информацию.Минусы
- Всё, что только можно - приходится делать вручную.
- Потеря в имидже, о которой уже было сказано ранее. Как ни странно, возможно что меньшая, чем в случае использования некоего магазина приложений.
Итак, что же вам придётся делать:
Размещение приложения для скачивания
На самом деле, это всего лишь означает, что вам нужно выложить APK куда-то в доверенное место. Их не так уж мало - можно использовать всё тот же 4pda, можно класть релизы прямо в github, можно на свой сайт... Вариантов уйма.Отладка ошибок
Да, привыкли мы к хорошему - Google сам поймает ошибку, всё расскажет о её месте, устройстве пользователя и так далее. Но... Никак проблем это реализовать самостоятельно. Как простейший вариант - ловим все эксепшны и отсылаем куда-то на сервер по HTTP или даже на почту.Сбор статистики
К сожалению, никогда не интересовался статистикой приложений, но вам с очевидностью придётся реализовать как минимум статистику по скачиваниям.Сложные библиотеки
Собственно придётся забыть о всех сложных и хороших вещах, которые даёт Google Play. Впрочем, то же самое касается, пускай и в чуть меньшей степени, любых магазинов приложений.Обновление
По обновлению есть принципиально три варианта:- Автоматическое обновление при наличии прав SuperUser. Это довольно стрёмно, но понятно - не будем рассматривать подробно.
- Обновление вручную после автоматического скачивания. Неплохо, однако требует разрешения на запись данных. Если его у вашего приложения не запланировано, то ставить лишние разрешения - зло. Требует от пользователя разрешения на установку программ из сторонних источников.
- Обновление вручную при переходе по ссылке. Простой вариант, однако требует от пользователя скачать и открыть APK файл. Ну и так же как второй вариант - требует от пользователя разрешения на установку программ из сторонних источников.
Чтобы показать, как всё просто - покажу примитивную реализацию третьего варианта, которую я сделал для своего приложения за час времени.
- Добавляем куда-то свою актуальную версию приложения. Я засунул прямо в исходники на Github в build.gradle:
// releaseVersionCode 5
- Публикуем где-то релизы приложения. У меня они так же лежат на github, в формате
String url="https://github.com/jehy/rutracker-free/releases/download/" + version+"/app-release.apk";
- Пишем собственно алгоритм обновления:
3.1 в MainActivity.OnCreate добавляем вызов проверки:
1 | new Updater().execute(this); |
3.2 Пишем простенький класс для проверки:
1 | class Updater extends AsyncTask<MainActivity, Void, Void> { |
3.3 Добавляем класс для хранения информации о том, что пользователь решил проигнорировать этот релиз:
1 | public class SettingsManager { |
3.4 Добавляем функцию, которая покажет пользователю диалог с предложением перехода:
1 | public void Update(final Integer lastAppVersion) { |
Вуаля! Всё, теперь у нас обновляемое приложение. А если оно когда-нибудь появится в Google Play или в другом магазине приложений, который есть у пользователя, то оно сможет обновляться ещё и оттуда.
Выводы
Что есть в сухом остатке - думаю, что без Google Play жить можно. И не только можно - нужно, минусы наличия монополиста на рынке очевидны. В том числе, если бы была хоть какая-то осмысленная конкуренция - возможно, общение с технической поддержкой было бы хоть какое-то адекватное, а не отписка пустыми шаблонами.Так же хочу получить мнения от читателей.
- А как вы решаете проблемы бана приложения?
- Пользуетесь ли альтернативными магазинами приложений?
- Ставите ли приложения с каких-то других сайтов через apk?
- Как думаете, как мы будем ставить приложения на свои устройства лет через пять?
Ссылки
- Как жить на Android вообще без Google;
- Пример реализации второго способа обновления - со скачиванием apk программно;
- Красивый пример автоматического обновления со скачиванием APK;
- Пример реализации обновления с правами SuperUser;
- Пример хитрого обновления... Без обновления. Возможно, что устарел - датируется 2014 годом;
- Некий сервис для авто обновления - несовместимый с Google Play;
- Тут можно взять меня на работу — да, я её ищу.