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 やっちゃいなよ。そんなにはまらないよ。