概要
Digital Asset Links プロトコルと API を使用すると、アプリやウェブサイトは、他のアプリやウェブサイトに関する検証可能なステートメントを公開できます。たとえば、あるウェブサイトで特定の Android アプリに関連付けられていることを宣言したり、ユーザーの認証情報を別のウェブサイトと共有することを宣言したりできます。
デジタル アセット リンクの用途としては、次のようなものが考えられます。
- ウェブサイト A では、モバイル デバイスの指定アプリがインストールされている場合、そのサイトへのリンクをそのアプリで開くよう宣言しています。
- ウェブサイト A は、Chrome ユーザーの認証情報をウェブサイト B と共有できることを宣言しています。これにより、ユーザーはウェブサイト A にログインしている場合にウェブサイト B にログインする必要がなくなります。
- アプリ A は、位置情報などのデバイスの設定をウェブサイト B と共有できることを宣言します。
主な用語
- プリンシパル: プリンシパルとは、主張を行っているアプリまたはウェブサイトです。デジタル アセット リンクのプリンシパルは常に、ステートメント リストをホストするアプリまたはウェブサイトです。
- ステートメント リスト: ステートメントは、1 つ以上のステートメントを含むステートメント リストに含まれています。ステートメント リストは平文で、誰でもアクセス可能で、プリンシパルによって管理され、スプーフィングや改ざんが困難な場所にあります。独立したファイルでも、別の大きなアイテムの一部でもかまいません。たとえば、ウェブサイトではファイル全体、Android アプリではアプリ マニフェスト内のセクションです。明細書は、独自の方法で誰でも閲覧、検証できます。詳細については、ステートメント リストのドキュメントをご覧ください。
- ステートメント: ステートメントは、relation(ステートメントで指示される内容、たとえば、認証情報の共有を有効にする)とrelation(リレーションが適用されるウェブサイトまたはアプリ)で構成される、厳密に構造化された JSON コンストラクトです。したがって、各ステートメントは、プリンシパルがターゲットに関する関係を言います。
- ステートメント コンシューマ: ステートメント コンシューマは、プリンシパルにステートメント リストをリクエストし、指定されたプリンシパルに対するステートメントの存在を確認します。存在する場合は、指定されたアクションを実行できます。詳細については、ドキュメントに含まれるステートメントをご覧ください.
簡単な使用例
以下は、ウェブサイト www.example.com でデジタル アセット リンクを使用して、そのサイトの URL へのリンクをブラウザではなく特定のアプリで開くように指定する非常に簡単な例です。
- ウェブサイト www.example.com は、https://www.example.com/.well-known/assetlinks.json でステートメントのリストを公開しています。サイト上でのステートメント リストの正式名称と場所です。他の場所にあるステートメント リストは、このサイトでは有効ではありません。この例では、ステートメント リストは 1 つのステートメントで構成され、サイトのリンクを開く権限を Android アプリに付与します。
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target" : { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["hash_of_app_certificate"] } }]
ステートメント リストは [ ] マーク内のステートメントの配列をサポートしますが、サンプル ファイルにはステートメントが 1 つしか含まれません。sha256_cert_fingerprints
は、アプリの署名証明書の SHA256 フィンガープリントです。詳しくは、Android アプリリンクのドキュメントをご覧ください。 - 上記の文の Android アプリには、処理する URL のスキーム、ホスト、パスパターンを指定するインテント フィルタがあります。この例では、https://www.example.com です。このインテント フィルタには、Android M で新たに導入された特別な属性
android:autoVerify
が含まれています。この属性は、アプリのインストール時に、インテント フィルタに記述されたウェブサイトのステートメントを Android が検証する必要があることを示します。 - ユーザーがアプリをインストールします。Android は
autoVerify
属性を持つインテント フィルタを検出し、指定されたサイトにステートメント リストが存在するかどうかを確認します。存在する場合、Android はアプリへのリンク処理を付与するステートメントがそのファイルに含まれているかどうかをチェックし、証明書ハッシュによるステートメントとアプリを照合します。すべて確認できたら、Android はすべての https://www.example.com インテントを example.com アプリに転送します。 - ユーザーがデバイスで https://www.example.com/puppies へのリンクをクリックします。このリンクは、ブラウザや Google アプライアンスの提案内など、どこにでも構いません。Android はインテントを example.com アプリに転送します。
- example.com アプリはインテントを受信して処理を選択し、アプリで子犬のページを開きます。なんらかの理由でアプリがリンクの処理を拒否した場合、またはアプリがデバイスにない場合は、そのインテント パターンに一致する次のデフォルト インテント ハンドラ(多くの場合はブラウザ)にリンクが送信されます。
重要な考慮事項と制限事項:
- プロトコルはステートメントを作成するプリンシパルを認証しませんが、ステートメントはプリンシパルと強く関連のある特定のロケーションにあり、プリンシパルの制御下にあります。
- プロトコルはステートメントのターゲットを認証しませんが、呼び出し元がターゲットを認証する手段を提供します(たとえば、ステートメントは証明書ハッシュとパッケージ名によってモバイルアプリのターゲットを識別します)。
- このプロトコルは、ステートメント アクションをネイティブに実行しません。ステートメントを公開する機能を有効にします。ステートメントは、使用側のアプリケーションが検証してから、どのように処理すべきかを決定する必要があります。これらの手順は、Android M がネイティブに実行します。たとえば、ウェブサイトがリンク処理を特定のアプリに委任した場合、Android はステートメントを確認して検証し、ターゲット アプリを検証して、指定されたリンクを処理するオプションをアプリに提供します。
- このプロトコルでは、2 社の第三者に関する記述を行うことはできません。つまり、ウェブサイト A はウェブサイト B について記述できますが、ウェブサイト A はウェブサイト B とウェブサイト C の関係について記述することはできません。ただし、ウェブサイト B がウェブサイト A を信頼している場合、ウェブサイト A にウェブサイト C に権限を付与するステートメントがあるかどうかを確認し、それを実装することができます。
次のステップ
- ユースケースに関する明示的なドキュメントがあるかどうかを確認します。
- 詳しくは、明細書の作成についての記事をご覧ください。