Разделы портала

Онлайн-тренинги

.
Разработка и тестирование мобильных дип линков (mobile deep links)
05.07.2018 13:35

Автор: Диана Пинчук, QA Engineer, Getsocial.im

Англоязычный источник.

Мобильные дип линки (mobile deep links) все чаще используются во многих мобильных приложениях, но до сих пор многие разработчики и тестировщики сталкиваются с различными проблемами при их разработке и интеграции. Мы в GetSocial более 4 лет разрабатываем свое deep links решение. За это время мы столкнулись со множеством изменений в мобильной экосистеме, включая изменения в ОС, браузерах и стандартах самих дип линков.

В этой статье описаны самые распространенные проблемы при работе с дип линками, а также советы по их тестированию. Но для начала короткое напоминание, что они из себя представляют.

Дип линкинг (deep linking) позволяет конечному пользователю открыть страницу с нужным контентом внутри мобильного приложения, минуя его домашнюю страницу и минимизируя трату времени на поиск необходимого контента.

В случае, если приложение не установлено на девайсе, отложенный дип линкинг (deferred deep linking) позволяет пользователю открыть нужную страницу внутри мобильного приложения даже после его установки.

Контекстный дип линкинг (contextual deep linking) дает дополнительную возможность сохранения информации (например, о промо кампании) во время всего сценария установки приложения.

Пример contextual deep linking: кастомная информация сохранена в виде key-value пар и доступна после установки приложения, что позволило кастомизировать стартовую страницу приложения для получателя линка. Источник

Преимущества дип линков

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

  • Улучшение пользовательского опыта. Пользователь будет больше доволен вашим приложением, если при первой встрече с ним увидит персонализированное приветствие от друга (как на скриншоте выше) вместо стандартизированной заставки.
  • Увеличение показателей удержания пользователей (retention) и их вовлечения (engagement). Согласно нашей статистике, некоторые приложения показывали 31% day 7 retention для пользователей, который поставили это приложения после приглашения другого пользователя. Это на 77% выше по сравнению с показателем 18% day 7 retention для пользователей, которые установили приложение другим способом (стандартные цифры взяты из отчета Adjust).
  • Помощь в повторном привлечении пользователей (re-engagement). Если пользователь перестал использовать ваше приложение, но пока не удалил его, вы можете заново вовлечь его при помощи специального предложения (например, скидки), которое откроется при помощи дип линка.
  • Усиление маркетинговых возможностей. Дип линки могут стать частью единой маркетинговой экосистемы, где вы можете отслеживать всю необходимую статистику своих промо кампаний как для web, так и для mobile. Теперь вы будете точно знать, установил ли пользователь ваше приложение благодаря клику по конкретной мобильной ссылке.
  • Улучшение узнаваемости (discoverability) приложения. Личные рекомендации до сих пор являются одним из самых надежных источников установки мобильных приложений. Инвайты с дип линками - прекрасный метод личных рекомендаций.
  • Возможность сделать end-to-end тестирование быстрее. На этапе приемочного тестирования, когда надо проверить длинные сценарии работы вашего мобильного приложения, использование дип линков поможет сделать навигацию быстрее и тратить меньше времени на тестирование.


Проблемы, с которыми сталкиваются разработчики и тестировщики

Поддержка различных технологий работы с дип линками

Что делать со всем зоопарком на картинке выше? Возможно, придется поддерживать все перечисленные технологииSurprised. Или же  вам повезло и не нужно поддерживать старые версии iOS (до 9) и Android (до 6), что уменьшает список поддерживаемых стандартов (можно не настраивать URI Schemes).

Из хорошего: обновления iOS Universal Links и Android App Links выходят не так часто, и настроив их однажды можно надеяться на более-менее стабильную работу следующие несколько месяцев.

Разработка линков, которые будут работать во всех мобильных браузерах

Работа с iOS в этом плане проще: большинство приложений использует Safari или его view. Если iOS Universal Links работают в одном из приложений с таким view (например, нативный Email клиент), скорее всего они будут работать и в других подобных приложениях (Whatsapp). Приложение Gmail для iOS использует Chrome, так что не забудьте проверить и его рендеринг.

  • Android позволяет использовать большое количество браузеров. Более того, приложение, которое называется “Android browser” может отличаться на разных линейках одного производителя. Чтобы понять, насколько все плохо, посмотрите эту презентацию.
  • Chrome. Все должно работать хорошо, если вы поддерживаете Chrome intents. Но.. на одном из наших тестовых девайсов с Android 4 мы продолжаем видеть ошибку ‘Web content couldn’t be displayed’.
  • Samsung browser. Некоторые версии движка Samsung браузера не запускают нужный интент, и по клику на линк вместо нужного приложения открывается Google Play.
  • UC browser. Нам пришлось добавить JavaScript проверку установлено ли приложение на девайсе, и открывать его в случае несрабатывания интента.
  • Opera mini. В этом случае даже JavaScript костыль не помог, вместо приложения получалось открыть строку поиска в Google Play, фильтрованную по package name.

Интеграция с соц.сетями и мессенджерами

Множество браузеров + множество мессенджеров => ад фрагментации и очень много зависимости от сторонних приложений. Для лучшего пользовательского опыта и высоких показателей конверсии необходимо поддерживать хотя бы самые используемые приложения, согласно статистике распределения по странам.


Распределение популярности мессенджеров по странам, источник

Встроенные браузеры (in-app browsers)

У приложений вроде Kakao и FB Messenger есть свои встроенные браузеры, которые позволяют удерживать пользователей внутри данных приложений при просмотре стороннего контента. Больше браузеров => больше user agents, требующих поддержки.

У некоторых приложений реализация web view ломает работу iOS Universal Links. Мы пытаемся обрабатывать такие ситуации отслеживанием кликов при помощи user agent или HTTP referrer, но иногда и это не помогает. Например, на момент написания статьи мы точно знаем, что дип линк навигация не сработает с iOS Telegram, всегда открывается App Store вместо приложения.

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


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

Отслеживание атрибуции (attribution)

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

В Android специально для этого есть специальный атрибут - Google Play INSTALL_REFERRER, который надежно срабатывает в большинстве случаев. В iOS, к сожалению, нет ничего подобного на данный момент.

Чтобы решить эту проблему мы используем цифровой отпечаток устройства (fingerprinting). Это не идеальное решение, но одно из самых надежных на сегодня: сначала отпечаток формируется при клике на линк, потом - при первом использовании приложения. Если отпечатки совпали внутри специально обозначенных временных рамок (т.н. attribution window), установка приложения считается действительной.

Если пользователь кликнул на ссылку на десктопе, он откроет лендинг страницу, с которой можно отправить  SMS себе на девайс, либо сгенерировать QR code, чтобы отсканировать с девайса. Таким образом удается сохранить возможность отследить, с какой конкретной ссылки пользователь установил приложение

Предотвращение мошенничества

Мошенничество с установкой приложений стало серьезной проблемой довольно давно, и новые уязвимости появляются также быстро, как и способы борьбы с ними. Разработчики и провайдеры deep links решений должны уметь отслеживать и предупреждать не только довольно безобидные случаи мошенничества вроде переустановки приложения с одного устройства (чтобы получить больше наград), но и более “продвинутые” виды мошенничества вроде click injections.

Для того, чтобы больше узнать об этой теме, советуем ознакомиться с отчетом компании Appsflyer The State of Mobile Fraud: Q1 2018. Для борьбы с мошенничеством при установке приложений используйте Google Play Referrer API в Android и Apple install validation в iOS.

Некоторые end-to-end сценарии очень тяжело (или невозможно) автоматизировать

Для автоматизации мобильного тестирования мы используем Appium. Нам пришлось столкнуться с несколькими проблемами при попытке автоматизировать проверки работы дип линков:

  • Поддержка сторонних мессенджеров. Все поддерживаемые сторонние приложения должны иметь актуальную версию, что значит ручное скачивание и обновление на каждом девайсе/эмуляторе. В Android Studio 3 появилась поддержка Google Play Services, что позволяет делать подобные обновления на эмуляторах автоматически. На iOS пока нет подобного решения.
  • iOS-тесты на Appium требуют, чтобы каждое тестируемое приложений было подписано development identity, что требует дополнительных усилий от разработчиков.
  • Android Appium позволяет переключение между приложениями внутри одной сессии, а iOS - нет. Это делает невозможным протестировать deferred deep links при помощи разных мессенджеров, когда приложение устанавливается после клика на линк. Такой тест возможен только с SMS, так как это считается system activity.

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

Постоянная поддержка

Постоянная поддержка своего продукта является огромной проблемой для каждого мобильного разработчика. Мобильная экосистема меняется очень быстро и нельзя надеяться, что один раз настроенная фича будет работать после обновлений ОС, движка браузера, API либо стороннего приложения. Что с этим делать? Надо постоянно быть в курсе всех новостей и обновлений¯\_(ツ)_/¯

Полезные инструменты

  • UA Switcher плагин, который позволяет просматривать веб-страницы, используя user agent мобильных браузеров. Также можно импортировать свои кастомные конфигурации.
  • Сайты, позволяющие сгенерировать webhook ссылки: раз и два. Большинство провайдеров дип линков позволяют отслеживать ивенты “на лету”, достаточно лишь вставить полученную ссылку в панель управления провайдера.
  • Сайт для проверки, откроет ли дип линк ваше приложение.
  • App Search Validation Tool от Apple. Можно протестировать правильность конфигурации Universal Links.
  • Deep Link Tester для Android, который можно собрать своими руками. Также можно скачать готовые аналоги с Google Play.
  • Подписка на обновления сторонних приложений. Мы используем AppShopper, этот сервис присылает письма на почту каждый раз, когда интересующее нас приложение обновилось в App Store. Это очень удобно - сразу видно, какие мессенджеры следует протестировать в первую очередь.
  • Электронные таблицы и таблицы решений (decision tables) для поддержания структуры основных сценариев.

Часть нашей внутренней таблицы решений для iOS Universal links в предыдущей версии GetSocial SDK

Ключевые аспекты, на которые стоит обратить внимание прежде, чем начнете разработку своего deep links решения:

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

Основные пункты статьи взяты с книги GetSocial build vs buy и личного опыта, который послужил основой презентации и выступления на конференции ITEM 2018 в Киеве.

Обсудить в форуме