2012年10月19日金曜日

koalaを使ってRuby on RailsでFacebookアプリ開発 ②

koalaを使ってRuby on RailsでFacebookアプリ開発 ①で紹介したものにいくつか補足をしていきたいと思います。(特につまずいたところを中心に!)

モバイル版Facebook
モバイル版のFacebookサイトを作る場合は、ログインや承認画面もモバイル用にするべきだと思いますが、その場合は、パート①で紹介したURL「https://graph.facebook.com/oauth/authorize」にdisplay=touchというパラメータを追加することで可能です。

koalaでウォールに書き込む
ウィールに書き込むには、put_wall_postメソッドを使います。これを使えば簡単に投稿出来てしまいます。以下はサンプルです。

graph = Koala::Facebook::API.new(<アクセストークン>)
graph.put_wall_post(
  "本文(HTMLで。)",
  {
    :name => "リンクのタイトル",
    :link => "リンクのURL",
    :picture => "写真のパス"
  }
)

ちなみに、本当に投稿されてしまうので、実施するときはFacebookのテストユーザでやりましょう!テストユーザは、developers.facebook.comから"Apps"を選択し、"Edit Rolls"の中で作れます。

アクセストークンを取得するときに使ったHTTP API
rubyのいろいろなAPIを試してみたのですが、いろいろトラブって、最終的にはhttpclientを使いました。

Gemfileに以下の行を足し、
gem 'httpclient'

bundle installを実行!その後以下のコードで取得dけいました。
access_token = client.get(
    "https://graph.facebook.com/oauth/access_token", 
    :query => {
      :client_id => <App ID>, 
      :redirect_uri => <最終的なリダイレクト先>,
      :client_secret => <アプリのシークレットキー>, 
      :code => <バリデーションコード>
    }).body

さらに問題になったのは戻ってきたアクセストークンですが、いつの日から&expires=XXX(XXXは秒数)というようなものもくっついてきたので、これを切り取る必要があると思います。(これをもとにアクセストークンをキャッシュしておけば、毎回Facebookからアクセストークンを取得する処理を実行する必要はなくなります。特にこの処理はあまり速くないと思いますので、キャッシュしておいた方がいいと思います。)

InvalidAuthenticityTokenエラーが発生する
Web API風にJSONでJavaScriptとデータをやり取りする場合にInvalidAuthenticityTokenエラーが発生しまいました。これはCSRF対策としてRails2.0から導入された機能で、アプリが返した画面からしかリクエストを受けないようにする機能みたいです。これを回避するために以下のようにしてverify_authenticity_tokenをスキップしました。

skip_before_filter :verify_authenticity_token

AndroidやiOSなどでインストールするアプリ(.apkや.ipa)の場合には、Viewを利用せず、Web API風にする必要があるため、この対応が必要になってくる


とりあえず、結構つまずいたところはこんな感じですね。また、つまずいたら追記します!


0 件のコメント:

コメントを投稿