Android で広がるウェブ テクノロジー
2016年10月7日金曜日
この記事は ゲスト投稿者 Active Theory による Android Developers Blog の記事 "Extending Web Technology with Android | Android Developers Blog" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Paper Planes は、「画面から画面に紙飛行機を飛ばすことができたら」というシンプルなアイデアから生まれました。
その中心にあるのは、お互いを瞬時に接続するウェブの力を借りて世界中の人々をつなぐという考え方です。画面上でできることは、特に JavaScript や WebGL といった最新のウェブ技術が登場したことによって広がりつつあります。
Paper Planes は、もともと Google I/O 2016 の基調講演の 30 分前に、参加者と外部からの視聴者をつないで実施されたものです。2016 年の世界平和の日の一般リリースに向けて、Google Play でも公開されている Android Experiment を作成し、既存のウェブ テクノロジーを Android Nougat ネイティブの機能で拡張しました。それによって、たとえば、世界のどこかで飛行機がキャッチされた場合に通知されるようになっています。
はじめに
ユーザーは自分の紙飛行機を作って、スタンプを追加します。スタンプには、自分の所在地があらかじめ設定されています。紙飛行機を飛ばすジェスチャーを行うと、飛行機は仮想世界に向かって飛び立ちます。PC からウェブサイトを開いたユーザーは、紙飛行機が画面上を飛び回っている様子を見ることができます。
その後、ユーザーは紙飛行機が世界のどこでキャッチされたかを確認することができます。紙飛行機のスタンプはパスポートのように読むことができ、3D で表示された地球に飛行経路や飛行距離が表示されます。
自分の飛行機を作れるだけでなく、ユーザーはスマートフォンを使って網で飛んできた飛行機をキャッチするジェスチャーをすることができます。ピンチ操作して飛行機を開くと、その飛行機がどこから飛んできたかがわかります。そして、自分のスタンプを追加してもう一度飛ばすことができます。
WebView
Paper Planes は、Google I/O の舞台上に設置された 50 インチ スクリーンから、最新のウェブ テクノロジーを使った PC やモバイル端末まで、さまざまな端末で動作するように開発されています。
WebGL
定型化されたローポリゴンの地球の表現から大量の紙飛行機まで、さまざまな 3D 要素のレンダリングに WebGL が使用されており、この体験をすばらしいものにしています。地球を照らす部分や、ユーザーがピンチ操作して飛行機を開いたり閉じたりする変形アニメーション部分は、カスタムの GLSL シェーダーを記述しています。
WebSocket
ユーザーが飛行機を「飛ばす」と、WebSocket 経由でメッセージがバックエンド サーバーに送信され、すべてのデスクトップ パソコンにリレーされて飛行機が飛び立つ様子が表示されます。
WebWorker
大量の飛行機の計算シミュレーションには、それぞれの飛行機の位置を計算し、その情報をメインスレッドに戻す WebWorker を使ってマルチスレッドで計算しています。メインスレッドでは、WebGL を使ってレンダリングを行います。
プラットフォームによらないエクスペリエンスを提供するために、ウェブをネイティブ Android コードで拡張しています。Android と密接に統合されている Chromium を活用することで、既存のウェブ コードを使ってアプリの表示レイヤーを作ることができました。同時に、豊富な通知機能やバックグラウンド サービスなど、OS との密接な統合による機能も追加できました。
WebView と Java コードの連携について詳しく知りたい方は、チュートリアルとしてこちらの GitHub レポジトリをご覧ください。
通知
Android アプリへのプッシュ通知の送信には、Firebase Cloud Messaging(FCM)を使用しています。誰かが飛行機をキャッチして飛ばしなおすと、いくつの都市を経たか、何マイル飛んだかといった情報が飛行機を作ったユーザーの端末に FCM 経由で通知されます。通知の送信の際には、端末に頻繁に通知がいかないような制御を行っています。
バックグラウンド サービス
1 日に 1 回実行され、ローカルのストレージを確認してユーザーが最後にアプリを開いた時間を判断するバックグラウンド サービスが実装されています。ユーザーが 2 週間以上アプリを開いていない場合、アプリを開いて新しい飛行機を作ることをうながす通知を送信します。
通信ネットワーク
このアプリは、Google Cloud Platform 上のサーバー ネットワークで実行されています。スタンプ用に大まかな地理的位置を取得するために、ビルトインのジオコーディング ヘッダーを利用し、WebSocket 経由ですべての端末と接続するために Socket.IO を利用しています。
ユーザーは最寄りのサーバーに接続します。サーバーはメッセージを単一のメインサーバーにリレーするとともに、その地域でアプリを参照しているすべてのデスクトップ パソコンにもリレーします。
さらなる進化
このアプローチは大成功で、プラットフォームやフォーム ファクタによらないスムーズで魅力的な体験を提供し、世界中の人々をつなぐことができています。ウェブをネイティブ機能で拡張することは、高品質な体験を進化させる貴重な手法であることがわかりました。Android Experiments ウェブサイトの詳細もご覧ください。
Posted by Yuichi Araki - Developer Relations Team
Paper Planes は、「画面から画面に紙飛行機を飛ばすことができたら」というシンプルなアイデアから生まれました。
その中心にあるのは、お互いを瞬時に接続するウェブの力を借りて世界中の人々をつなぐという考え方です。画面上でできることは、特に JavaScript や WebGL といった最新のウェブ技術が登場したことによって広がりつつあります。
Paper Planes は、もともと Google I/O 2016 の基調講演の 30 分前に、参加者と外部からの視聴者をつないで実施されたものです。2016 年の世界平和の日の一般リリースに向けて、Google Play でも公開されている Android Experiment を作成し、既存のウェブ テクノロジーを Android Nougat ネイティブの機能で拡張しました。それによって、たとえば、世界のどこかで飛行機がキャッチされた場合に通知されるようになっています。
はじめに
ユーザーは自分の紙飛行機を作って、スタンプを追加します。スタンプには、自分の所在地があらかじめ設定されています。紙飛行機を飛ばすジェスチャーを行うと、飛行機は仮想世界に向かって飛び立ちます。PC からウェブサイトを開いたユーザーは、紙飛行機が画面上を飛び回っている様子を見ることができます。
その後、ユーザーは紙飛行機が世界のどこでキャッチされたかを確認することができます。紙飛行機のスタンプはパスポートのように読むことができ、3D で表示された地球に飛行経路や飛行距離が表示されます。
自分の飛行機を作れるだけでなく、ユーザーはスマートフォンを使って網で飛んできた飛行機をキャッチするジェスチャーをすることができます。ピンチ操作して飛行機を開くと、その飛行機がどこから飛んできたかがわかります。そして、自分のスタンプを追加してもう一度飛ばすことができます。
WebView
Paper Planes は、Google I/O の舞台上に設置された 50 インチ スクリーンから、最新のウェブ テクノロジーを使った PC やモバイル端末まで、さまざまな端末で動作するように開発されています。
WebGL
定型化されたローポリゴンの地球の表現から大量の紙飛行機まで、さまざまな 3D 要素のレンダリングに WebGL が使用されており、この体験をすばらしいものにしています。地球を照らす部分や、ユーザーがピンチ操作して飛行機を開いたり閉じたりする変形アニメーション部分は、カスタムの GLSL シェーダーを記述しています。
WebSocket
ユーザーが飛行機を「飛ばす」と、WebSocket 経由でメッセージがバックエンド サーバーに送信され、すべてのデスクトップ パソコンにリレーされて飛行機が飛び立つ様子が表示されます。
WebWorker
大量の飛行機の計算シミュレーションには、それぞれの飛行機の位置を計算し、その情報をメインスレッドに戻す WebWorker を使ってマルチスレッドで計算しています。メインスレッドでは、WebGL を使ってレンダリングを行います。
プラットフォームによらないエクスペリエンスを提供するために、ウェブをネイティブ Android コードで拡張しています。Android と密接に統合されている Chromium を活用することで、既存のウェブ コードを使ってアプリの表示レイヤーを作ることができました。同時に、豊富な通知機能やバックグラウンド サービスなど、OS との密接な統合による機能も追加できました。
WebView と Java コードの連携について詳しく知りたい方は、チュートリアルとしてこちらの GitHub レポジトリをご覧ください。
通知
Android アプリへのプッシュ通知の送信には、Firebase Cloud Messaging(FCM)を使用しています。誰かが飛行機をキャッチして飛ばしなおすと、いくつの都市を経たか、何マイル飛んだかといった情報が飛行機を作ったユーザーの端末に FCM 経由で通知されます。通知の送信の際には、端末に頻繁に通知がいかないような制御を行っています。
バックグラウンド サービス
1 日に 1 回実行され、ローカルのストレージを確認してユーザーが最後にアプリを開いた時間を判断するバックグラウンド サービスが実装されています。ユーザーが 2 週間以上アプリを開いていない場合、アプリを開いて新しい飛行機を作ることをうながす通知を送信します。
通信ネットワーク
このアプリは、Google Cloud Platform 上のサーバー ネットワークで実行されています。スタンプ用に大まかな地理的位置を取得するために、ビルトインのジオコーディング ヘッダーを利用し、WebSocket 経由ですべての端末と接続するために Socket.IO を利用しています。
ユーザーは最寄りのサーバーに接続します。サーバーはメッセージを単一のメインサーバーにリレーするとともに、その地域でアプリを参照しているすべてのデスクトップ パソコンにもリレーします。
さらなる進化
このアプローチは大成功で、プラットフォームやフォーム ファクタによらないスムーズで魅力的な体験を提供し、世界中の人々をつなぐことができています。ウェブをネイティブ機能で拡張することは、高品質な体験を進化させる貴重な手法であることがわかりました。Android Experiments ウェブサイトの詳細もご覧ください。