Связывание приложений в Android

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

Общие сведения о связывании приложений

Мобильные приложения больше не живут в сило - во многих случаях они являются важными компонентами своего бизнеса, а также их веб-сайт. Предприятиям нужна возможно легко объединять решения для веб-репрезентации с мобильными приложениями, чтобы ссылки на веб-сайте могли запускать мобильные приложения и отображать в них соответствующее содержимое. Связывание приложений (также называется глубинное связывание) — это один из методов, позволяющих мобильному устройству реагировать на URI и запускать соответствующее мобильное приложение.

Android обрабатывает связывание приложений через систему намерений— когда пользователь щелкает ссылку в мобильном браузере, мобильный браузер отправляет намерение, которое Android будет делегировать зарегистрированным приложениям. Например, щелчок по ссылке на кулинарном веб-сайте открывает мобильное приложение, связанное с этим веб-сайтом, и отображает для пользователя конкретный рецепт. Если для работы с этим намерением зарегистрировано несколько приложений, Android отобразит так называемый диалог устранения неоднозначности, в котором пользователю предлагается выбрать приложение, которое будет обрабатывать это намерение, например так:

Example screenshot of a disambiguation dialog

Android 6.0 улучшает этот механизм, применяя автоматическую обработку ссылок. Для Android можно автоматически зарегистрировать приложение в качестве обработчика по умолчанию для универсального кода ресурса (URI) — приложение автоматически запустится и перейдет непосредственно к соответствующему действию. Android 6.0 принимает решения об обработке URI по следующим критериям:

  1. Существующее приложение уже связано с универсальным кодом ресурса (URI). Возможно, пользователь уже связыл существующее приложение с универсальным кодом ресурса (URI). В этом случае Android продолжит использовать это приложение.
  2. Существующее приложение не связано с универсальным кодом ресурса (URI), но в этом сценарии установлено вспомогательное приложение. В этом сценарии пользователь не указал существующее приложение, поэтому Android будет использовать установленное вспомогательное приложение для обработки запроса.
  3. Ни одно существующее приложение не связано с универсальным кодом ресурса (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 включает два основных этапа.

  1. Добавление одного или нескольких фильтров намерений для URI веб-сайта — фильтры намерений помогут Android в обработке URL-адреса в мобильном браузере.
  2. Публикация JSON-файла Ссылок цифровых активов на веб-сайте — это файл, который отправляется на веб-сайт и используется Android для проверки связи между мобильным приложением и доменом веб-сайта. Без этой проверки Android не будет устанавливать приложение как обработчик по умолчанию для URI, и пользователю придется выполнить это вручную.

Настройка фильтра намерений

Вам нужно настроить фильтр намерений, который сопоставляет URI (или даже набор из нескольких URI) некоторого веб-сайта с действием в приложении Android. В Xamarin.Android такое сопоставление устанавливается путем назначения действию атрибута IntentFilterAttribute. Фильтр намерений должен объявлять следующую информацию:

  • Intent.ActionView — это зарегистрирует фильтр намерений для реагирования на запросы на просмотр сведений
  • Categories— Фильтр намерений должен зарегистрировать как Intent.CategoryBrowsable, так и Intent.CategoryDefault, чтобы иметь возможность правильно обрабатывать веб-URI.
  • DataScheme — фильтр намерений должен объявлять http и/или https. Существует только две допустимые схемы.
  • DataHost — это домен, из которого будут исходить URI.
  • DataPathPrefix — это необязательный путь к ресурсам на веб-сайте.
  • AutoVerifyautoVerify— атрибут сообщает 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.

  1. Файл цифровых ресурсов правильно размещен, как описано выше. Первый тест отправляет намерение, которое система Android должна передать мобильному приложению. Приложение Android должно открыться и отобразить действие, зарегистрированное для этого URL-адреса. В командной строке введите следующее:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Отобразите существующие политики обработки ссылок для приложений, установленных на конкретном устройстве. Следующая команда выводит список политик для каждого пользователя на устройстве с указанной здесь информацией. В командной строке введите следующую команду:

    $ 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.