REKのdailymile連携

REKにdailymileとの連携機能を追加しました〜。今Appleに提出してレビュー中です。

dailymileはまだ日本ではあまり知られていないサービスですが、走ってる距離を競えたり、日々のデータをきれいなグラフで見れたりします。GarminConnectと違って、細かいデータは取っておけないけど、共有するにはルートとかは余り無いほうが好都合だったりしますよね。

そんなわけで、僕のアカウント。

REKでサイクルログを共有すると楽しいとおもうよ!

つながるサイコン!

Google Analytics SDK for iOS vol.2

前回、Google Analytics SDKを紹介したんだけど、やっとこ自分のアプリに組み込んでみた。

すごい簡単。注意することといったらトラッキングデータの Event , Action , Labelが何を意味しているのかわかりにくいことくらい。でもGoogleから日本語のドキュメントがでてるので、読めばいいと思う。あとはしばらくテストしてみて、意味のあるデータが取れているかどうか確認したらいいかな。

イベント トラッキング ガイド

Garmin Training Centerとのデータ連携

REKにGarmin Traning Centerへのデータ連携機能を追加中。TCXファイルを書き出せるようにする予定。

Garmin Connectへの直接アップロードがしたいけど、APIがよくわからない。なんかGarmin Edgeとかをブラウザから直接接続するAPIとかはあるんだけど、Garmin ConnectのAPIがわからん。

あと、TCXファイルのSpeedの単位が謎。時速 * 0.31位なんだけど・・・

・追記

https://forums.garmin.com/showthread.php?t=6754

このへんでスピードの単位はメーター/セカンドって言ってる。km/h / 3.6 = m/s だね。

 

Google Analytics SDK for iOS

TwitterのTLをみてたら、Google Analytics SDK for iOS ってのが存在することをしった。iPhoneアプリ内のどの機能がつかわれているとか、どのビューがよく見られているとか解析することができる。ちょうど自分でつくろうかどうか迷っていたところなのでこれを使おうと思った。

iPhoneアプリのアクセス解析Google Analytics SDK for iOSについて

素晴らしい資料!

コードスニペットの管理ツール

いつもTableViewCellのロードのコードとかをちまちま書き換えるのがめんどかったり、定形のコードをせっせと探したりするのにたいがいむかついてきた。Twitterでいいのがないか聞いてみたら、師匠 Akamatsuさんからリプライ!

snippetsapp

デザインも可愛くてよさそう。これを愛用されているそうです。とりあえず僕は30 Day Trial!

 

Facebook API の叩き方

前回のエントリでいまいちできてなかったんだけど、一応ポストに成功したのでメモ。

前回足りなかったのはパーミッションの設定。public stream にポストを流すには、publish_stream パーミッションが必要。なので

_permissions =  [[NSArray arrayWithObjects:@"publish_stream", @"read_stream", @"offline_access",nil] retain];

こんな感じに設定してログインする。

GraphAPIはよくわかんなかったから、REST APIを使うことにした。

stream.publish

ここ。どうやらmessageさえ埋まってればポストできそうなので、

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"テストメッセージ", @"message",nil];
[_facebook requestWithMethodName:@"stream.publish"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];

こんな感じで呼び出せばポストできた。

前回調べるって書いた、一度認証したらそれを保存しておいて、二度と認証画面を出さない方法。facebook のSDKだとFacebookアプリを立ち上げて認証してOKを押すと、URLスキーマでもとのアプリをパラメータ付きで呼び出してくる。

そのパラメータの中にアクセストークンと有効期限が入っているよう。そいつを保存しておいて、次からは保存したアクセストークンと有効期限を設定すると良いみたい。

FBSessionDelegate の fbDidLogin にて保存

保存

[[NSUserDefaults standardUserDefaults]setObject:_facebook.accessToken forKey:@"token"];
[[NSUserDefaults standardUserDefaults]setObject:_facebook.expirationDate forKey:@"expiredate"];
[[NSUserDefaults standardUserDefaults]synchronize];

設定は _facebookをalloc Initした直後ぐらいに、

NSString *accessKey =  [[NSUserDefaults standardUserDefaults]objectForKey:@"token"];
NSDate *expdate =  [[NSUserDefaults standardUserDefaults]objectForKey:@"expiredate"];
if (accessKey){
_facebook.accessToken = accessKey;
_facebook.expirationDate = expdate;
}

そんな感じでオッケーみたい。

ちなみに、facebookErrDomainerror 506 は多分デュプリケートメッセージ。同じメッセージを連投するとでるんだとおもう。

Facebook APIの叩き方(まだできてないよ編)

今度はFacebookにステータスメッセージを投げたい場合。Facebook は iOS 用のSDKをつくってくれているのでとりあえずそれをダウンロードする。

Facebook iOS SDK

雰囲気をつかむためにDemoアプリを実行するといいとおもう。開発で使うiPhoneにFaceBookアプリがすでにインストールされてると認証が楽になる。認証の部分を自前で行う方法をちょっと調べ中。あとで書くかも。

僕がやりたいのは自分のウォールにステータスメッセージをポストしたい。どのAPIを呼び出せばよいか調べる。

RESTのAPIは今後廃止予定らしいので新しいGraphAPIというのを使うのがいいらしい。何はなくてもリファレンスを調べる

Graph API Reference

これのStatusMessageの所じゃなかろうか。useridが必ず必要なんだけど、ログインしている状態では自分のuseridは「me」で指し示せるらしい。だからStatusMessageのURLは https://graph.facebook.com/me/feed こんな感じになる。

だけども、こっからどういうパラメータで叩けばいいのかじぇんじぇんわかんない。今調べ中

Twitter APIの叩き方

アプリを作ってるとつい Twitter に軽く一言投稿してみたりしたくなりがち。しかし、Twitter は最近 Basic 認証をやめちゃったから手軽に Twit とかできない。今は oAuth か xAuth を使う必要がある。iPhone アプリ的には xAuth のほうがBasic認証と同じUIを使えるので良いと思うんだけど、申請が必要だったりちょっとめんどくさい。なのでとりあえずのところ、oAuth を使うのがいいと思う。

TwitterのOAuth認証を使う

ココを読むのがファイナルアンサーなんだけど、引っかかった点があったので補足しておくね。

bengottlieb’s Twitter-OAuth-iPhone at master – GitHub

このライブラリを使うときにlibxmlを使うかどうかを選べる。デフォルトは使わない。だけどincludeされてるからファイルの末尾にlibxmlが付いたファイルを消さないといけない。

iPhone用のカレンダーコンポーネント

iPhoneの標準のカレンダーのような見た目を作るのはちょっとめんどくさい。

探してみたら Kalというオープンソースのコンポーネントがあった。ライセンスはMITっぽい。

Kal-github

本来は「Integrating Kal into Your Project」のように、参照して使うもんだと思うけど、今回は結構カスタマイズしたいのでソースをコピーしてちまちまいじりながら使おうかと思ってる。

基本的にはインスタンスをつくって、DelegateとDataSourceを設定してあげればよし。

UITableViewDataSourceはした半分のテーブルビューを表示するために必要。

・presentingDatesFrom

ここでデータをフェッチする。DBとかにアクセスしたり、Webからデータを持ってくるときは非同期でデータを取って来るべし。データがメモリ上にロードされたら[delegate loadedDataSource:self];とかを呼び出せば良い。これを呼び出すとmarkedDatesFromがコールバックされる。

・markedDatesFrom

データがあるNSDateのアレイを返すべし。

・loadItemsFromDate

日付ごとにあるデータを作っておくべし。した半分のテーブルビュー用のデータ。

・removeAllItems

データを削除するべし。日付が変わった時とかにデータをクリアする目的で呼び出される。

という感じで、適当に実装するといいとおもう。