Ссылки на контент позволяют направлять пользователей в приложение из браузеров, уведомлений, социальных сетей, объявлений и других источников. Ссылки на контент обеспечивают прямой переход из приложения в приложение или с сайта в приложение, что позволяет повысить вовлеченность за счет контекстного таргетированного контента.
В этом руководстве рассказывается, как работают ссылки на контент, а также как их создавать и тестировать.
Для ссылок на контент, которые ведут на ваш сайт или домены, рекомендуем использовать ссылки на приложения. Они обеспечивают удобство и безопасность для пользователей.
Как работают ссылки на контент
Ссылки на контент – это общая системная функция Android, которая поддерживается на всех версиях и устройствах. Она использует систему намерений Android, чтобы направлять ссылки на контент в нужные приложения. Приложения, которые должны обрабатывать определенный URI ссылки на контент, объявляют соответствующий фильтр интентов в своих файлах манифеста приложения.
Когда пользователь нажимает на ссылку, Android запускает интент и пытается направить его в приложение. Поскольку фильтры интентов, соответствующие определенному URI, могут быть объявлены в нескольких приложениях, Android выполняет следующие действия в указанном порядке:
- Открыть приложение по умолчанию, которое может обработать URI, если оно было назначено.
- Открывать единственное доступное приложение, которое может обработать URI.
- Позвольте пользователю выбрать приложение в диалоговом окне.
Это означает, что даже если ваши фильтры интентов соответствуют заданному URI, нет гарантии, что система направит интент ссылки на контент в ваше приложение. Пользователь играет ключевую роль в управлении тем, какое приложение обрабатывает интент, что дает ему контроль и предлагает выбор. Чтобы лучше контролировать ссылки на контент, ведущие на ваш сайт и домены, используйте ссылки на приложение.
В диалоговом окне Android пользователь видит все установленные приложения, которые зарегистрированы для обработки intent-фильтра ссылки на контент. Пользователь также может выбрать приложение по умолчанию для этого типа ссылок. После того как пользователь установит приложение по умолчанию, система больше не будет показывать диалоговое окно для этого намерения, а выбранное приложение будет открываться автоматически.
Поведение диалогового окна для устранения неоднозначности менялось в разных версиях Android. Например, в Android 12 и более поздних версиях веб-ссылки, которые не являются подтвержденными ссылками на приложение, по умолчанию открываются в браузере. В более ранних версиях ОС, если приложение могло обработать веб-ссылку, могло появляться диалоговое окно для выбора действия.
Типы ссылок на контент
В Android поддерживаются три типа ссылок на контент:
- Специальные ссылки на контент. Это ссылки на контент, в которых используется специальная схема URI (например,
example://products/123), чтобы направлять пользователя непосредственно к определенному контенту в приложении. Они эффективны для внутренней навигации или ссылок из источников, которые вы контролируете, но не являются стандартными веб-ссылками и могут вызывать диалоговое окно устранения неоднозначности, если другое приложение зарегистрирует ту же специальную схему. - Веб-ссылки. Это ссылки на контент, в которых используются стандартные схемы
httpиhttps. Они более универсальны, поскольку являются стандартными URL, но на устройствах с Android 12 и более поздними версиями почти всегда вызывают диалоговое окно устранения неоднозначности. Это означает, что они, скорее всего, будут по умолчанию обрабатываться веб-браузером пользователя, а не направляться в ваше приложение. - Ссылки на приложение. Доступны начиная с Android 6.0 (уровень API 23). Это подтвержденные веб-ссылки. С помощью процесса связывания сайтов вы можете доказать системе Android, что домен принадлежит вам. После проверки система автоматически направляет ссылки для этого домена непосредственно в ваше приложение, полностью пропуская диалоговое окно выбора. Это создает надежный и беспроблемный опыт для ваших пользователей.
Добавьте фильтры интентов для входящих ссылок
Чтобы создать ссылку на контент приложения, добавьте в манифест фильтр интентов, содержащий следующие элементы и значения атрибутов:
Укажите действие интента ACTION_VIEW, чтобы фильтр интентов был доступен из Google Поиска.
Добавьте один или несколько тегов <data>, каждый из которых представляет формат URI, указывающий на действие. Тег <data> должен содержать как минимум атрибут android:scheme.
Чтобы уточнить тип URI, который принимает действие, можно добавить дополнительные атрибуты. Например, у вас может быть несколько действий, которые принимают похожие URI, но различаются в зависимости от пути. В этом случае используйте атрибут android:path или его варианты pathPattern и pathPrefix, чтобы указать, какое действие должно выполняться для разных путей URI.
Добавьте категорию BROWSABLE. Это необходимо, чтобы фильтр намерений был доступен из веб-браузера. Без этого нажатие на ссылку в браузере не приведет к открытию вашего приложения.
Также укажите категорию DEFAULT. Это позволяет вашему приложению реагировать на неявные намерения. В противном случае действие можно будет запустить, только если в намерении указано название компонента приложения.
В следующем фрагменте XML показано, как указать фильтр интентов в манифесте для ссылок на контент. URI "example://gizmos" и "http://www.example.com/gizmos" разрешаются в это действие.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos" -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos" -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
Обратите внимание, что эти два фильтра интентов отличаются только элементом <data>. Хотя в один фильтр можно добавить несколько элементов <data>, для уникальных URL (например, для определенной комбинации scheme и host) важно создавать отдельные фильтры. Дело в том, что несколько элементов <data> в одном фильтре интентов объединяются, чтобы учесть все варианты их комбинированных атрибутов. Например:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
Может показаться, что поддерживаются только https://www.example.com и app://open.my.app. Однако на самом деле поддерживаются не только эти два, но и следующие:
app://www.example.com и https://open.my.app.
После того как вы добавите в манифест приложения фильтры intent с URI для контента, Android сможет направлять в ваше приложение любые объекты Intent с соответствующими URI во время выполнения.
Подробнее об определении фильтров интентов см. в разделе Разрешение другим приложениям запускать ваш объект Activity.
Чтение данных из входящих намерений
Когда система запустит ваше действие через фильтр интентов, вы сможете использовать данные, предоставленные Intent, чтобы определить, что нужно отрисовать. Вызовите методы getData() и getAction(), чтобы получить данные и действие, связанные с входящим объектом Intent. Эти методы можно вызывать в любой момент жизненного цикла действия, но обычно это делается во время ранних обратных вызовов, таких как onCreate() или onStart.
Ниже приведен фрагмент кода, который показывает, как получить данные из Intent:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
Чтобы сделать приложение удобнее для пользователей, следуйте этим рекомендациям:
- Ссылка на контент должна вести непосредственно в нужные разделы, а не на промежуточные страницы и окна, где запрашиваются данные, например имя пользователя и пароль. Необходимо, чтобы у пользователей был доступ к контенту по ссылке, даже если они впервые запускают приложение. Запросить нужную информацию можно потом, например когда пользователь будет взаимодействовать с другой функцией или сам откроет приложение из панели запуска.
- Реализуйте обратную навигацию так, чтобы она отвечала ожиданиям пользователей, когда они переходят в приложение по ссылке на контент. Подробнее о том, как реализовать навигацию с помощью кнопок "Назад" и "Вверх"…
Протестируйте ссылки на контент
Чтобы проверить, ведут ли URI фильтра интентов, указанные для ссылки на контент, к нужному действию в приложении, можно использовать Android Debug Bridge с инструментом Activity Manager (am). Команду adb можно выполнить на устройстве или в эмуляторе.
Общий синтаксис для тестирования URI фильтра интентов с помощью adb:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
Например, следующая команда пытается открыть действие целевого приложения, связанное с указанным URI.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
Начиная с Android 17 вы также можете использовать флаг --debug-link с am start, чтобы диагностировать, как система обрабатывает URL, и проверить соответствующие фильтры интентов или правила динамических ссылок на приложение. Подробнее о том, как диагностировать проблемы с разрешением ссылок с помощью флага debug-link…
Декларация манифеста и обработчик intent определяют связь между приложением и сайтом, а также то, что нужно делать с входящими ссылками. Однако, чтобы система рассматривала ваше приложение как обработчик по умолчанию для набора URI, вы также должны запросить, чтобы система проверила это подключение. Подробнее о том, как подтвердить ссылки на приложение…
Дополнительную информацию о намерениях и ссылках на приложения можно найти в следующих ресурсах:
- Интенты и фильтры интентов
- Как разрешить другим приложениям вызывать ваш объект activity
- Как добавить ссылки на приложение для Android с помощью Android Studio