Click here to load reader
Upload
ryo-maruyama
View
7.176
Download
0
Embed Size (px)
Citation preview
勝手に改造Chrome to Phone
KLab株式会社丸山 亮 @h13i32maru
自己紹介• 会社 : KLab株式会社
• 仕事 : Androidアプリの開発
• 個人活動 : TwitterのサイトをGoogleに偽装
- http://userscripts.org/scripts/show/67940
• Twitter : @h13i32maru
Chrome to PhoneというAndroidアプリの改造について
Chrome to Phoneとは• PCブラウザからAndroidへ任意のURLをプッシュ送信することができる
• Googleが出してるC2DMアプリ
C2DMとは• Colud to Device Messagingの略
• Android端末にデータ(Intent)をプッシュ送信できる仕組み
- IntentはAndroidアプリ間通信で使用されているデータフォーマット
• まだGoogle Labsの機能
• C2DMはXMPPで実装されている(らしい)
C2DMの利点• アプリ側でポーリングを実装しなくてよい
• 他のアプリから送信されてくるIntentと同じように対応すればよい
• データを受信するアプリを起動しておく必要はない
C2DMの登場人物
Google C2DMServer
Android Applicationにデータをプッシュ送信するGoogleのサーバ
Thirdparty ApplicationServer
Google C2DM Serverにデータ送信を依頼するアプリケーションサーバ
Android ApplicationGoogle C2DM Serverからデータを受け取るAndroidアプリケーション
Client ApplicatonThirdparty Application Serverにデータを送信するアプリケーション
Google C2DM Server
• Googleが提供しているサーバ
• このサーバを使うにはGoogleのAPI利用登録が必要
• このサーバに「API認証トークン、RegistrationID、データ」をHTTPSで送信するとAndroid Applicationにデータがプッシュ送信される
Thirdparty Application Server
• Google C2DM Serverにデータを送信するサーバ
• C2DMの利用登録を行って発行されたAPI認証トークンを保持しておく
• RegistrationIDとユーザ情報の紐づけておく
• 自作する必要がある
Android Application
• Google C2DM Serverからプッシュ送信されたデータを受け取る
• 事前にGoogle C2DM ServerにAndroid Application
を登録してRegistrationIDを発行してもらう
• Thirdparty Application Serverの開発者Googleアカウントを埋め込んでおく必要がある
• 自作する必要がある
Client Application
• Thirdparty Application Serverに「ユーザ情報、データ」を送信するアプリ
• 自作する必要がある
C2DMシステム構成(登録)
Google C2DMServer
Thirdparty ApplicationServer
(2)RegistrationIDの発行
(1)アプリ登録
(3)ユーザ情報とRegistrationIDの登録
Android Application
C2DMシステム構成(送信)
Google C2DMServer
Thirdparty ApplicationServer
(1)HTTPS・ユーザ情報・データ
(2)HTTPS・RegistrationID
・データ・API認証トークン
(3)C2DM・Intent
Android ApplicationClient Application
C2DMの注意点• Android2.2から利用可能
• 一度に送信できるデータ量は1KBまで
• 送信できる回数は制限される
• RegistrationIDをThirdparty Application Serverに送信する際は安全な方法を考える必要がある
- Chrome to PhoneではHTTPS+OAuthを使っている
C2DMの勉強のため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
隠し機能• Chrome to Phoneのコードを読んでいたらいくつか隠し機能を発見した
• ChannelAPIを使ってブラウザから他のPCのブラウザにデータを送信できる
• 複数のデバイス(Android/ブラウザ)へデータを送信できる
• 送信先のデバイスを指定できる
ChannelAPIとは• GAEで提供されている機能
• データをブラウザにプッシュ送信できる
• Google TalkサーバのCometを利用している
- CometはAjaxとLongPollingで実現されている
- 将来的にはWebSocketに移行するらしい
• クライアントはJavaScriptのライブラリが提供されている
という訳でChrome to Phoneを改造しました
改造前Chrome to Phone
ServerGoogle C2DM
Server
送信先の端末を選択できない!!送信できるのはAndroid端末だけ!!
改造後Chrome to Phone
ServerGoogle C2DM
Server
送信先の端末を選択可能に!!PCブラウザにも送信可能に!!!
改造したところ(1)
• Chrome to Phone Application
1. Chrome to Phone ServerにRegistrationIDとユーザ情報を登録するときに端末名称を自動的に送信
改造したところ(2)
• Chrome to Phone Client
1. ChannelAPIを使ってブラウザにも送信可能に
2. 自分が登録した端末の一覧を取得して送信先を選択可能に
3. Chrome to Phone ServerにブラウザのRegistrationIDを登録するときにブラウザの名前を送信(ChannelAPI)可能に
Chrome to Phoneのソースコード• 無限ループに陥ってメモリリークするような処理が書かれていた
• 改造中にChrome to Phoneのコードリポジトリ中で一部の処理がコメントアウトになったり削除されたりした
• タイポしたままの変数名がそのまま使われていた
勝手に改造Chrome to Phone
• Android / Google Chrome Extension
- http://h13i32maru.jp/chrometophone
- ※自己責任でお願いします
おわりSpecial Thanks @teru_kusu
参考URL
• http://www.techdoctranslator.com/code-google-com/android-c2dm
• http://code.google.com/p/chrometophone/
• http://blog.asial.co.jp/803