月別アーカイブ: 2017年3月

リフレクションでChrome Custom Tabsを起動する

Pocket

AdStir開発チームの吉田と申します。 SDK・JS開発をメインに担当しています。 本日はJavaのリフレクションで、AndroidのChrome Custom Tabsを呼び出してみたいと思います。

リフレクションとは

リフレクションは動的に、クラスやメソッド、フィールドにアクセスできる機能です。

  • ライブラリが同梱されている場合のみ実行する
  • プライベートなメソッドやフィールドにもアクセスできる

など柔軟な実装ができるようになります。

Chrome Custom Tabs

これまで、アプリからWebページを開く際には、暗黙的Intentを送信してChromeなどのブラウザを起動する方法が一般的でした。 Chrome Custom Tabsを使えば

  • ページ表示が高速化される
  • ブラウザの見た目をカスタムでき、自分のアプリの一部のような表現ができる

といったメリットを享受することができます。

AdStirでは、Chrome Custom Tabsを導入するかしないかを、パブリッシャー様に選択いただけるようにするため、この機能を使用しています。 Chrome Custom Tabsが導入されていれば使用する、されていなければ通常のブラウザを起動する。と言った具合です。

Chrome Custom Tabsの通常の使い方は以下となります。

とても簡単ですが、customtabsが入っていないとビルドすら通りません。 そこで、このコードをリフレクションを使って書き直してみます。

以上となります。 本当は例外処理や、CustomTabsIntentクラスが存在するかのチェックなども必要になりますが、概ねこのようにすることで、リフレクションでChrome Custom Tabsを起動することができます。

リフレクションには

  • メソッドの呼び出しが遅い
  • カプセル化を壊す
  • コードが冗長になる

などのデメリットも存在しますが、AdStirでは「モジュールが入っているときだけ利用できる」というリフレクションのメリットに注目し、今回のCustom Tabsや、メディエーション機能などを実現しています。

本日はこれまで。 どうもありがとうございました。