AndroidのCustom TabsでChromeを優先的に開く
Custom Tabs、便利ですよね。
アプリ内でWebページを開く際、Chromeなどのブラウザを自分のアプリ内で開くことができますし、表示も早いのでとても便利です。
これが出てきた当初はChrome Custom Tabsという名前で呼ばれていたはずなのですが、いつしかこれはChromeだけのものではなくChrome以外のブラウザでもCustom TabsのServiceを利用できるようになっていたようです。
Custom Tabsの問題点
CustomTabsIntentでCustom Tabsを開くとき、ChromeがあればChrome Custom Tabsを開いてほしいところです。しかし、Custom Tabsの対応ブラウザがあるのにも関わらず、複数のブラウザがインストールされている場合はブラウザ選択が表示されてしまいます。
表示されるブラウザ選択のボトムシートには、Custom Tabs未対応ブラウザも含まれてしまっています。
最近のAndroid端末には大抵Chromeが入っているので、ChromeがあるのであればChrome Custom Tabsを優先的に開いて高速にWebページを表示できるようにしてあげたいですよね。
また、仮にChromeが入っていなくてもCustom Tabs対応ブラウザがある場合はそのCustom Tabsを優先的に開いてあげて、ユーザーがブラウザを選択するという一手間を無くしてあげたいところです。
そこで、Custom Tabs対応ブラウザがある場合はそのブラウザを優先的に開く方法を紹介します。
ブラウザが複数あってもCustom Tabsを優先的に開く
はじめに、Custom Tabsをサポートするブラウザがあるかどうかを探します。
ブラウザアプリを探して、その中からCustom TabsのServiceが解決できるのが、Custom Tabs対応ブラウザです。ここでは、見つかったCustom Tabs対応ブラウザのResolveInfoのリストを返却しています。
次に、ChromeがあればChrome Custom Tabsを優先的に開いてあげられるように、Custom Tabs対応ブラウザの中からChromeのパッケージを探します。
Chromeのパッケージは安定版以外にもいくつかあるので、すべて探して最初に見つかったものを返します。
最後に、CustomTabsIntentを使ってCustom Tabsを開きます。
Chromeのパッケージがある場合はCustomTabsIntentから取得したIntentに対してChromeのパッケージをセットします。
Chromeは無いけれどもCustom Tabs対応ブラウザがある場合は、最初の1件を自動で選択して、そのパッケージをセットします。
最後に、CustomTabsIntentのlaunchUrlを使って閲覧したいURLを渡してブラウザを開きます。
これを実際に実行してみると、ブラウザが複数入っていても次のようにChrome Custom Tabsが優先的に開かれるようになります。
Chromeが無く、Chrome以外のCustom Tabsが入っている状態であれば、最初に見つかったCustom Tabsが開きます。
これで、ChromeがあればChrome Custom Tabsを優先的に開き、Chromeが無い場合はCustom Tabs対応ブラウザが自動で選択されて開かれるようになりました。ユーザーは開くブラウザを意識することなく素早くWebページにアクセスできるようになります。
今回の実装では、Custom Tabs対応ブラウザが無くCustom Tabs未対応ブラウザが1件のみの場合はそれが自動で開かれます。ブラウザ選択が出るケースはCustom Tabs対応ブラウザが無く、Custom Tabs未対応ブラウザが複数あるケースのみということになります。そのようなケースはほとんど無いとは思いますが、もしそれでもブラウザ選択を出したくない場合はブラウザアプリの中から最初に見つかったブラウザを自動的に開いてあげれば実現できるでしょう。
おわりに
最近のAndroid端末では、ほとんどの場合Chromeがデフォルトでインストールされています。Chromeで動くことが保証できていれば、仮に他のブラウザでなにか問題が起きたとしても、一旦Chromeをインストールしてもらうことで解決できる可能性が高まるので、サポートコストを減らすことも期待できるでしょう。ぜひ参考にしてみてください。