Tuesday, November 10, 2015

Intentの歴史を変えるApp LinkingとGoogle Digital Asset Links

前回のブログで書いたように、CDD 6.0では5.1に比べて色々と変更や追加があります。

特に気になるのは 3.2.3.2 節の "Intent Resolution" です。この節のタイトルは、CDD 5.1までは"Intent Override"でした。
IntentはAndroidというOSを特徴づける重要な基本機能ですが、そのIntentの基本部分をこの節で規定しています。なのに、節の名前を変えてしまっているのです。このような変更は、5.1以前のCDDでは一度もありませんでした。

実は、CDD 6.0(というか、Android 6.0 Marshmallow)ではPackageManagerの挙動に変更が加えられています。
その変更とは、App Linksへの対応です。
App LinksのAPIについては、次のGoogleの公式サイトに書かれていますので、ここでは詳しく書きません。
http://developer.android.com/intl/ja/training/app-links/index.html

Marshmallow における App Links 対応で目を引くのは

  • 特定のURIに対するIntent-filterを持つアプリをインストールするときに、そのURIに対してユーザの指示なしで自動的にデフォルト起動を指定できる

という点です。そして、特定のURIに対してデフォルト起動を自動設定するアプリが正当なものであることをチェックするためのインターフェースが用意されました。
それが、Google Digital Asset Linksです。

https://developers.google.com/digital-asset-links/

この仕組みを使うことにより、PackageManagerがアプリをインストールするときに、「そのアプリをデフォルト起動に設定してよいかどうか」を検証できるようになりました。

Intentというのは先に書いたように、Androidの根幹をなすAPIです。
いかなるアプリでも任意のIntent-filterを記述することができます。
ユーザは(プレインストールアプリなどの一部の例外を除いて)、特定のURIに対してIntentを受信するアプリの中から、自分の好みのものを選んで起動することができます。
また、ユーザはいつでもデフォルト起動するアプリを設定したり、デフォルトを解除することができます。

これらの特徴は、Androidが自由であることを象徴していました。この自由なIntentの便利さを享受したことがない開発者は、まずいないと思います。

しかし、Marshmallowからは、自分が開発したアプリを特定のWebサイトからのリンクに対して自動的にデフォルト起動するように設定できることになったのです。

ユーザから見れば、いちいちアプリをインストールする度に、ブラウジングするとアプリ選択画面が出てきてうっとうしいのを回避できるようになります。
一方で、「敢えてインストール済みの専用アプリを使わずに、ブラウザや別のアプリで特定のURLにアクセスしたい」というようなことができなくなる可能性を示唆しています。

それがいい事か悪い事かを判断するのは難しいですが、いわば「Intentの歴史を変える」ような大きな変更であることは間違いありません。

そして、CDD 6.0では、 App Links とGoogle Digital Asset Linksを利用して Intent-filter に定義された URI が妥当かどうかをチェックするための規定が追加されました。

この規定の詳細は、コミックマーケットC89で頒布する Techbooster の新刊に書く予定です。
https://techbooster.github.io/c89/

DroidKaigi 2016 うらばなし

 2/18, 19の2日間で、DroidKaigi 2016の2日間が終わりました。  講演された皆様からも聴講された皆様からも大変にご好評だったようです。立ち上げから関わった者としては嬉しい限りです。  私はDroidKaigi 2016は準備を手伝っただけで、当日は参加...