26

Click here to load reader

勝手に改造 Chrome to Phone

Embed Size (px)

Citation preview

Page 1: 勝手に改造 Chrome to Phone

勝手に改造Chrome to Phone

KLab株式会社丸山 亮 @h13i32maru  

Page 2: 勝手に改造 Chrome to Phone

自己紹介• 会社 : KLab株式会社

• 仕事 : Androidアプリの開発

• 個人活動 : TwitterのサイトをGoogleに偽装

- http://userscripts.org/scripts/show/67940

• Twitter : @h13i32maru

Page 3: 勝手に改造 Chrome to Phone

Chrome to PhoneというAndroidアプリの改造について

Page 4: 勝手に改造 Chrome to Phone

Chrome to Phoneとは• PCブラウザからAndroidへ任意のURLをプッシュ送信することができる

• Googleが出してるC2DMアプリ

Page 5: 勝手に改造 Chrome to Phone

C2DMとは• Colud to Device Messagingの略

• Android端末にデータ(Intent)をプッシュ送信できる仕組み

- IntentはAndroidアプリ間通信で使用されているデータフォーマット

• まだGoogle Labsの機能

• C2DMはXMPPで実装されている(らしい)

Page 6: 勝手に改造 Chrome to Phone

C2DMの利点• アプリ側でポーリングを実装しなくてよい

• 他のアプリから送信されてくるIntentと同じように対応すればよい

• データを受信するアプリを起動しておく必要はない

Page 7: 勝手に改造 Chrome to Phone

C2DMの登場人物

Google C2DMServer

Android Applicationにデータをプッシュ送信するGoogleのサーバ

Thirdparty ApplicationServer

Google C2DM Serverにデータ送信を依頼するアプリケーションサーバ

Android ApplicationGoogle C2DM Serverからデータを受け取るAndroidアプリケーション

Client ApplicatonThirdparty Application Serverにデータを送信するアプリケーション

Page 8: 勝手に改造 Chrome to Phone

Google C2DM Server

• Googleが提供しているサーバ

• このサーバを使うにはGoogleのAPI利用登録が必要

• このサーバに「API認証トークン、RegistrationID、データ」をHTTPSで送信するとAndroid Applicationにデータがプッシュ送信される

Page 9: 勝手に改造 Chrome to Phone

Thirdparty Application Server

• Google C2DM Serverにデータを送信するサーバ

• C2DMの利用登録を行って発行されたAPI認証トークンを保持しておく

• RegistrationIDとユーザ情報の紐づけておく

• 自作する必要がある

Page 10: 勝手に改造 Chrome to Phone

Android Application

• Google C2DM Serverからプッシュ送信されたデータを受け取る

• 事前にGoogle C2DM ServerにAndroid Application

を登録してRegistrationIDを発行してもらう

• Thirdparty Application Serverの開発者Googleアカウントを埋め込んでおく必要がある

• 自作する必要がある

Page 11: 勝手に改造 Chrome to Phone

Client Application

• Thirdparty Application Serverに「ユーザ情報、データ」を送信するアプリ

• 自作する必要がある

Page 12: 勝手に改造 Chrome to Phone

C2DMシステム構成(登録)

Google C2DMServer

Thirdparty ApplicationServer

(2)RegistrationIDの発行

(1)アプリ登録

(3)ユーザ情報とRegistrationIDの登録

Android Application

Page 13: 勝手に改造 Chrome to Phone

C2DMシステム構成(送信)

Google C2DMServer

Thirdparty ApplicationServer

(1)HTTPS・ユーザ情報・データ

(2)HTTPS・RegistrationID

・データ・API認証トークン

(3)C2DM・Intent

Android ApplicationClient Application

Page 14: 勝手に改造 Chrome to Phone

C2DMの注意点• Android2.2から利用可能

• 一度に送信できるデータ量は1KBまで

• 送信できる回数は制限される

• RegistrationIDをThirdparty Application Serverに送信する際は安全な方法を考える必要がある

- Chrome to PhoneではHTTPS+OAuthを使っている

Page 15: 勝手に改造 Chrome to Phone

C2DMの勉強のためChrome to Phoneのソースコード

を読んでみました

Page 16: 勝手に改造 Chrome to Phone

Chrome to Phoneの構成

Thirdparty ApplicationServer

Chrome to PhoneServer

Google App Engine

Android Application Chrome to PhoneApplication

-

Client Application Chrome to PhoneClient

Google Chrome Extension

Page 17: 勝手に改造 Chrome to Phone

隠し機能• Chrome to Phoneのコードを読んでいたらいくつか隠し機能を発見した

• ChannelAPIを使ってブラウザから他のPCのブラウザにデータを送信できる

• 複数のデバイス(Android/ブラウザ)へデータを送信できる

• 送信先のデバイスを指定できる

Page 18: 勝手に改造 Chrome to Phone

ChannelAPIとは• GAEで提供されている機能

• データをブラウザにプッシュ送信できる

• Google TalkサーバのCometを利用している

- CometはAjaxとLongPollingで実現されている

- 将来的にはWebSocketに移行するらしい

• クライアントはJavaScriptのライブラリが提供されている

Page 19: 勝手に改造 Chrome to Phone

という訳でChrome to Phoneを改造しました

Page 20: 勝手に改造 Chrome to Phone

改造前Chrome to Phone

ServerGoogle C2DM

Server

送信先の端末を選択できない!!送信できるのはAndroid端末だけ!!

Page 21: 勝手に改造 Chrome to Phone

改造後Chrome to Phone

ServerGoogle C2DM

Server

送信先の端末を選択可能に!!PCブラウザにも送信可能に!!!

Page 22: 勝手に改造 Chrome to Phone

改造したところ(1)

• Chrome to Phone Application

1. Chrome to Phone ServerにRegistrationIDとユーザ情報を登録するときに端末名称を自動的に送信

Page 23: 勝手に改造 Chrome to Phone

改造したところ(2)

• Chrome to Phone Client

1. ChannelAPIを使ってブラウザにも送信可能に

2. 自分が登録した端末の一覧を取得して送信先を選択可能に

3. Chrome to Phone ServerにブラウザのRegistrationIDを登録するときにブラウザの名前を送信(ChannelAPI)可能に

Page 24: 勝手に改造 Chrome to Phone

Chrome to Phoneのソースコード• 無限ループに陥ってメモリリークするような処理が書かれていた

• 改造中にChrome to Phoneのコードリポジトリ中で一部の処理がコメントアウトになったり削除されたりした

• タイポしたままの変数名がそのまま使われていた

Page 25: 勝手に改造 Chrome to Phone

勝手に改造Chrome to Phone

• Android / Google Chrome Extension

- http://h13i32maru.jp/chrometophone

- ※自己責任でお願いします