Связывание приложений в Android
В этом руководство показано, как в Android 6.0 используется методика связывания приложений, что позволяет мобильным приложениям реагировать на URL-адреса веб-сайтов. Вы узнаете, что такое связывание приложений, как реализовать связывание приложений в приложении Android 6.0 и как настроить на веб-сайте доступ к домену для мобильного приложения.
Общие сведения о связывании приложений
Мобильные приложения больше не живут в сило - во многих случаях они являются важными компонентами своего бизнеса, а также их веб-сайт. Предприятиям нужна возможно легко объединять решения для веб-репрезентации с мобильными приложениями, чтобы ссылки на веб-сайте могли запускать мобильные приложения и отображать в них соответствующее содержимое. Связывание приложений (также называется глубинное связывание) — это один из методов, позволяющих мобильному устройству реагировать на URI и запускать соответствующее мобильное приложение.
Android обрабатывает связывание приложений через систему намерений— когда пользователь щелкает ссылку в мобильном браузере, мобильный браузер отправляет намерение, которое Android будет делегировать зарегистрированным приложениям. Например, щелчок по ссылке на кулинарном веб-сайте открывает мобильное приложение, связанное с этим веб-сайтом, и отображает для пользователя конкретный рецепт. Если для работы с этим намерением зарегистрировано несколько приложений, Android отобразит так называемый диалог устранения неоднозначности, в котором пользователю предлагается выбрать приложение, которое будет обрабатывать это намерение, например так:
Android 6.0 улучшает этот механизм, применяя автоматическую обработку ссылок. Для Android можно автоматически зарегистрировать приложение в качестве обработчика по умолчанию для универсального кода ресурса (URI) — приложение автоматически запустится и перейдет непосредственно к соответствующему действию. Android 6.0 принимает решения об обработке URI по следующим критериям:
- Существующее приложение уже связано с универсальным кодом ресурса (URI). Возможно, пользователь уже связыл существующее приложение с универсальным кодом ресурса (URI). В этом случае Android продолжит использовать это приложение.
- Существующее приложение не связано с универсальным кодом ресурса (URI), но в этом сценарии установлено вспомогательное приложение. В этом сценарии пользователь не указал существующее приложение, поэтому Android будет использовать установленное вспомогательное приложение для обработки запроса.
- Ни одно существующее приложение не связано с универсальным кодом ресурса (URI), но многие вспомогательные приложения установлены . Так как существует несколько приложений, поддерживающих URI, откроется диалоговое окно диамбигуации, и пользователь должен выбрать, какое приложение будет обрабатывать URI.
Если у пользователя нет ни одного приложения, совместимого с этим URI, но оно будет установлено позже, система Android автоматически назначит это приложение как обработчик по умолчанию для этого URI, предварительно проверив его связь с веб-сайтом, которому принадлежит URI.
В этом руководстве показано, как настроить приложение Android 6.0, а также создать и опубликовать файл ссылок на цифровые ресурсы для поддержки связывания приложений в Android 6.0.
Требования
Для работы с этим руководством требуется Xamarin.Android 6.1 и приложение, предназначенное для использования Android 6.0 (API уровня 23) или выше.
Связывание приложений в более ранних версиях Android реализуется через пакет NuGet Rivets из магазина компонентов для Xamarin. Пакет Rivets не совместим с механизмом связывания приложений в Android 6.0 и не поддерживает этот механизм.
Настройка связывания приложений в Android 6.0
Настройка связывания приложений в Android 6.0 включает два основных этапа.
- Добавление одного или нескольких фильтров намерений для URI веб-сайта — фильтры намерений помогут Android в обработке URL-адреса в мобильном браузере.
- Публикация JSON-файла Ссылок цифровых активов на веб-сайте — это файл, который отправляется на веб-сайт и используется Android для проверки связи между мобильным приложением и доменом веб-сайта. Без этой проверки Android не будет устанавливать приложение как обработчик по умолчанию для URI, и пользователю придется выполнить это вручную.
Настройка фильтра намерений
Вам нужно настроить фильтр намерений, который сопоставляет URI (или даже набор из нескольких URI) некоторого веб-сайта с действием в приложении Android. В Xamarin.Android такое сопоставление устанавливается путем назначения действию атрибута IntentFilterAttribute. Фильтр намерений должен объявлять следующую информацию:
Intent.ActionView
— это зарегистрирует фильтр намерений для реагирования на запросы на просмотр сведенийCategories
— Фильтр намерений должен зарегистрировать как Intent.CategoryBrowsable, так и Intent.CategoryDefault, чтобы иметь возможность правильно обрабатывать веб-URI.DataScheme
— фильтр намерений должен объявлятьhttp
и/илиhttps
. Существует только две допустимые схемы.DataHost
— это домен, из которого будут исходить URI.DataPathPrefix
— это необязательный путь к ресурсам на веб-сайте.AutoVerify
autoVerify
— атрибут сообщает Android проверить связь между приложением и веб-сайтом. Этот механизм мы подробнее обсудим позже.
В следующем примере показано, как применить IntentFilterAttribute для обработки ссылок от https://www.recipe-app.com/recipes
и http://www.recipe-app.com/recipes
.
[IntentFilter(new [] { Intent.ActionView },
Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
DataScheme = "http",
DataHost = "recipe-app.com",
DataPathPrefix = "/recipe",
AutoVerify=true)]
public class RecipeActivity : Activity
{
// Code for the activity omitted
}
Android сверит все узлы, которые указаны в фильтрах намерений, с файлом цифровых ресурсов на веб-сайте, прежде чем зарегистрировать приложение в качестве обработчика по умолчанию для этого URI. Все фильтры намерений должны пройти проверку, прежде чем Android применит приложение как обработчик по умолчанию.
Создание файла ссылок на цифровые ресурсы
Для связывания приложений в Android 6.0 требуется, чтобы Android проверял все связи между приложением и веб-сайтом, прежде чем устанавливать приложение в качестве обработчика по умолчанию для URI. Такая проверка выполняется при первой установке приложения. Файл ссылок на цифровые ресурсы имеет формат JSON и размещается на всех соответствующих поддоменах.
Примечание.
Атрибут должен быть задан фильтром намерений. В android:autoVerify
противном случае Android не выполнит проверку.
Этот файл размещается веб-мастером домена по адресу https://domain/.well-known/assetlinks.json.
Файл цифровых ресурсов содержит метаданные, необходимые для проверки связи платформой Android. Файл assetlinks.json содержит следующие пары "ключ — значение":
namespace
— пространство имен приложения Android.package_name
— имя пакета приложения Android (объявленное в манифесте приложения).sha256_cert_fingerprints
— отпечатки пальцев SHA256 подписанного приложения. Дополнительные сведения о получении отпечатка SHA256 приложения см. в руководстве по поиску подписи хранилища ключей.
Ниже приведен пример файла assetlinks.json, где указано одно приложение:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
]
}
}
]
Вы можете зарегистрировать боле одного отпечатка SHA256, чтобы поддерживать несколько версий или сборок приложения. В следующем файле assetlinks.json представлен пример регистрации нескольких приложений:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "example.com.puppies.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
]
}
},
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "example.com.monkeys.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
]
}
}
]
Веб-сайт Google по ссылкам на цифровые ресурсы предоставляет онлайн-средство для создания и тестирования файла цифровых ресурсов.
Тестирование связывания приложений
Реализовав связывание приложения, следует проверить разные элементы этого механизма и убедиться, что они работают должным образом.
Вы можете убедиться, что файл цифровых ресурсов имеет правильный формат и правильно размещен, используя API Google для ссылок на цифровые ресурсы, как показано в этом примере:
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls
Существует два теста, которые можно выполнить для проверки правильности фильтров намерений и настройки приложения в качестве обработчика по умолчанию для URI.
Файл цифровых ресурсов правильно размещен, как описано выше. Первый тест отправляет намерение, которое система Android должна передать мобильному приложению. Приложение Android должно открыться и отобразить действие, зарегистрированное для этого URL-адреса. В командной строке введите следующее:
$ adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://<domain1>/recipe/scalloped-potato"
Отобразите существующие политики обработки ссылок для приложений, установленных на конкретном устройстве. Следующая команда выводит список политик для каждого пользователя на устройстве с указанной здесь информацией. В командной строке введите следующую команду:
$ adb shell dumpsys package domain-preferred-apps
Package
— имя пакета приложения.Domain
— домены (разделенные пробелами), веб-ссылки которых будут обрабатываться приложением.Status
— это текущее состояние обработки ссылок для приложения. Значение always означает, что приложение объявилоandroid:autoVerify=true
и прошло проверку в системе. После него указывается шестнадцатеричное число, обозначающее запись приоритета в системе Android.
Например:
$ adb shell dumpsys package domain-preferred-apps App linkages for user 0: Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
Итоги
В этом руководстве описана методика связывания приложений в Android 6.0. Затем мы описали, как правильно настроить приложение Android 6.0 для включения поддержки ссылок и реагирования на них. Мы также обсудили, как протестировать связывание приложений для приложения Android.