Начало работы
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Обзор
Протокол и API Digital Asset Links позволяют приложению или веб-сайту публиковать общедоступные, поддающиеся проверке заявления о других приложениях или веб-сайтах. Например, веб-сайт может заявить, что он связан с определенным приложением Android, или заявить, что он хочет поделиться учетными данными пользователя с другим веб-сайтом.
Вот некоторые возможные варианты использования ссылок на цифровые активы:
- Веб-сайт А заявляет, что ссылки на его сайт должны открываться в специальном приложении на мобильных устройствах, если приложение установлено.
- Веб-сайт А заявляет, что он может передавать свои учетные данные пользователя Chrome веб-сайту Б, чтобы пользователю не приходилось входить на веб-сайт Б, если он вошел на веб-сайт А.
- Приложение А заявляет, что оно может делиться настройками устройства, например местоположением, с веб-сайтом Б.
Ключевые термины
- Принципал: Принципал – это приложение или веб-сайт, делающий заявление. В 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, и принять решение реализовать его.
Следующие шаги
- Посмотрите, есть ли явная документация для вашего варианта использования.
- Узнайте, как составить заявление.
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2024-06-26 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2024-06-26 UTC."],[[["\u003cp\u003eDigital Asset Links enable apps and websites to make verifiable statements about their relationships with other apps and websites, such as link handling or credential sharing.\u003c/p\u003e\n"],["\u003cp\u003eThese statements are stored in a publicly accessible statement list, typically an "assetlinks.json" file hosted by the app or website making the statement.\u003c/p\u003e\n"],["\u003cp\u003eAndroid M and above automatically uses Digital Asset Links to verify website-to-app associations and direct links to the appropriate app if installed.\u003c/p\u003e\n"],["\u003cp\u003eThe protocol provides a foundation for trust and delegation between digital entities but relies on consumers to validate and act upon the statements.\u003c/p\u003e\n"]]],[],null,["# Getting Started\n\nOverview\n--------\n\nThe Digital Asset Links protocol and API enable an app or website to make public,\nverifiable *statements* about other apps or websites. For example, a website\ncan declare that it is associated with a specific Android app, or it can declare that\nit wants to share user credentials with another website.\n\nHere are some possible uses for Digital Asset Links:\n\n- Website A declares that links to its site should open in a designated app on mobile devices, if the app is installed.\n- Website A declares that it can share its Chrome user credentials with website B so that the user won't have to log in to website B if it is logged into website A.\n- App A declares that it can share device settings, such as location, with website B.\n\n### Key terms\n\n- **Principal:** The principal is the app or website making the statement. In Digital Asset Links, the principal is always the app or website that hosts the statement list.\n- **Statement list** : Statements are contained in a *statement list* that contains one or more statements. A statement list is cleartext and publicly accessible, in a location that is controlled by the principal and difficult to spoof or tamper with. It can be a free-standing file, or a section of another, larger item. For example, on a website, it is an entire file; in an Android app, it is a section in the app manifest. Statements can be viewed and verified by anyone, using non-proprietary methods. [See the statement list documentation for more information](/digital-asset-links/v1/create-statement).\n- **Statement:** A statement is a tightly structured JSON construct that consists of a *relation* (what the statement says to do, for example: Enable sharing credentials) and a *target* (the website or app that the relation applies to). Therefore, each statement is like a sentence, where *principal* says *relation* about *target* . \n- **Statement consumer:** A statement consumer requests a statement list from a principal, checks for the presence of a statement against a given principal, and if it exists, can perform the action specified. [See the statement comsuming documentation for more information](/digital-asset-links/v1/consuming)*.*\n\nQuick usage example\n-------------------\n\nHere's a very simplified example of how the website www.example.com could\nuse Digital Asset Links to specify that any links to URLs in that site should\nopen in a designated app rather than the browser:\n\n1. The website www.example.com publishes a statement list at https://www.example.com/.well-known/assetlinks.json. This is the official name and location for a statement list on a site; statement lists in any other location, or with any other name, are not valid for this site. In our example, the statement list consists of one statement, granting its Android app the permission to open links on its site: \n\n ```\n [{\n \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n \"target\" : { \"namespace\": \"android_app\", \"package_name\": \"com.example.app\",\n \"sha256_cert_fingerprints\": [\"hash_of_app_certificate\"] }\n }]\n ```\n A statement list supports an array of statements within the \\[ \\] marks, but our example file contains only one statement. `sha256_cert_fingerprints` is the SHA256 fingerprints of your app's signing certificate. Find more details in the [Android App Links documentation](https://developer.android.com/training/app-links/verify-android-applinks#web-assoc).\n2. The Android app listed in the statement above has an intent filter that specifies the scheme, host, and path pattern of URLs that it wants to handle: in this case, https://www.example.com. The intent filter includes a special attribute `android:autoVerify`, new to Android M, which indicates that Android should verify the statement on the website described in the intent filter when the app is installed.\n3. A user installs the app. Android sees the intent filter with the `autoVerify` attribute and checks for the presence of the statement list at the specified site; if present, Android checks whether that file includes a statement granting link handling to the app, and verifies the app against the statement by certificate hash. If everything checks out, Android will then forward any https://www.example.com intents to the example.com app.\n4. The user clicks a link to https://www.example.com/puppies on their device. This link could be anywhere: in a browser, in a Google Search Appliance suggestion, or anywhere else. Android forwards the intent to the example.com app.\n5. The example.com app receives the intent and chooses to handle it, opening the puppies page in the app. If for some reason the app had declined to handle the link, or if the app were not on the device, then the link would have been sent to the next default intent handler matching that intent pattern (often the browser).\n\nImportant considerations and limitations:\n-----------------------------------------\n\n- The protocol does not authenticate the principal making the statement, but the statement is located in a specific location strongly associated with the principal, and under control of the principal.\n- The protocol does not authenticate the statement target, but it provides a means for the caller to authenticate the target (for example, a statement identifies mobile app targets by certificate hash and package name).\n- The protocol does not natively perform any statement actions; rather, it enables the ability to expose statements, which a consuming application must validate and then decide whether and how to act upon. Android M natively performs these steps for you; for example, if a website delegates link handling to a specific app, Android checks and verifies the statement, verifies the target app, and then offers the app the option to handle the given link.\n- The protocol does not enable making statements about two third parties: that is, website A can make a statement about website B, but website A cannot make a statement about website B's relationship to website C. However, if website B trusts website A, it can check website A for a statement granting permission to website C, and decide to implement that.\n\nNext steps\n----------\n\n1. [See if there is explicit documentation for your use case.](/digital-asset-links/v1/using)\n2. [Learn about creating a statement.](/digital-asset-links/v1/create-statement)"]]