AndroidでWebページをTWA対応してGoogle Playで配信する

まえがき

去年あたりにTWA(Trusted Web Activity)がでてWebページをGoogle Playで配信できるようになりました。

TWAは、Androidアプリ内で Chromeブラウザの機能を借りることができ、全画面で表示できます。URLバーなどのブラウザのUIは表示されません。

しかし、実際にやってみるとAndroidX対応してなかったり、んーっといったところが多かったのですが最近しれっとAndroidXにも対応していました。

いままでは

implementation 'com.github.GoogleChrome.custom-tabs-client:customtabs:3a71a75c9f'

だったのが、しれっとリポジトリが変わり。

implementation 'com.google.androidbrowserhelper:androidbrowserhelper:1.1.0'

さらにしれっと、紹介記事が更新されています。スプラッシュなどにも対応しています。

ということでやってみた。

触ってみたい人は、Developers.IO CAFEにきて、Androidアプリ版でモバイルオーダーやウォークスルー(AmazonGo的なやつ)を試しにみてくださいね。

Developers.IO CAFE(デベロッパーズ・アイオー・カフェ) - Google Play のアプリ

TWA概要

これをなぞっていけばOKなので、あえてここでは解説しないです。しかし、ここで何をやっているのか掴みにくいので、なぜWEBページにTWA用の設定が必要が解説します。

Webページ、たとえば、弊社ブログ https://dev.classmethod.jp/ をTWAとしてGoogle Playで配信しようと思った場合考えます。URLは至るところにシェアされていて知ることができるし、だれでもアクセスできるし、リンクも貼れますね。つまりWEBページだけあればよい条件となると、偽アプリを作りたい放題になってしまいますね。(URLがわかれば、Google Playで配信できる)

公式サイトであること示すにはどうしたらよいでしょう?

Webもアプリも所有者であることを示す必要がある。具体的にはWEBページには、特定パスにアプリの証明書情報を配置します。アプリにはWEBのアクセス先を設定する。

アプリとサイトが同じデベロッパーのものであること、すなわち「信頼できる」ことを検証しなければなりません。アプリと TWA で開いたサイトが同じデベロッパーのものであることを検証するために、TWAは Digital Asset Links を使って所有権を確認します。

Google Developers Japan: Trusted Web Activity のご紹介より

TWAActivity(Chrome)がその情報が一致しているか判定し、OKだったらフルスクリーンで表示できます。

失敗例:他人のサイトと解釈され、ヘッダーにURLが表示される

成功例:自分のサイトであるため、ヘッダーなしのフルスクリーン

サンプル

WEBのミニマムソースとしてこれだけです。

https://twasample.firebaseapp.com/

<!DOCTYPE html>
<html>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Hello World</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
Hello World
</body>
</html>

Google Digital Asset Linksでつくったassetlinks.jsonを .well-known/ に配置するだけです。

Android側のサンプルです。参考ページほぼそのままです。

FAQ

Q.PWA(Progressive Web Apps)じゃないとだめ?

A.No 関係ありません。PWAである必要がありません。 .well-known/assetlinks.json を配置するのがWEB側の最小対応です。

Q.PWAとの違いは? A.Google Playで配信できるのと、ネイティブコードもかけるぐらいですね。WEBが更新されたらもちろんTWA側も更新されます。

Q.またログインとかし直しなんでしょ。 A.全部Chormeと共有しています。Chromeでログイン済みならログイン済みです。

Q.スプラッシュ表示できる? A.できます

Q.全部TWAじゃないとだめ? A.NO 所詮Activityなので、URLスキームなどで別Activityを呼ぶようにすれば一部だけネイティブ可能。または継承すればカスタマイズも可能。

Q.Pushは受け取れないっしょ? A.WebPushが受け取れる。つまりWebのソースのままでOK。Androidアプリの特別対応なし。

Q.URLにアクセスがきたときにPWA、ブラウザ、TWAどれが立ち上がる? A.アプリリンクに対応しているかどうか次第です。アプリリンクに対応している TWA。対応していない場合は暗黙インテントですね3つどれで開くかきかれる。

まとめ

WEBページあるならついでにTWA対応 YOU やっちゃいなよ。そんなにはまらないよ。