DroDev | Мобильная разработка: мысли вслух
464 subscribers
104 photos
229 links
Обсуждаю и рассказываю как сделать жизнь разработчика в команде интересной, легкой и продуктивной.

По всем вопросам @dilix90
Download Telegram
#Аналитика в мобильных приложениях для разработчика - страшный сон архитектуры вашего проекта. Всё потому, что мы, как разработчики, уважаем #SOLID, инкапсуляцию и всё такое... А потом приходит аналитик, маркетолог и просят всякую дичь. Например поведение пользователя на экране в зависимости от предыдущего экрана. И вот прощай #инкапсуляция.

Статья на тему как встраиваю аналитику обычно я - в черновиках и в работе, а тем временем ребята из La moda рассказывают как это делают они: https://habr.com/ru/company/lamoda/blog/469761/.

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

#Firebase #analytics (http://bit.ly/2OQwQoe)
Бесплатно и сердито. Можно строить воронки по событиям, но нельзя использовать параметры событий в нем.  Атрибуция (понять от куда пришел пользователь) есть, но в Appsflyer проще. Можно выгружать "сырые" данные в #BigQuery. Это круто, удобно и все такое, но надо повозиться. Зато можно настроить любые графики, данные и все что можно себе представить.

#Appsflyer (https://lite.ms/mTmv5y)
Использовался в основном для атрибуций. Причем, говорят (не пробовал), есть атрибуция рекламы по ТВ. В интерфейсе воронки по событиям можно разделять на каналы. У ребят из моей команды были проблемы отправить в AppsFlyer события с сервера, чтобы следить за ЖЦ пользователя в разрезе клиент-серверного единого пространства.

#Amplitude (http://bit.ly/2IPq7Ha)
Воронки - чума, можно строить по событиям, учитывать параметры и порядок ивентов. Посмотреть обезличенную инфу по пользователям на каждом этапе воронки и узнать кто конкретно отвалился. Например недавно прибежал аналитик и "айайай, у нас после релиза почему то >50% после первого экрана онбординга отваливаются". Зашли в amplitude, выгрузили список отвалившихся пользователей. Из условных 50 пользователей за период 30 было из США с одной и той же моделью телефона и из одной подсети. Все бы ничего, но приложение в сторе не доступно оттуда :D Выдвинули гипотезу, что это авто (или не очень) тесты после раскатки и спокойно пошли работать дальше.


Мой выбор - при старте проекта, если там и так используется Firebase - добавить аналитику от него. С ним можно уже запускаться, хоть будет понятно что происходит. Дальше Amplitude для более продвинутых воронок. Appsflyer уже если собираетесь поливать усиленно траффиком.
Примеры кода под #Android подъехали!

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

В блоге появилась новая рубрика "Обучение Android", в которой будут появляться небольшие статьи на одну конкретную тему "Как сделать <что-то-полезное>". Там же можно найти ссылку на #github и даже на уже готовое приложение в #GooglePlay.

На сегодня рассмотрены темы:
- #BottomSheetBehavior и как его использовать
- Анимированные с помощью #Lottie кнопки
- #Монетизация ваших приложений через рекламу
- Монетизация ваших приложений через внутренние покупки

Кроме того, в исходниках, но пока не в статьях, вы сможете посмотреть как реализовать #DeepLink через #Firebase, как можно работать с #ProductFlavors и еще пара неописанных пасхалочек.

Пссс, у меня к тебе отдельная просьба - поделись этим постом с теми, кто также фанатеет от Андроид разработки как и ты и оставь отзыв в Google play к данным примерам. Это будет подтверждением, что я всё делаю правильно и стимулом для написания новых обучающих примеров! https://dimlix.com/android-tutorials/
Сегодня люди используют совершенно разные устройства для потребления контента - смартфоны, компьютеры, планшеты и тд.

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

Улучшая пользовательский опыт, мы тем самым увеличиваем наши конверсии и лояльность к сервису в целом.

Реализовать корректную навигацию не так просто, как может показаться на первый взгляд, есть целый ряд кейсов:

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

#Firebase #DynamicLinks - простой и бесплатный инструмент, который поможет реализовать вам навигацию между продуктами.

Как его использовать - разобрал в рамках цикла обучающих примеров, приятного изучения! https://dimlix.com/deeplink-android/
Раньше в #Firebase было не очень удобно строить воронки, какой-нибудь #Amplitude для этого круче.

Давно не заходил в раздел аналитики в Firebase и тут с удивлением заметил, что теперь данные можно шарить прямиком в Google Analytics и получать наряду с отчетами в Firebase вот такие User Path в GA.
Push уведомления в мобильных приложениях - отличный способ поднять retention и другие метрики. Конечно если не перебарщивать...

О том, какие уведомления существуют в Android приложениях и как их реализовать читайте в новой статье. Там будет и про #Firebase и про #Airship с #PooshWoosh, в общем много чего интересного. https://dimlix.com/notifications-android/
И снова пару слов про кросплатформенную разработку и #Flutter.

Ожидание:
- Написал код один раз, работает везде
- Нажал кнопочку, проект собрался под все платформы

Реальность:
- #Firebase авторизацию заставил работать только с бубном. На форумах писали про "магическую" комбинацию правильных версий библиотек самого Flutter и #firebase_auth.
- #Push уведомления, необходимые также для авторизации (silent push) на iOS получилось настроить только с N-ого раза, удаляя туда-обратно сертификаты в #appstoreConnect
- Библиотека #url_launcher не хотела запускать email клиент на iOS с русскими символами в интенте 😳
- Для того, чтобы собрать проект под #iOS необходим #xCode

Итого:
Разработка под 2 платформы - удобно для #MVP, когда нужно относительно быстро запустить проект под 2 платформы, но это не так просто как может показаться на первый взгляд.

Бонус:
Само приложение можно найти по ссылке: https://stroycash.page.link/appDynLink

Буду рад обсудить детали реализации, ответить на вопросы и услышать ваши отзывы!
#Firebase от #Google, о котором ранее писал в том числе в блоге содержит прямо пул полезных инструментов для мобильного разработчика. От хостинга до аналитики с искусственным интеллектом и ML Kit. Сейчас хотел бы поговорить отдельно про Database функционал.

Fierbase Databse - по сути NoSql база в облаке. Довольно быстро настраивается, описываются правила доступа и можно работать. Все в целом неплохо… пока речь идет только о хранении данных одного пользователя. Так сказать такой облачный кэш для вашего приложения.

У нас начались с ним проблемы, когда захотели написать бэкофис под БД. Т.е. такую небольшую субдоминанта поверх, чтобы было удобно вести сервис. Так как это NoSql база, то в целом она плохо рассчитана на сильно связанные данные и таблицы, чтобы сделать простые отчеты через несколько таблиц пришлось повозиться. Но на этом самое веселое только началось.

Бесплатный режим Firebase включает 50 тысяч доступов на чтение. Вроде много. Я даже выставил «бюджет» в 5$ на всякий случай, чтобы заметить если вдруг что. Все заработало (не так быстро, как могло бы быть с SQL, но все же). А через неделю внезапно оказалось, что наши скрипты для бэра выжирали примерно 11 миллионов чтений в день 😄, что стоило примерно 100-200$ за эту неделю.

Опты с Firebase DB показал (я могу быть не прав, поправьте, если так), что
* Eдобно использовать, когда вам нужен простой бак, хранящий инфу одного пользователя
* Это может стоить дорого, а ограничить жестко возможности нет (только придет уведомление)
* Если вам нужен более продвинутый бэк, то, вероятно писать его поверх Firebase DB так себе идея. Лучше взять даже старый добрый MySQL и иметь контролируемое решение.

А что вы думаете про Firebase Datastore? (Именно про datastore, а не другие сервисы, о которых можно поговорить отдельно). https://bit.ly/31zSJgn
"#CI для бедных" или как не страдать при деплое билдов тестировщикам и в маркет.

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

Есть и хорошая новость - для этих целей есть ряд бесплатных классных тулзов.

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

Второе открытие этого год - #Github actions. Позволяет прямо в Github запилить билд. Даже есть интеграции дальше с доставкой во всякие #Firebase app distribution. Работают триггеры на пулреквесты, пуши и всякие разные actions.

Понятное дело у всех есть бесплатные лимиты. Но коли вы из них выйдете - наверное с проектом все отлично и можно и заплатить за четкий #SaaS.
Вы же помните, что #Crashlytics от #Fabric теперь не от Fabric, а от #Firebase? И что он deprecated? И что надо до 15 ноября обязательно мигрировать 🙈

#Библиотеки