Обновить
0

Пользователь

Отправить сообщение
Многие вот топят за «альтернативные сторы». В андроиде такие уже есть — 30% новых девайсов в РФ — Huawei без GMS, со своим HMS (кривым клоном HMS). Давайте я вам расскажу на практике, как это работает.
Дисклеймер — я уже много лет (>= 10, точно не помню) разработчик под Android. 2 месяца назад зарелизил инди-игру под iOS, сегодня вот релизим её под Android. Изначально, с учётом 30%, обозначенных выше, была мысль релизить её в Google Play + Huawei AppGallery, однако, есть нюансы.

Во-первых, HMS (Huawei Media Services) = GMS (Google Media Services) курильщика. С точки зрения разработчика, это Google Play года этак 2012 (кто в курсе, тот вспомнит, что это был за ад, кто не в курсе — представьте современные SPA в дизайне 2012 и всё поймёте).

Вот ты хочешь зарегистрировать аккаунт разработчика с возможностью внутриигровых покупок.
Что надо сделать в случае с гуглом? Заплатить 25 баксов и отправить скан/фотку driver license. Через сутки-двое всё готово.
Что надо сделать в случае Хуавея?
Платить не надо, но надо отправить?
1. Фотку Driver License (или аналога), обязательно
2. Фотку/скан карты, обязательно
3. Скан документа об открытии счёта в банке (если хочешь что-то продавать)
4. Заявление о согласии на обработку перс. данных (если хочешь что-то продавать)

При чём последние два пункта — обязательно РЕАЛЬНОЙ почтой, и представитель Хуавея (Никита Моргун, который так активно пиарит тут хуавейные сервисы), конечно же, не получит твой документ, если ты его отправил не «лично в руки» (отправлял Почтой России, дублировал информацию представителю Хуавея в РФ, что, мол, надо сходить получить — сегодня мне отправят обратно этот документ).

Ну ок, весь ад с доками мы, предположим, прошли.

API, естественно, у всех разный, и я сейчас говорю даже не о биллинге, а о банальных вещах типа Leaderboards и Achievements. Оно довольно сильно отличается от GMS, так же, как и Remote Config.
Но нет, китайцы придумали своё говно даже для Remote Config. У них там свой собственный формат. Хочешь Remote Config? Поддерживай две версии — для здорового человека и для курильщика (на самом деле — обе для курильщика, что Firebase, что Huawei, но хуавеевская ещё хуже).

Слава Dagger 2 и Clean Architecture, мы можем подменять реализации…

А нет, не совсем.
Тот же Huawei APMS заменяет в DEX HttpUrlConnection на свою реализацию тупо grep-ом (т.е. вместе с Firebase Performance оно жить не может). А если вы в теме, то знаете, что Gradle не позволяет подменять плагины для разных Build Flavor (т.е. нельзя просто взять и не включать хуавейные сервисы для билдов гугл плея и наоборот, а они, напомню, конфликтуют).

Кроме того, Huawei требует, чтобы имя пакета для их стора заканчивалось на «.huawei», что ломает логику работы в «google-services.json» и хуавейным agservices.json, какой дебил вообще придумал метаданные пихать в файл?

Заметьте, я сейчас описал работу только с ОДНИМ альтернативным стором.
А ещё есть как минимум Samsung Galaxy Apps Store и Xiaomi GetApps. Будем ли мы релизиться туда? Вряд ли, только если появится куча свободного времени. И под хуавей тоже вряд ли будем релизиться, несмотря на их 30% рынка новых девайсов. Это слишком «дорого» для инди-разработчиков. Всякие там Mail.RU могут себе позводить потратить 100500 часов на интеграцию, просто для имиджевого присутствия. А инди-разработчики не могут, им проще довольствоваться тем, что предлагают Гугл и Эппл.

P.S. Для регистрации в Xiaomi GetApps потребовали фотку с ID. Ну ок, предоставили — а хрен там, неправильная у вас фотка. Пришлось три раза перефоткаться, чтобы пройти модерацию. При этом все правила (типа, локоть должен вмещаться на фото, текст на документе должен быть легко читаем) были соблюдены.

Извините, не мог это держать в себе, пригорело аж пздц. Я-то не против разных сторов, но если это превращается в анальное изнасилование разработчика — то я манал поддерживать все эти «альтернативные сторы» даже морально, не говоря уже о реальной публикации туда.
Ещё один вредный совет:
Если вы пишете под Android, используйте m для префиксов членов класса, например mIsValid, ведь сразу становится понятно, что это field, а не variable /s
На самом деле, это «m» — просто жесть. Пошло оно с тех времён, когда core команда не могла нормально использовать IDE, поскольку Eclipse не осиливал загрузить такой большой объём кода в себя. Потом пришла IDEA/Android Studio, которая уже нормально осиливала, но ретрограды из гугла, которые могут в уме инвертировать бинарное дерево не осилили уже саму IDE, и поэтому пишут вот в таком стиле до сих пор.
А самое печальное — что они же пишут доки, откуда этот «m» разносится по проектам 3rd-party разработчиков, которые понятия не имеют, зачем оно нужно, но тупо копипастят, потому что ж «гугол решил, а там не дураки работают».

P.S. Те, кому до сих пор кажется, что «там не дураки работают» — посмотрите внимательно код AOSP Launcher, такое ощущение, что туда как в Спарте сбрасывают самых слабых разработчиков. А это, по сути, Core Android.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность