Обзор
Протокол и API Digital Asset Links позволяют приложению или веб-сайту делать публичные, проверяемые заявления о других приложениях или веб-сайтах. Например, веб-сайт может заявить о своей связи с определенным приложением Android или о намерении поделиться учётными данными пользователя с другим веб-сайтом.
Вот некоторые возможные варианты использования ссылок на цифровые активы:
- Веб-сайт А заявляет, что ссылки на его сайт должны открываться в указанном приложении на мобильных устройствах, если такое приложение установлено.
- Веб-сайт A заявляет, что он может поделиться своими учетными данными пользователя Chrome с веб-сайтом B, чтобы пользователю не пришлось входить на веб-сайт B, если он вошел на веб-сайт A.
- Приложение A заявляет, что может передавать настройки устройства, такие как местоположение, веб-сайту B.
Ключевые термины
- Принципал: принципал — это приложение или веб-сайт, создающий заявление. В Digital Asset Links принципалом всегда является приложение или веб-сайт, на котором размещен список заявлений.
- Список операторов : операторы содержатся в списке операторов , который содержит один или несколько операторов. Список операторов хранится в открытом виде и находится в общедоступном месте, контролируемом принципалом, что затрудняет его подделку или изменение. Он может представлять собой отдельный файл или раздел другого, более крупного объекта. Например, на веб-сайте это целый файл; в приложении Android это раздел в манифесте приложения. Операторы могут просматривать и проверяться любым пользователем, используя непатентованные методы. Подробнее см. в документации по списку операторов .
- Выражение: Выражение — это строго структурированная конструкция JSON, состоящая из отношения (чего именно требует выражение, например: разрешить общий доступ к учётным данным) и цели (веб-сайта или приложения, к которому применяется это отношение). Таким образом, каждое выражение подобно предложению, в котором принципал говорит отношение о цели .
- Потребитель операторов: Потребитель операторов запрашивает список операторов у принципала, проверяет наличие оператора для заданного принципала и, если он существует, может выполнить указанное действие. Подробнее см. в документации по потребителю операторов .
Быстрый пример использования
Вот очень упрощенный пример того, как веб-сайт www.example.com может использовать ссылки на цифровые активы, чтобы указать, что любые ссылки на URL-адреса на этом сайте должны открываться в назначенном приложении, а не в браузере:
- Сайт www.example.com публикует список утверждений по адресу https://www.example.com/.well-known/assetlinks.json. Это официальное название и местоположение списка утверждений на сайте; списки утверждений в любом другом месте или с любым другим названием недействительны для этого сайта. В нашем примере список утверждений состоит из одного утверждения, предоставляющего Android-приложению разрешение открывать ссылки на сайте:
Список операторов поддерживает массив операторов в скобках [ ], но в нашем примере файла содержится только один оператор.[{ "relation": ["delegate_permission/common.handle_all_urls"], "target" : { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["hash_of_app_certificate"] } }]
sha256_cert_fingerprints
— это отпечатки SHA256 сертификата подписи вашего приложения. Подробнее см. в документации по ссылкам приложений Android . - Приложение Android, указанное в приведенном выше утверждении, имеет фильтр намерений, который определяет схему, хост и шаблон пути URL-адресов, которые оно хочет обрабатывать: в данном случае https://www.example.com. Фильтр намерений включает специальный атрибут
android:autoVerify
, впервые появившийся в Android M, который указывает, что Android должен проверить утверждение на веб-сайте, описанном в фильтре намерений, при установке приложения. - Пользователь устанавливает приложение. Android видит фильтр намерений с атрибутом
autoVerify
и проверяет наличие списка утверждений на указанном сайте. Если он присутствует, Android проверяет, содержит ли этот файл утверждение, разрешающее обработку ссылок приложению, и проверяет приложение на соответствие утверждению по хешу сертификата. Если всё проверено, Android перенаправляет все намерения https://www.example.com приложению example.com. - Пользователь нажимает на ссылку https://www.example.com/puppies на своём устройстве. Эта ссылка может находиться где угодно: в браузере, в подсказке Google Search Appliance или где-либо ещё. Android передаёт намерение приложению example.com.
- Приложение example.com получает намерение и решает его обработать, открывая страницу с щенками. Если бы по какой-либо причине приложение отказалось обработать ссылку или если бы приложение не было установлено на устройстве, ссылка была бы отправлена следующему обработчику намерений по умолчанию, соответствующему этому шаблону намерения (обычно браузеру).
Важные соображения и ограничения:
- Протокол не удостоверяет подлинность принципала, сделавшего заявление, но заявление находится в определенном месте, тесно связанном с принципалом и находящемся под контролем принципала.
- Протокол не аутентифицирует целевой объект оператора, но предоставляет вызывающему объекту возможность аутентифицировать целевой объект (например, оператор идентифицирует целевые объекты мобильного приложения по хешу сертификата и имени пакета).
- Протокол изначально не выполняет никаких действий с утверждениями; вместо этого он позволяет предоставлять утверждения, которые приложение-пользователь должно проверить, а затем решить, стоит ли действовать в соответствии с ними и как. Android M изначально выполняет эти действия за вас; например, если веб-сайт делегирует обработку ссылок определённому приложению, Android проверяет и подтверждает утверждение, проверяет целевое приложение, а затем предлагает приложению возможность обработать данную ссылку.
- Протокол не позволяет делать заявления о двух третьих сторонах: то есть веб-сайт A может сделать заявление о веб-сайте B, но веб-сайт A не может сделать заявление о связи веб-сайта B с веб-сайтом C. Однако, если веб-сайт B доверяет веб-сайту A, он может проверить веб-сайт A на предмет заявления, предоставляющего разрешение веб-сайту C, и решить реализовать его.