2019年11月13日水曜日

FireTV の Webアプリケーションでは Google の OAuth は使えないのか

概要

FireTVアプリは Android or Webアプリケーションのどちらかで開発することができます
Webアプリケーションとして開発を進めていたのですが Google OAuth をどうしても実装することができなかったので備忘録として残しておきます
解決方法があればご教授いただきたいです

環境

  • Ruby 2.6.2p47
  • JavaScript
  • FireTV 3gen
  • Web App Tester

やりたかったこと

Heroku にデプロイした Web アプリケーションを FireTV 上で動作させます
Web アプリケーションは Google OAuth を使ったアプリになっており認証後 Ruby アプリにアクセスできるようになります

FireTV の Web App Tester を使ってデバッグするのですが「disallowed_useragent」になり OAuth を発動させることができません
普通に Chrome や Firefox のブラウザでテストする分には動作します

どうやら Google の使用で WebView からの OAuth リクエストはすべて拒否されているようです (参考)
FireTV では Web アプリケーションの場合には Amazon ウェブアプリケーションプラットフォームと呼ばれる専用の WebView が立ち上がります
それが原因で disallowed_useragent になってしまうようです

結果的に解決できなかったのですがいろいろと試したことを紹介します

試したこと

Silk で一度ログインしてからアプリを起動する

Google 的にはデバイスに内蔵されているブラウザで一度認証すれば再度アプリで認証する必要がなくなるとのことだったので FireTV の Silk ブラウザを使って一度認証してからアプリを開いてみたのですがダメでした
もしかしたら実装方法が悪いだけかもしれませんが

アプリ内から認証時にだけ Silk を立ち上げる

これもできませんでした
Web アプリケーションなので立ち上げる方法は window.open を使ったのですが新規でブラウザは立ち上がらず先に進めませんでした

google-api-javascript-client を使ってみる

JavaScript のみで Google OAuth するライブラリです
認証時に別ウィンドウを開いて行ってくれるので Silk が起動してくれるかなと思って試したのですがダメでした
WebView 内で使っているので当然ダメでした

UserAgent を書き換えられないか

window.navigator.__defineGetter__ を使ってユーザエージェントを書き換えてアクセスしてみたのですがこれもダメでした
もしかしたらこれも実装方法が悪かっただけかもしれません

考察

FireTV + Webアプリケーションの構成では必ず WebView Google OAuth は現状突破できないんじゃないかなと思います
もし Google OAuth を使っているのであれば Silk を使えということなのだと思います

今回は試さなかったのですが FireTV では Android アプリが動作します
なので Android アプリとして作れば Google の公式の Android SDK があるのでこれを使って FireTV でも Google OAuth が使えるようになるのではないかと思っています

参考サイト

0 件のコメント:

コメントを投稿