投稿

12月, 2012の投稿を表示しています

2012振り返り

ついこの前2012年年明けたと思って気づいたらもう年末。この時間の流れの速さは異常です。残り少ない人生、多少なりとも振り返りをしておかないと、あっと言う間に終わってしまいそうです。そういうわけで、時間もないのでちゃちゃっと振り返ってみます。 昨年書いたエントリー によると、2012年の目標としては、 ・データのクラウドへの移行 だったようです。 目標は達成しました。SmartTrainingに「同期」機能を盛り込みました。 同期機能は、AndroidアプリケーションのデータをGoogle Fusion Tablesと双方向同期する機能です。個人的にはそれなりに便利になったと思っているのですが、思ったほど利用はされていないようです。というのは、2012/12くらいから、Fusion Tables APIの挙動が変わり、さらにBeta版のAPIが利用できなくなったことにより同期機能が利用できなくなっているにもかかわらず、全く問い合わせが無いためです。設定が深いところにあるので、既存のユーザさんは気付かないんでしょうね。 その他にやったことといえば、 ・ググれカス Plug-in for twiccaのリリース ・SmartWatch MN2対応 ・ACE資格取得 という感じ。 MN2対応を行った2012/5以降、SmartTrainingは大きなリリースは無く、バグ修正を2回ほどやっただけです。それまではほぼ毎週リリースしていたので、開発おわっちゃったんじゃないかというペースですが、そんなことはありません。ActionBarSherlockベースの新UIへの変更に思ったより時間がかかっています。何回か作って気に入らないので作り直したりしています。もうかれこれFragmentを30-40個くらい作っては捨てています。とても仕事じゃできないやり方です。一応、もうほとんど完了してリリースしてもいいレベルまでは来ているのですが、先に述べたFusion Tables APIのDeprecateされたことより、新API対応をする必要が出てきてリリースはもう少し先になりそうです。あと、リリース前にDeploy Gateを使ってテストもやってみたいです。そうこうしているうちに、Android Map API v2が出てきて早く使いたかったり、先延ばしにして

AndroidからGoogle Service OAuth2.0の利用で詰んでいる

詰んでます。 この投稿は結局現状解決していません。 あしからず。 ※2013/3/13追記 解決しました。 結局、「2.」の方法でうまくいきました。ただ、この記事を書いていたタイミングでは確かにICSでのみNPEが起きていたのですが、全く同じコードを今実行しても問題が再現しなくなっています。端末をフルリセットしてからも再現しないので、まぁ、大丈夫なんじゃないかと思います。というわけで、このケースは「2.」で対応しましょう。 ---- Google Fusion Tables API v1を使いたい。今すぐ。 Google Fusion Tables API v1はprivateなデータにアクセスするのにOAuth2必須。(たぶん、他のGoogle Serviceも同様にOAuth2を標準的な認証方式としていく流れだと思います) いろいろ調べた結果、OAuth2するためには、以下の4種類の方法があると考えている。 1.  AndroidでGoogleのOAuth2認証を行うには?(外部ライブラリ完全非依存版) 2. AndroidのAccountManager経由でGoogleのOAuth2認証を行うには?(外部ライブラリ完全非依存版) 3. http://localhostなコールバックURLを処理する方法 4. ブラウザ上に表示された認証コードを手入力する方法 「1.」の方法はWebViewを使っている。 WebViewは本来的に脆弱性があるため、デリケートな認証情報を扱うOAuth2では利用しづらい。 Androidセキュリティ勉強会~WebViewの脆弱性編~ でも、海外では余裕で利用している。 Oauth 2.0 flow in Android 大丈夫? 「2.」の方法は ICSだとGrantCredentialsPermissionActivityがNPEを起こす ので利用できない。それより前のOSもしくはそれより後のOSでは発生しないらしい。しかし、ICS全盛の今ICSを無視するわけにはいかない。なのでアウト。 「3.」の方法は、仮にTwitterだったら OAuthの認証にWebViewを使うのはやめよう にあるように「getOAuthRequestToken 呼び出し時に Callback UR

Intent anywhere

1. はじめに たまたま抱えていた問題が解決したタイミングで「Android Advent Calendar 2012」の案内が飛んでいたので思わずエントリーしてしまいました。ということで12月29日担当します@awwa500です。よろしくお願いいたします。 2. 概要 CGIからのIntentの送信について書きます。ネタは薄いです。 3. きっかけ Androidのアプリ開発を初めて3年ちょっとくらいになりますが、Intentの仕組みを知った当時、衝撃を受けました。Intentが世界を変える、とまで思ったのはそれほど大げさではありません。 ところが、そんな信念を打ち砕かんとする事態が発生しました。今回はその辺の話を書いてみようと思います。 4. Intentは最強だよね IntentについてググるとTechBoosterさんのブログがヒットします。Intentを使えば画面遷移も、アプリ間連携も、サービスの利用も、とにかくいろいろとできるわけです。 Intentで画面遷移する(明示的Intent) Intentで画面遷移する(暗黙的Intent) Serviceを使う(1) LocalServiceによる常駐型アプリ JNIを介してNativeなコードからもIntentを投げることもできます。 Android: How to broadcast intent from native code? IntentServiceと組み合わせるとキューも簡単に実装できちゃいます。 IntentServiceを使って非同期処理を行う コマンドラインからもIntentを投げることもできちゃいます。 ターミナルからIntentを投げる だんだんTechBoosterさんのリンク集みたいになってきましたね。このまま終わってしまってもいい感じになってきました。 5. 挫折 というわけで、どんな状況でもIntentがなんとかしてくれると思っていました。でもこれまでの情報では解決できない事態になりました。例えば、たまにAndroid上でApacheを動かしたくなることがありますよね?(ちょっとこの設定に無理があるような気がしますが、まあ、あるんです)このApacheが駆動するCGIと通常のAndroidアプリケーションを連携させた